Name: series-workflowlfmmp Phase: Succeeded StartedAt: 2026-09-09 14:54:43 +0000 UTC FinishedAt: 2026-09-09 19:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[0] Phase: Succeeded StartedAt: 2026-09-09 14:54:43 +0000 UTC FinishedAt: 2026-09-09 15:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 14:54:43 +0000 UTC FinishedAt: 2026-09-09 15:20:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "fb527853-2b10-4a3d-824a-fbb23da2b2bf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_dump_mcaddr", "rtnl_dump_mcaddr_dev", "rtnl_fill_mcaddr", "rtnl_valid_dump_mcaddr_req" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUlRNX0dFVE1VTFRJQ0FTVCBkdW1wIGhhbmRsZXIgZm9yIFBGX1BBQ0tFVCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gbmV0L2NvcmUvcnRuZXRsaW5rLmMuXG5cbjEuIE5ldGxpbmsgTWVzc2FnZSBJbml0aWFsaXphdGlvbjogVGhlIGZpeGVkIGhlYWRlciBgc3RydWN0IGlmYWRkcm1zZ2AgY29udGFpbnMgbm8gc3RydWN0dXJlIHBhZGRpbmcgKDQgdTggZmllbGRzIGZvbGxvd2VkIGJ5IGEgdTMyIGZpZWxkLCA4IGJ5dGVzIHRvdGFsKSBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgcnRubF9maWxsX21jYWRkcigpYC5cbjIuIE5ldGxpbmsgQXR0cmlidXRlczogQWxsIGFwcGVuZGVkIG5ldGxpbmsgYXR0cmlidXRlcyB1c2Ugc3RhbmRhcmQgbmV0bGluayBoZWxwZXJzIChgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zMzJgLCBgbmxhX3B1dGApIHRoYXQgcGFzcyBzY2FsYXIgdmFsdWVzIG9yIGV4YWN0bHkgYGRldi1cdTAwM2VhZGRyX2xlbmAgYnl0ZXMgZnJvbSBgaGEtXHUwMDNlYWRkcmAgKHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIGBkZXYtXHUwMDNlYWRkcl9sZW5gIHVwb24gY3JlYXRpb24pLiBQYWRkaW5nIGFsaWdubWVudCBieXRlcyBhcmUgemVyb2VkIGJ5IG5ldGxpbmsgaGVscGVycy5cbjMuIFZhcmlhYmxlcyBcdTAwMjYgRmlsdGVyczogU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXJgIGFuZCBkdW1wIGNvbnRleHQgc3RhdGUgKGBjdHhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuIEtBU0FOL1N0YW5kYXJkIFNhbml0aXplcnM6IFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgUkNVL2xvY2tkZXAgdHJhdmVyc2FsIG9mIGRldmljZSBsaXN0cywgbmV0d29yayBuYW1lc3BhY2UgcmVmY291bnRzLCBvciBidWZmZXIgYm91bmRzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wIHN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIHJlcXVlc3RzIGluIHJ0bmV0bGluay4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGFuZCBkdW1waW5nIGxvZ2ljIChydG5sX2R1bXBfbWNhZGRyLCBydG5sX2R1bXBfbWNhZGRyX2RldiwgcnRubF9maWxsX21jYWRkciwgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEpIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgTkVUTElOS19ST1VURSBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWNiZDY1Mzg4MTg4NDM5ZDllZTJmNDhjMTQ4YTdkZjZiYzQzMWMzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MTg6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLmFkZjgyYjY5YWRlNzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiAmIzQzOzc3LDggQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgICBuYW1lOiBtY2F1dG9qb2luXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICYjNDM7MTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxuLSAgICAgICAgdHlwZTogYmluYXJ5XG4mIzQzOyAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcHJvdG9cbiAgICAgICAgIHR5cGU6IHU4XG5AQCAtMTY4LDcgJiM0MzsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbiYjNDM7ICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IHNlbGVjdHMgdGhlIGFkZHJlc3NcbiYjNDM7ICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuJiM0MzsgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXG4mIzQzOyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxuJiM0MzsgICAgICAgIFNJT0NBRERNVUxUSSBvciBcJiMzNDticmlkZ2UgZmRiIGFkZCAuLi4gc2VsZlwmIzM0OywgcmF0aGVyIHRoYW4gYnkgYVxuJiM0MzsgICAgICAgIHByb3RvY29sIGpvaW4gYXJlIHJlcG9ydGVkIHdpdGggdGhlIGdsb2JhbCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbkBAIC0xODEsMTAgJiM0MzsxODksMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxuICAgICAgICAgICAgIC0gbWMtdXNlcnNcbiAgICAgICAgICAgICAtIGNhY2hlaW5mb1xuJiM0MzsgICAgICAgICAgICAtIGZsYWdzXG4mIzQzOyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgICByZXBseTpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC01Nyw2ICYjNDM7NTcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEVcdDB4MjAwXG4gI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOXHQweDQwMFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcdDB4ODAwXG4mIzQzOyNkZWZpbmUgSUZBX0ZfR0xPQkFMXHRcdDB4MTAwMFxuIFxuIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHtcbiBcdF9fdTMyXHRpZmFfcHJlZmVyZWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggODFjNWE2MTA0ZGVhMS4uZjU0ZTljYjNiZjMwYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTY5IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuJiM0MztcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbiYjNDM7e1xuJiM0MztcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDtcbiYjNDM7XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4mIzQzO1x0c3RydWN0IG5sbXNnaGRyICpubGg7XG4mIzQzO1xuJiM0MztcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG4mIzQzO1x0XHRcdGZsYWdzKTtcbiYjNDM7XHRpZiAoIW5saClcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG4mIzQzO1x0LyogaWZtLVx1MDAzZWlmYV9mbGFncyBob2xkcyA4IGJpdHMsIHRoZSBmdWxsIHZhbHVlIGlzIGluIElGQV9GTEFHUyAqL1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcbiYjNDM7XHRpZiAoKG5ldG5zaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fFxuJiM0MztcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7XG4mIzQzO1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5sbXNnX2VuZChza2IsIG5saCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiYjNDM7XHRpbnQgYWRkcl9pZHggPSAwO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbiYjNDM7XHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4mIzQzO1x0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG4mIzQzO1x0XHRcdGFkZHJfaWR4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbiYjNDM7XHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRhZGRyX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4mIzQzO1xuJiM0MztcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xuJiM0MztcdHN0cnVjdCBuZXQgKnRndF9uZXQ7XG4mIzQzO1x0aW50IG5ldG5zaWQ7XG4mIzQzO1x0aW50IGlmaW5kZXg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHtcbiYjNDM7XHRbSUZBX1RBUkdFVF9ORVROU0lEXVx0PSB7IC50eXBlID0gTkxBX1MzMiB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTtcbiYjNDM7XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG4mIzQzO1x0aWYgKCFpZm0pIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuIHx8IGlmbS1cdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVx1MDAzZWlmYV9zY29wZSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLFxuJiM0MztcdFx0XHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xuJiM0MztcdFx0c3RydWN0IG5ldCAqbmV0O1xuJiM0MztcbiYjNDM7XHRcdGZpbHRlci1cdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XG4mIzQzO1x0XHRuZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLVx1MDAzZW5ldG5zaWQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihuZXQpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbiYjNDM7XHRcdC50Z3RfbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKSxcbiYjNDM7XHRcdC5uZXRuc2lkID0gLTEsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuJiM0MztcdFx0aW50IGFkZHJfaWR4O1xuJiM0MztcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBza2ItXHUwMDNlc2ssIFx1MDAyNmZpbHRlcixcbiYjNDM7XHRcdFx0XHRcdCBjYi1cdTAwM2VleHRhY2spO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChmaWx0ZXIuaWZpbmRleCkge1xuJiM0MztcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4mIzQzO1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuJiM0MztcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTtcbiYjNDM7XHRcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGZpbHRlci5uZXRuc2lkIFx1MDAzZT0gMClcbiYjNDM7XHRcdHB1dF9uZXQoZmlsdGVyLnRndF9uZXQpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiAmIzQzOzc0MTQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPVxuIFx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcbiBcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcbiBcdHsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSxcbiYjNDM7XHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXG4mIzQzO1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyAmIzQzOzEsMjEgQEBcbiAjIS91c3IvYmluL2VudiBweXRob24zXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuJiM0MztpbXBvcnQgZXJybm9cbiBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbiBJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5O2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJiMzOTspXG4mIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KVxuJiM0MztFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJiMzOTswMTowMDo1ZTowMTowMTowMSYjMzk7XG4mIzQzO0VUSF9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoRVRIX1RFU1RfTVVMVElDQVNUX1NUUi5yZXBsYWNlKCYjMzk7OiYjMzk7LCAmIzM5OyYjMzk7KSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgJiM0MzsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuIFxuJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1RcbiYjNDM7ICAgIGR1bXA6IHRoZSBpZmEtaW5kZXggZmlsdGVyLCBtYy11c2VycywgdGhlIGdsb2JhbCBmbGFnIGFuZFxuJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgZm9yIGlmbmFtZSBpbiAoXCYjMzQ7ZHVtbXkxXCYjMzQ7LCBcJiMzNDtkdW1teTJcJiMzNDspOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgbmFtZSB7aWZuYW1lfSB0eXBlIGR1bW15XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBzZXQge2lmbmFtZX0gdXBcJiMzNDspXG4mIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcJiMzNDtkdW1teTFcJiMzNDspXG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O21hZGRyIGFkZCB7RVRIX1RFU1RfTVVMVElDQVNUX1NUUn0gZGV2IGR1bW15MVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuJiM0MzsgICAgICAgICAgICAgICAge1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsIFwmIzM0O2lmYS1pbmRleFwmIzM0OzogZGV2X2lkeH0sXG4mIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4mIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbiYjNDM7ICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXBcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIHJhaXNlXG4mIzQzO1xuJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXJcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XG4mIzQzO1xuJiM0MzsgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cbiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtnbG9iYWwmIzM5OywgZW50cmllc1tFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCYjMzQ7KVxuJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDt1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9pbigmIzM5O2dsb2JhbCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O1NJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdFxuJiM0MzsgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bmV0bnMgc2V0IHtwZWVyfSA1XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15XCYjMzQ7LCBucz1wZWVyKVxuJiM0MzsgICAgICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkdW1teTMgdXBcJiMzNDssIG5zPXBlZXIpXG4mIzQzOyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXCYjMzQ7bGluayBzaG93IGR1bW15M1wmIzM0OywganNvbj1UcnVlLCBucz1wZWVyKVswXVsmIzM5O2lmaW5kZXgmIzM5O11cbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuJiM0MzsgICAgICAgICAgICAgICAge1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsIFwmIzM0O3RhcmdldC1uZXRuc2lkXCYjMzQ7OiA1fSxcbiYjNDM7ICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10sIGFkZHJbJiMzOTt0YXJnZXQtbmV0bnNpZCYjMzk7XSlcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIFwmIzM0O3RhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRuc1wmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgJiM0MzszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXG4mIzQzOyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uYWRmODJiNjlhZGU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgc2VsZWN0cyB0aGUgYWRkcmVzcwomIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb24KJiM0MzsgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlCiYjNDM7ICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgZXhwbGljaXRseSwgZS5nLiB3aXRoCiYjNDM7ICAgICAgICBTSU9DQURETVVMVEkgb3IgJiMzNDticmlkZ2UgZmRiIGFkZCAuLi4gc2VsZiYjMzQ7LCByYXRoZXIgdGhhbiBieSBhCiYjNDM7ICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuCiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzCiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZwogICAgICAgZG86CkBAIC0xODEsMTAgJiM0MzsxODksMTMgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gbXVsdGljYXN0CiAgICAgICAgICAgICAtIG1jLXVzZXJzCiAgICAgICAgICAgICAtIGNhY2hlaW5mbwomIzQzOyAgICAgICAgICAgIC0gZmxhZ3MKJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiA1OAotICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgICByZXBseToKICAgICAgICAgICB2YWx1ZTogNTgKICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAppbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKQEAgLTU3LDYgJiM0Mzs1Nyw3IEBAIGVudW0gewogI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFCTB4MjAwCiAjZGVmaW5lIElGQV9GX01DQVVUT0pPSU4JMHg0MDAKICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1kJMHg4MDAKJiM0MzsjZGVmaW5lIElGQV9GX0dMT0JBTAkJMHgxMDAwCiAKIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHsKIAlfX3UzMglpZmFfcHJlZmVyZWQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDgxYzVhNjEwNGRlYTEuLmY1NGU5Y2IzYmYzMGMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00NTY2LDYgJiM0Mzs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCXJldHVybiBza2ItJmd0O2xlbiA/IDogcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsCiYjNDM7CQkJICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpCiYjNDM7ewomIzQzOwl1MzIgaWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwOwomIzQzOwlzdHJ1Y3QgaWZhZGRybXNnICppZm07CiYjNDM7CXN0cnVjdCBubG1zZ2hkciAqbmxoOwomIzQzOwomIzQzOwlubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLAomIzQzOwkJCWZsYWdzKTsKJiM0MzsJaWYgKCFubGgpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19kYXRhKG5saCk7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDsKJiM0MzsJaWZtLSZndDtpZmFfcHJlZml4bGVuID0gMDsKJiM0MzsJLyogaWZtLSZndDtpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi8KJiM0MzsJaWZtLSZndDtpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7CiYjNDM7CWlmbS0mZ3Q7aWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSzsKJiM0MzsJaWZtLSZndDtpZmFfaW5kZXggPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CiYjNDM7CWlmICgobmV0bnNpZCAmZ3Q7PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8CiYjNDM7CSAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LSZndDthZGRyX2xlbiwgaGEtJmd0O2FkZHIpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtJmd0O3JlZmNvdW50KSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKJiM0MzsJaW50IGFkZHJfaWR4ID0gMDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CiYjNDM7CQlpZiAoYWRkcl9pZHggJmx0OyAqc19hZGRyX2lkeCkgewomIzQzOwkJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKJiM0MzsJCQkJICAgICAgIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKJiM0MzsKJiM0MzsJKnNfYWRkcl9pZHggPSBlcnIgJmx0OyAwID8gYWRkcl9pZHggOiAwOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgewomIzQzOwlzdHJ1Y3QgbmV0ICp0Z3RfbmV0OwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCWZpbHRlci0mZ3Q7dGd0X25ldCA9IG5ldDsKJiM0MzsJfQomIzQzOwomIzQzOwlmaWx0ZXItJmd0O2lmaW5kZXggPSBpZm0tJmd0O2lmYV9pbmRleDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0gewomIzQzOwkJLnRndF9uZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKSwKJiM0MzsJCS5uZXRuc2lkID0gLTEsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJdW5zaWduZWQgbG9uZyBpZmluZGV4OwomIzQzOwkJaW50IGFkZHJfaWR4OwomIzQzOwl9ICpjdHggPSAodm9pZCAqKWNiLSZndDtjdHg7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLSZndDtubGgsIHNrYi0mZ3Q7c2ssICZhbXA7ZmlsdGVyLAomIzQzOwkJCQkJIGNiLSZndDtleHRhY2spOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKGZpbHRlci5pZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncywKJiM0MzsJCQkJCSAgIGZpbHRlci5uZXRuc2lkKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXQoZmlsdGVyLnRndF9uZXQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uNDFkYTI1OWMzYTA5NSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7Z2xvYmFsJiMzOTssIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sIGVudHJ5IGlzIGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAga3NmdF9pbihFVEhfVEVTVF9NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2VxKGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O21jLXVzZXJzJiMzOTtdLCAxLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAga3NmdF9pbigmIzM5O2dsb2JhbCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgIyB0YXJnZXQtbmV0bnNpZCBkdW1wcyBhbm90aGVyIG5ldG5zLCBpZmEtaW5kZXggaXMgcmVsYXRpdmUgdG8gaXQKJiM0MzsgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O25ldG5zIHNldCB7cGVlcn0gNSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTMgdHlwZSBkdW1teSYjMzQ7LCBucz1wZWVyKQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZHVtbXkzIHVwJiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgcGVlcl9pZHggPSBpcCgmIzM0O2xpbmsgc2hvdyBkdW1teTMmIzM0OywganNvbj1UcnVlLCBucz1wZWVyKVswXVsmIzM5O2lmaW5kZXgmIzM5O10KJiM0MzsKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O3RhcmdldC1uZXRuc2lkJiMzNDs6IDV9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10sIGFkZHJbJiMzOTt0YXJnZXQtbmV0bnNpZCYjMzk7XSkKJiM0MzsgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3RhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRucyYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgRmVhdHVyZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGFiaWxpdHkgdG8gZHVtcCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgdXNpbmcgcnRuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBQRl9QQUNLRVRgIGFuZCB0aGUgYFJUTV9HRVRNVUxUSUNBU1RgIG1lc3NhZ2UgdHlwZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGtleSBmaWxlczogYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggY29udGFpbnMgdGhlIG5ldyBjb3JlIGZ1bmN0aW9ucyBmb3IgZHVtcGluZywgaW5jbHVkaW5nIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYW5kIHRoZSBwb2xpY2llcyBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gVGhlcmUmIzM5O3MgYSBuZXcgYElGQV9GX0dMT0JBTGAgZmxhZyBpbiBgaWZfYWRkci5oYCwgcHJlc3VtYWJseSBmb3IgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGZsYWdzLiBXZSBhbHNvIHNlZSB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBhIHNlbGZ0ZXN0IGZvciB2ZXJpZmljYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXZhbHVhdGUgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOiB0aGUgY29yZSBzdWJzeXN0ZW0gaXMgTmV0d29ya2luZywgc3BlY2lmaWNhbGx5IGBydG5ldGxpbmtgLiBUaGUgY29kZSBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaW1wbGVtZW50cyB0aGUgcmVsZXZhbnQgYHJ0bmxfZHVtcF9tY2FkZHJgIGZhbWlseSBvZiBmdW5jdGlvbnMuIEl0JiMzOTtzIHRyaXZpYWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBXZSBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggc3RhbmRhcmQgbmV0bGluayBzb2NrZXRzIChgQUZfTkVUTElOS2AsIGBORVRMSU5LX1JPVVRFYCksIHNlbmRpbmcgYFJUTV9HRVRNVUxUSUNBU1RgIG1lc3NhZ2VzLCBhbmQgc3BlY2lmeWluZyB0aGUgYFBGX1BBQ0tFVGAgZmFtaWx5LiBUaGlzIHNob3VsZCBiZSBlYXNpbHkgdHJpZ2dlcmFibGUgaW4gc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCAqeWVzKiwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIG5ldyBmdW5jdGlvbnMuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgaW50ZXJuYWxzIG9mIGhvdyB0aGUgZHVtcCBpcyBpbXBsZW1lbnRlZC4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz00NTY5PXN0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2MDItXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NjAzOnN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2MDQtXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjQwPXN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY4NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2ODU6c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2ODYte1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTMtXHRcdH1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MTQ6XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTUtXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzE5LVx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAoZmlsdGVyLnRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MjA6XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MjEtXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE3LVx0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQxODpcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzQxOS1cdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkludmVzdGlnYXRpbmcgUlRORVRMSU5LIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBgbmV0L2NvcmUvTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGRlY2xhcmVkIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb25maWcgc3ltYm9scyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIGBydG5ldGxpbmsuY2AgYW5kIGl0cyBzdXBwb3J0aW5nIGNvbXBvbmVudHMuIEl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBuZXR3b3JrIGZlYXR1cmVzLiBUaGF0IHdheSwgSSBjYW4gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGVuYWJsZWQgYW5kIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYW5kIGhvcGVmdWxseSBJIHdvbiYjMzk7dCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggKnRvbyogbWFueSBsZXZlbHMgb2YgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGlua1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSVE5ldGxpbmsgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gYG5ldC9jb3JlL3J0bmV0bGluay5jYCBpcyBhbHdheXMgY29tcGlsZWQgaW50byB0aGUgY29yZSBuZXR3b3JraW5nIG1vZHVsZSAoYG5ldC9jb3JlL2ApIHdoZW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLCBgQ09ORklHX05FVGAgaXMgdGhlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBoYW5kbGluZyB3aXRoaW4gUlROZXRsaW5rLgoKTGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZz8gSSBoYXZlIHRoZXNlIGZvdXI6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfZmlsbF9tY2FkZHJgLCBhbmQgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBhbnkgb3RoZXIgcmVsZXZhbnQgZmlsZXMuCgpSaWdodCwgSSBzZWUgYSBmZXcgb3RoZXIgcGxhY2VzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZDogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCB0aGUgYGlmX2FkZHIuaGAgaW5jbHVkZSBmaWxlLCBgcnRuZXRsaW5rLmNgIG9mIGNvdXJzZSwgYW5kIGEgc2VsZnRlc3Qgc2NyaXB0LiBUaGVzZSBzdXBwb3J0IG15IHdvcmsgb24gdGhpcyBhcmVhLgoKQWxyaWdodCwgYmFjayB0byB0aGUgc3ltYm9sczogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAuIEdvb2QsIGdvb2QuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy4KCk5vdywgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMsIGJleW9uZCB0aGUgYmFzaWMgYE5FVGAgY29uZmlnPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHNvbWV0aGluZyBsaWtlIGBQRl9QQUNLRVRgIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgY29uZmlnLCBsaWtlIGBDT05GSUdfUEFDS0VUYC4gSSYjMzk7bGwgaGF2ZSB0byBsb29rIGludG8gYHJ0bmV0bGluay5jYCBjb2RlIHRvIHNlZSBpZiB0aGUgcGFja2V0IGZhbWlseSBpcyBpbnZvbHZlZCBpbiB0aGlzIHBhcnQuIEkgbmVlZCB0byBiZSBzdXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEZfUEFDS0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9NDUyMj1zdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1MzYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTM3Olx0XHRpZiAoaWR4IFx1MDAzYyBzX2lkeCB8fCBpZHggPT0gUEZfUEFDS0VUKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDUzOC1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE2LVx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQxNzpcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTc0MTgtXHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1MAoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZzogdGhlIGhhbmRsZXIgZm9yIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgcmV0cmlldmFsIHZpYSBydG5ldGxpbmsgKGBSVE1fR0VUTVVMVElDQVNUYCkgaXMgcmVnaXN0ZXJlZCB1bmNvbmRpdGlvbmFsbHkgd2l0aGluIGBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNgLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoYCNpZmRlZmApIGhlcmUsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFsd2F5cyBhdmFpbGFibGUuIFRoZSBtZXNzYWdlIGlzIGJlaW5nIHJlY2VpdmVkIG92ZXIgdGhlIHN0YW5kYXJkIGBORVRMSU5LX1JPVVRFYCBzb2NrZXQsIHdoaWNoIHVzZXMgdGhlIGBBRl9ORVRMSU5LYCBhZGRyZXNzIGZhbWlseS4gQW5kLCBjcnVjaWFsbHksIHRoZSBgaWZtLSZndDtpZmFfZmFtaWx5YCBpcyBgQUZfUEFDS0VUYC4KClRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCB0aGUgY29yZSByZXF1aXJlbWVudCBpcyBqdXN0IHN0YW5kYXJkIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCksIGFuZCBieSBleHRlbnNpb24sIGBDT05GSUdfTkVUTElOS2AuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgc3R1ZmYgaGVyZS4KCkxldCBtZSBqdXN0IHNvbGlkaWZ5IHRoaXMgZnVydGhlcjoKCjEuICBgV29ydGhGdXp6aW5nYCBpcyBtYXJrZWQgYXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCB0byBrbm93LgoyLiAgVGhlICYjMzQ7UmVhc29uaW5nJiMzNDsgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZzogVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgdG8gZHVtcCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKHVzaW5nIGBQRl9QQUNLRVRgIHdpdGggYFJUTV9HRVRNVUxUSUNBU1RgKSB0aHJvdWdoIHJ0bmV0bGluay4gVGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX2ZpbGxfbWNhZGRyYCwgYW5kIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAuIFRoaXMgYWNjZXNzIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoIG5ldGxpbmsgcm91dGUgc29ja2V0cy4KMy4gIFRoZSBjcml0aWNhbCAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IOKAkyB0aGUgZnVuY3Rpb25zIHRoZXkmIzM5O3ZlIGhpZ2hsaWdodGVkOiBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX2ZpbGxfbWNhZGRyYCwgYW5kIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoZSBzY29wZS4KNC4gIFRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBleHBsaWNpdGx5IGxpc3RzIGBbJiMzNDtORVQmIzM0O11gLiBQcmVjaXNlbHkgd2hhdCBJIGhhZCBpbiBtaW5kIQoKUmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDssCiAgICAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wIHN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIHJlcXVlc3RzIGluIHJ0bmV0bGluay4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGFuZCBkdW1waW5nIGxvZ2ljIChydG5sX2R1bXBfbWNhZGRyLCBydG5sX2R1bXBfbWNhZGRyX2RldiwgcnRubF9maWxsX21jYWRkciwgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEpIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgTkVUTElOS19ST1VURSBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cblxuMS4gTmV0bGluayBNZXNzYWdlIEluaXRpYWxpemF0aW9uOiBUaGUgZml4ZWQgaGVhZGVyIGBzdHJ1Y3QgaWZhZGRybXNnYCBjb250YWlucyBubyBzdHJ1Y3R1cmUgcGFkZGluZyAoNCB1OCBmaWVsZHMgZm9sbG93ZWQgYnkgYSB1MzIgZmllbGQsIDggYnl0ZXMgdG90YWwpIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBydG5sX2ZpbGxfbWNhZGRyKClgLlxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVx1MDAzZWFkZHJfbGVuYCBieXRlcyBmcm9tIGBoYS1cdTAwM2VhZGRyYCAod2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxuMy4gVmFyaWFibGVzIFx1MDAyNiBGaWx0ZXJzOiBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgYW5kIGR1bXAgY29udGV4dCBzdGF0ZSAoYGN0eGApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uYWRmODJiNjlhZGU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgc2VsZWN0cyB0aGUgYWRkcmVzcwomIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb24KJiM0MzsgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlCiYjNDM7ICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgZXhwbGljaXRseSwgZS5nLiB3aXRoCiYjNDM7ICAgICAgICBTSU9DQURETVVMVEkgb3IgJiMzNDticmlkZ2UgZmRiIGFkZCAuLi4gc2VsZiYjMzQ7LCByYXRoZXIgdGhhbiBieSBhCiYjNDM7ICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuCiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzCiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZwogICAgICAgZG86CkBAIC0xODEsMTAgJiM0MzsxODksMTMgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gbXVsdGljYXN0CiAgICAgICAgICAgICAtIG1jLXVzZXJzCiAgICAgICAgICAgICAtIGNhY2hlaW5mbwomIzQzOyAgICAgICAgICAgIC0gZmxhZ3MKJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiA1OAotICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgICByZXBseToKICAgICAgICAgICB2YWx1ZTogNTgKICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAppbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKQEAgLTU3LDYgJiM0Mzs1Nyw3IEBAIGVudW0gewogI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFCTB4MjAwCiAjZGVmaW5lIElGQV9GX01DQVVUT0pPSU4JMHg0MDAKICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1kJMHg4MDAKJiM0MzsjZGVmaW5lIElGQV9GX0dMT0JBTAkJMHgxMDAwCiAKIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHsKIAlfX3UzMglpZmFfcHJlZmVyZWQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDgxYzVhNjEwNGRlYTEuLmY1NGU5Y2IzYmYzMGMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00NTY2LDYgJiM0Mzs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCXJldHVybiBza2ItJmd0O2xlbiA/IDogcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsCiYjNDM7CQkJICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpCiYjNDM7ewomIzQzOwl1MzIgaWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwOwomIzQzOwlzdHJ1Y3QgaWZhZGRybXNnICppZm07CiYjNDM7CXN0cnVjdCBubG1zZ2hkciAqbmxoOwomIzQzOwomIzQzOwlubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLAomIzQzOwkJCWZsYWdzKTsKJiM0MzsJaWYgKCFubGgpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19kYXRhKG5saCk7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDsKJiM0MzsJaWZtLSZndDtpZmFfcHJlZml4bGVuID0gMDsKJiM0MzsJLyogaWZtLSZndDtpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi8KJiM0MzsJaWZtLSZndDtpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7CiYjNDM7CWlmbS0mZ3Q7aWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSzsKJiM0MzsJaWZtLSZndDtpZmFfaW5kZXggPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CiYjNDM7CWlmICgobmV0bnNpZCAmZ3Q7PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8CiYjNDM7CSAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LSZndDthZGRyX2xlbiwgaGEtJmd0O2FkZHIpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtJmd0O3JlZmNvdW50KSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKJiM0MzsJaW50IGFkZHJfaWR4ID0gMDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CiYjNDM7CQlpZiAoYWRkcl9pZHggJmx0OyAqc19hZGRyX2lkeCkgewomIzQzOwkJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKJiM0MzsJCQkJICAgICAgIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKJiM0MzsKJiM0MzsJKnNfYWRkcl9pZHggPSBlcnIgJmx0OyAwID8gYWRkcl9pZHggOiAwOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgewomIzQzOwlzdHJ1Y3QgbmV0ICp0Z3RfbmV0OwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCWZpbHRlci0mZ3Q7dGd0X25ldCA9IG5ldDsKJiM0MzsJfQomIzQzOwomIzQzOwlmaWx0ZXItJmd0O2lmaW5kZXggPSBpZm0tJmd0O2lmYV9pbmRleDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0gewomIzQzOwkJLnRndF9uZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKSwKJiM0MzsJCS5uZXRuc2lkID0gLTEsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJdW5zaWduZWQgbG9uZyBpZmluZGV4OwomIzQzOwkJaW50IGFkZHJfaWR4OwomIzQzOwl9ICpjdHggPSAodm9pZCAqKWNiLSZndDtjdHg7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLSZndDtubGgsIHNrYi0mZ3Q7c2ssICZhbXA7ZmlsdGVyLAomIzQzOwkJCQkJIGNiLSZndDtleHRhY2spOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKGZpbHRlci5pZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncywKJiM0MzsJCQkJCSAgIGZpbHRlci5uZXRuc2lkKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXQoZmlsdGVyLnRndF9uZXQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uNDFkYTI1OWMzYTA5NSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7Z2xvYmFsJiMzOTssIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sIGVudHJ5IGlzIGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAga3NmdF9pbihFVEhfVEVTVF9NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2VxKGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O21jLXVzZXJzJiMzOTtdLCAxLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAga3NmdF9pbigmIzM5O2dsb2JhbCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgIyB0YXJnZXQtbmV0bnNpZCBkdW1wcyBhbm90aGVyIG5ldG5zLCBpZmEtaW5kZXggaXMgcmVsYXRpdmUgdG8gaXQKJiM0MzsgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O25ldG5zIHNldCB7cGVlcn0gNSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTMgdHlwZSBkdW1teSYjMzQ7LCBucz1wZWVyKQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZHVtbXkzIHVwJiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgcGVlcl9pZHggPSBpcCgmIzM0O2xpbmsgc2hvdyBkdW1teTMmIzM0OywganNvbj1UcnVlLCBucz1wZWVyKVswXVsmIzM5O2lmaW5kZXgmIzM5O10KJiM0MzsKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O3RhcmdldC1uZXRuc2lkJiMzNDs6IDV9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10sIGFkZHJbJiMzOTt0YXJnZXQtbmV0bnNpZCYjMzk7XSkKJiM0MzsgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3RhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRucyYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIHJ1bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLgoKTG9va2luZyBhdCB0aGUgZmlsZSBjaGFuZ2VzLCBJIHNlZSB1cGRhdGVzIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCBjb25jZXJuaW5nIG5ldGxpbmsgc3BlY3MsIGFkZGluZyBgQUZfUEFDS0VUYCwgYSBnbG9iYWwgZmxhZywgYW5kIGB0YXJnZXQtbmV0bnNpZGAgZm9yIGBnZXRtdWx0aWNhc3RgLiBBIG5ldyBkZWZpbmUsIGAjZGVmaW5lIElGQV9GX0dMT0JBTCAweDEwMDBgLCBpcyBhZGRlZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIFRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggaW1wbGVtZW50cyBhIGR1bXAgZnVuY3Rpb24gZm9yIGBQRl9QQUNLRVRgIGBnZXRtdWx0aWNhc3RgLgoKU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gYHJ0bmxfZmlsbF9tY2FkZHJgIGlzIHdoZXJlIEkmIzM5O2xsIGZvY3VzLiBJdCBjb25zdHJ1Y3RzIGEgTmV0bGluayBtZXNzYWdlLCBhbmQgdGhlcmUgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgaXNzdWUgaGVyZToKCkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIGBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLCBmbGFncylgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYG5sbXNnX3B1dGAgaW5pdGlhbGl6ZXMgdGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBoZWFkZXIgYW5kIHBheWxvYWQsIG9yIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubG1zZ19kYXRhYCBpcyB1bmluaXRpYWxpemVkLiBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGlzIGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmxtc2dfcHV0YCB6ZXJvZXMgdGhlIG1lbW9yeSBvciBpZiBgbmxtc2dfZGF0YWAgY29udGFpbnMganVuaywgb3IgaWYgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgaXQuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMgYmVjYXVzZSB0aGF0IGBpZm1gIGlzIGJlaW5nIHVzZWQsIGFuZCBpZiB1bmluaXRpYWxpemVkLCB0aGF0JiMzOTtzIGEgcHJvYmxlbS4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBtdXN0IGFsc28gcmVjYWxsIHdoYXQgYSBgc3RydWN0IGlmYWRkcm1zZ2AgaXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIG1lbWJlcnMgdG8gZ2V0IGEgbW9yZSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgY29kZXNlYXJjaGAgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgaWZhZGRybXNnIHsmIzM5OzogVW5tYXRjaGVkIFx7PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzk7OiBVbm1hdGNoZWQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBJbnRlcmZhY2UgU3RydWN0dXJlIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgc29tZSBkZXRhaWxzIGFib3V0IG5ldHdvcmsgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IGRpZ2dpbmcgaW50byB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBpcyB3aXRoIHRoZSBgc3RydWN0IGlmYWRkcm1zZ2AgZGVmaW5pdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBqdW1waW5nLW9mZiBwb2ludC4gTGV0JiMzOTtzIGdldCB0aGF0IGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGluZm9ybWF0aW9uIGl0IGhvbGRzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHN0cnVjdHVyZSB0byBjb250YWluIHRoZSBiYXNpYyBhdHRyaWJ1dGVzIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gZHJpbGwgZG93biB0byBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgaWYgbmVlZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaWZhZGRybXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTctXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjg6c3RydWN0IGlmYWRkcm1zZyB7XG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXHRfX3U4XHRcdGlmYV9mYW1pbHk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC0yMy0gKiBJRkFfRkxBR1MgaXMgYSB1MzIgYXR0cmlidXRlIHRoYXQgZXh0ZW5kcyB0aGUgdTggZmllbGQgaWZhX2ZsYWdzLlxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDoyNDogKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtMjUtICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaD02Mj1zdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03MC0jaWZuZGVmIF9fS0VSTkVMX19cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6NzE6I2RlZmluZSBJRkFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjcyOiNkZWZpbmUgSUZBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSlcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGlmX2FkZHIuaCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgOC4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGl0IGxpa2VseSBzdGFydHMgZGVmaW5pbmcgdGhlIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2UgYWRkcmVzcyBpbmZvcm1hdGlvbi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBgaWZhZGRybXNnYCwgb3IgcGVyaGFwcyBzb21lIGtleSBmbGFnIGRlZmluaXRpb25zIHRoYXQgZ292ZXJuIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBxdWlja2x5IHNjYW4gZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgcmVsYXRlIHRvIGFkZHJlc3MgZmFtaWxpZXMsIGFkZHJlc3MgbGVuZ3RocywgYW5kIGF0dHJpYnV0ZSBjb2Rlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG9zc2libHkgc2VlaW5nIHNvbWUgZW51bXMuIEFueXRoaW5nIHRoYXQgZGljdGF0ZXMgdGhlIGZvcm1hdCBvciBwcm9wZXJ0aWVzIG9mIG5ldHdvcmsgYWRkcmVzc2VzIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbml0aWFsbHkuIEkmIzM5O20ga2VlbiB0byBlbnN1cmUgaXQmIzM5O3MgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG4gICAyOlx0I2lmbmRlZiBfVUFQSV9fTElOVVhfSUZfQUREUl9IXG4gICAzOlx0I2RlZmluZSBfVUFQSV9fTElOVVhfSUZfQUREUl9IXG4gICA0Olx0XG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdHN0cnVjdCBpZmFkZHJtc2cge1xuICAgOTpcdFx0X191OFx0XHRpZmFfZmFtaWx5O1xuICAxMDpcdFx0X191OFx0XHRpZmFfcHJlZml4bGVuO1x0LyogVGhlIHByZWZpeCBsZW5ndGhcdFx0Ki9cbiAgMTE6XHRcdF9fdThcdFx0aWZhX2ZsYWdzO1x0LyogRmxhZ3NcdFx0XHQqL1xuICAxMjpcdFx0X191OFx0XHRpZmFfc2NvcGU7XHQvKiBBZGRyZXNzIHNjb3BlXHRcdCovXG4gIDEzOlx0XHRfX3UzMlx0XHRpZmFfaW5kZXg7XHQvKiBMaW5rIGluZGV4XHRcdFx0Ki9cbiAgMTQ6XHR9O1xuICAxNTpcdFxuICAxNjpcdC8qXG4gIDE3Olx0ICogSW1wb3J0YW50IGNvbW1lbnQ6XG4gIDE4Olx0ICogSUZBX0FERFJFU1MgaXMgcHJlZml4IGFkZHJlc3MsIHJhdGhlciB0aGFuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzLlxuICAxOTpcdCAqIEl0IG1ha2VzIG5vIGRpZmZlcmVuY2UgZm9yIG5vcm1hbGx5IGNvbmZpZ3VyZWQgYnJvYWRjYXN0IGludGVyZmFjZXMsXG4gIDIwOlx0ICogYnV0IGZvciBwb2ludC10by1wb2ludCBJRkFfQUREUkVTUyBpcyBERVNUSU5BVElPTiBhZGRyZXNzLFxuICAyMTpcdCAqIGxvY2FsIGFkZHJlc3MgaXMgc3VwcGxpZWQgaW4gSUZBX0xPQ0FMIGF0dHJpYnV0ZS5cbiAgMjI6XHQgKlxuICAyMzpcdCAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXG4gIDI0Olx0ICogSWYgcHJlc2VudCwgdGhlIHZhbHVlIGZyb20gc3RydWN0IGlmYWRkcm1zZyB3aWxsIGJlIGlnbm9yZWQuXG4gIDI1Olx0ICovXG4gIDI2Olx0ZW51bSB7XG4gIDI3Olx0XHRJRkFfVU5TUEVDLFxuICAyODpcdFx0SUZBX0FERFJFU1MsXG4gIDI5Olx0XHRJRkFfTE9DQUwsXG4gIDMwOlx0XHRJRkFfTEFCRUwsXG4gIDMxOlx0XHRJRkFfQlJPQURDQVNULFxuICAzMjpcdFx0SUZBX0FOWUNBU1QsXG4gIDMzOlx0XHRJRkFfQ0FDSEVJTkZPLFxuICAzNDpcdFx0SUZBX01VTFRJQ0FTVCxcbiAgMzU6XHRcdElGQV9GTEFHUyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlmYWRkcm1zZyBTdHJ1Y3R1cmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIGl0JiMzOTtzIGdvdCB0aGUgc3RhbmRhcmQgbmV0d29yayBhZGRyZXNzIGZhbWlseSAoYGlmYV9mYW1pbHlgKSwgcHJlZml4IGxlbmd0aCAoYGlmYV9wcmVmaXhsZW5gKSwgZmxhZ3MgKGBpZmFfZmxhZ3NgKSwgc2NvcGUgKGBpZmFfc2NvcGVgKSwgYW5kIGludGVyZmFjZSBpbmRleCAoYGlmYV9pbmRleGApLiBHb29kLCBnb29kLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZSB0b3RhbCBzaXplIGlzIDggYnl0ZXMg4oCTIG5pY2UgYW5kIGNsZWFuLCBubyBwYWRkaW5nIHRvIHdvcnJ5IGFib3V0LiBBbmQgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gYGlmYV9mYW1pbHlgIHRvIGBBRl9QQUNLRVRgLCBwcmVmaXggbGVuZ3RoIHNldCB0byAwLCBgaWZhX2ZsYWdzYCBnZXRzIHRoZSByYXcgaW5wdXQuIFNjb3BlIGlzIHNldCB0byBgUlRfU0NPUEVfTElOS2AsIGFuZCB0aGUgaW5kZXggaXMgYXNzaWduZWQgdG8gdGhlIGludGVyZmFjZSYjMzk7cyBpbmRleCB2YWx1ZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBhZGRyZXNzIHBsYXlzIGludG8gdGhpcy4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBkZWFsaW5nIHdpdGggYGhhLSZndDthZGRyYCBhbmQgYGRldi0mZ3Q7YWRkcl9sZW5gLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmcmFtaW5nIHRoaXMgZGF0YS4gQnV0IHdoZXJlIGV4YWN0bHkgZG9lcyBgaGEtJmd0O2FkZHJgIGdldCBpdHMgdmFsdWVzPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBMb29rcyBsaWtlIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAgZGVmaW5pdGlvbi4gVGhhdCBzaG91bGQgaG9sZCB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgeyYjMzk7OiBVbm1hdGNoZWQgXHs8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldGRldl9od19hZGRyIHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtiYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgeyYjMzk7OiBVbm1hdGNoZWQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBzZWFyY2g6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGRlZmluaXRpb24uIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgbmV0d29ya2luZy1yZWxhdGVkIGRlZmluaXRpb25zIGFyZSB1c3VhbGx5IHR1Y2tlZCBhd2F5IGluIHRoZSBgaW5jbHVkZS9saW51eGAgZGlyZWN0b3J5LiBOb3csIHdoZXJlIHdvdWxkIHRoZSBoYXJkd2FyZSBhZGRyZXNzIHN0cnVjdHVyZSByZXNpZGU/IExvZ2ljYWxseSwgaXTigJlsbCBiZSBpbiBgbmV0ZGV2aWNlLmhgLiBJJiMzOTtsbCBydW4gYSBxdWljayBzZWFyY2ggZm9yIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzIGFib3V0IGl0cyB1c2FnZSB3aXRoaW4gdGhlIGtlcm5lbCBuZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RydWN0dXJlJiMzOTtzIG1lbWJlcnMsIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBtYWNyb3MsIGFuZCBwZXJoYXBzIHNvbWUgaW5zaWdodGZ1bCBjb21tZW50cyBvbiBob3cgaXQmIzM5O3MgdXNlZCB0byBtYW5hZ2UgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciBuZXR3b3JrIGludGVyZmFjZXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRkZXZfaHdfYWRkclxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMzU9c3RydWN0IHNrX2J1ZmY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjM3LiBJJiMzOTttIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIEkmIzM5O20gbG9va2luZyBmb3IgcmVnYXJkaW5nIHRoZSBiYXNpYyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBzZXR1cCByb3V0aW5lcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZWxlbWVudHMgbGlrZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHF1ZXVlcywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHBvaW50ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRzdHJ1Y3Qgc2tfYnVmZjtcbiAyMzY6XHRcbiAyMzc6XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xuIDIzODpcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiAyMzk6XHRcdHN0cnVjdCByYl9ub2RlXHRcdG5vZGU7XG4gMjQwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdGFkZHJbTUFYX0FERFJfTEVOXTtcbiAyNDE6XHRcdHVuc2lnbmVkIGNoYXJcdFx0dHlwZTtcbiAyNDI6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXHRcdDFcbiAyNDM6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfU0FOXHRcdDJcbiAyNDQ6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVFx0M1xuIDI0NTpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1RcdDRcbiAyNDY6XHRcdGJvb2xcdFx0XHRnbG9iYWxfdXNlO1xuIDI0NzpcdFx0aW50XHRcdFx0c3luY19jbnQ7XG4gMjQ4Olx0XHRpbnRcdFx0XHRyZWZjb3VudDtcbiAyNDk6XHRcdGludFx0XHRcdHN5bmNlZDtcbiAyNTA6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3VfaGVhZDtcbiAyNTE6XHR9O1xuIDI1MjpcdFxuIDI1MzpcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0IHtcbiAyNTQ6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjU1Olx0XHRpbnRcdFx0XHRjb3VudDtcbiAyNTY6XHRcbiAyNTc6XHRcdC8qIEF1eGlsaWFyeSB0cmVlIGZvciBmYXN0ZXIgbG9va3VwIG9uIGFkZGl0aW9uIGFuZCBkZWxldGlvbiAqL1xuIDI1ODpcdFx0c3RydWN0IHJiX3Jvb3RcdFx0dHJlZTtcbiAyNTk6XHR9O1xuIDI2MDpcdFxuIDI2MTpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSAoKGwpLVx1MDAzZWNvdW50KVxuIDI2MjpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9lbXB0eShsKSAobmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSA9PSAwKVxuIDI2MzpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcbiAyNjQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNihsKS1cdTAwM2VsaXN0LCBsaXN0KVxuIDI2NTpcdFxuIDI2NjpcdCNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcdTAwMjYoZGV2KS1cdTAwM2V1YylcbiAyNjc6XHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjY4Olx0I2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSBcXFxuIDI2OTpcdFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXHUwMDI2KGRldiktXHUwMDNldWMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1BQyBBZGRyZXNzIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhZGRpdGlvbiBvZiBgaGFgIOKAkyBsaWtlbHkgYSBoYXJkd2FyZSBhZGRyZXNzIOKAkyBpbnRvIGBkZXYtJmd0O21jYCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyByZWZlcnMgdG8gdGhlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3QgZm9yIGEgbmV0d29yayBkZXZpY2UgKGBkZXZgKS4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdoZXJlIGRldmljZSBhZGRyZXNzIG1hbmFnZW1lbnQgaXMgaGFuZGxlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIHRoaXMgbG9naWMgYmVmb3JlLCBwcm9iYWJseSBzb21ld2hlcmUgaW4gYG5ldC9jb3JlL2AuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSBpbnRvIGBkZXZfYWRkcl9saXN0cy5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nLiBXaXRoaW4gdGhhdCBmaWxlLCBJJiMzOTtsbCBzdGFydCB3aXRoIGEgZmV3IHNlYXJjaCBxdWVyaWVzLCBhaW1pbmcgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgdGhpcyBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHRyeSBzZWFyY2hpbmcgZm9yIGBkZXZfbWNfYWRkYCBmaXJzdCwgYnV0IEkgbWlnaHQgYWxzbyBjYXN0IGEgd2lkZXIgbmV0IHdpdGggc29tZXRoaW5nIGxpa2UgYF9faHdfYWRkcl9hZGRgIG9yIGFueXRoaW5nIHRoYXQgc3VnZ2VzdHMgaGFyZHdhcmUgYWRkcmVzcyBhZGRpdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgbG93IGxldmVsIG1hbmFnZW1lbnQuIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBmYWlybHkgc3RyYWlnaHQgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19od19hZGRyXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjM6c3RhdGljIGludCBfX2h3X2FkZHJfaW5zZXJ0KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNC1cdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpuZXcsIGludCBhZGRyX2xlbilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUyPXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjUzOl9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NC1cdFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCwgYm9vbCBzeW5jKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwOlx0aGEgPSBfX2h3X2FkZHJfY3JlYXRlKGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGdsb2JhbCwgc3luYyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMS1cdGlmICghaGEpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzItXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMzpzdGF0aWMgaW50IF9faHdfYWRkcl9hZGQoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM2LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3Olx0cmV0dXJuIF9faHdfYWRkcl9hZGRfZXgobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSwgZmFsc2UsIGZhbHNlLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzgtXHRcdFx0XHQwLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE0MTpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZW50cnkoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0Mi1cdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgYm9vbCBnbG9iYWwsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNjctXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE2ODpzdGF0aWMgc3RydWN0IG5ldGRldl9od19hZGRyICpfX2h3X2FkZHJfbG9va3VwKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNjktXHRcdFx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xOTMtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE5NDpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE5NS1cdFx0XHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTk3LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTk4Olx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYSA9IF9faHdfYWRkcl9sb29rdXAobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE5OS1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwMS1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIwMjpcdHJldHVybiBfX2h3X2FkZHJfZGVsX2VudHJ5KGxpc3QsIGhhLCBnbG9iYWwsIHN5bmMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMDMtfVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMDQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIwNTpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWwoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwNi1cdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjA4LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjA5Olx0cmV0dXJuIF9faHdfYWRkcl9kZWxfZXgobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSwgZmFsc2UsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjEwLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjExLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMTI6c3RhdGljIGludCBfX2h3X2FkZHJfc3luY19vbmUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnRvX2xpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxMy1cdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIzMC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjMxOnN0YXRpYyB2b2lkIF9faHdfYWRkcl91bnN5bmNfb25lKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMzItXHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmZyb21fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIzNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjM4Olx0ZXJyID0gX19od19hZGRyX2RlbF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjM5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNDMtXHQvKiBhZGRyZXNzIG9uIGZyb20gbGlzdCBpcyBub3QgbWFya2VkIHN5bmNlZCAqL1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNDQ6XHRfX2h3X2FkZHJfZGVsX2VudHJ5KGZyb21fbGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0NS19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0Ni1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjQ3OmludCBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjQ4LVx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjU1LVx0XHRpZiAoaGEtXHUwMDNlc3luY19jbnQgPT0gaGEtXHUwMDNlcmVmY291bnQpIHtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjU2Olx0XHRcdF9faHdfYWRkcl91bnN5bmNfb25lKHRvX2xpc3QsIGZyb21fbGlzdCwgaGEsIGFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjU3LVx0XHR9IGVsc2Uge1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNTg6XHRcdFx0ZXJyID0gX19od19hZGRyX3N5bmNfb25lKHRvX2xpc3QsIGhhLCBhZGRyX2xlbik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI1OS1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjY0LX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjY1OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3N5bmNfbXVsdGlwbGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjYtXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjktICogc3luYyBhZGRyZXNzZXMgdG8gbW9yZSB0aGVuIDEgZGVzdGluYXRpb24sIHlvdSBuZWVkIHRvIHVzZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNzA6ICogX19od19hZGRyX3N5bmNfbXVsdGlwbGUoKS5cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjcxLSAqL1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNzI6aW50IF9faHdfYWRkcl9zeW5jKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNzMtXHRcdCAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpmcm9tX2xpc3QsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODAtXHRcdGlmICghaGEtXHUwMDNlc3luY19jbnQpIHtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjgxOlx0XHRcdGVyciA9IF9faHdfYWRkcl9zeW5jX29uZSh0b19saXN0LCBoYSwgYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODItXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4NC1cdFx0fSBlbHNlIGlmIChoYS1cdTAwM2VyZWZjb3VudCA9PSAxKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyODU6XHRcdFx0X19od19hZGRyX3Vuc3luY19vbmUodG9fbGlzdCwgZnJvbV9saXN0LCBoYSwgYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODYtXHR9XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODgtfVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyODk6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfc3luYyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI5MC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjkxOnZvaWQgX19od19hZGRyX3Vuc3luYyhzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjkyLVx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjk4LVx0XHRpZiAoaGEtXHUwMDNlc3luY19jbnQpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjI5OTpcdFx0XHRfX2h3X2FkZHJfdW5zeW5jX29uZSh0b19saXN0LCBmcm9tX2xpc3QsIGhhLCBhZGRyX2xlbik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMwMC1cdH1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzAxLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzAyOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luYyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMwMy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzA0LS8qKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMDU6ICogIF9faHdfYWRkcl9zeW5jX2RldiAtIFN5bmNocm9uaXplIGRldmljZSYjMzk7cyBtdWx0aWNhc3QgbGlzdFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDYtICogIEBsaXN0OiBhZGRyZXNzIGxpc3QgdG8gc3luY2hyb25pemVcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMxNi0gKiovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjMxNzppbnQgX19od19hZGRyX3N5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMTgtXHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzM1LVx0XHRoYS1cdTAwM2VzeW5jX2NudC0tO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMzY6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMzNy1cdH1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1My19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjM1NDpFWFBPUlRfU1lNQk9MKF9faHdfYWRkcl9zeW5jX2Rldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1NS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU2LS8qKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozNTc6ICogIF9faHdfYWRkcl9yZWZfc3luY19kZXYgLSBTeW5jaHJvbml6ZSBkZXZpY2UmIzM5O3MgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCB0YWtpbmdcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU4LSAqICBpbnRvIGFjY291bnQgcmVmZXJlbmNlc1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzcxLSAqKi9cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzcyOmludCBfX2h3X2FkZHJfcmVmX3N5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zNzMtXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM5NC1cdFx0aGEtXHUwMDNlc3luY19jbnQgPSByZWZfY250O1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozOTU6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM5Ni1cdH1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQxNC19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQxNTpFWFBPUlRfU1lNQk9MKF9faHdfYWRkcl9yZWZfc3luY19kZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MTYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQxNy0vKipcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDE4OiAqICBfX2h3X2FkZHJfcmVmX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBhbmQgcmVmZXJlbmNlcyBvblxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MTktICogIGl0IGZyb20gZGV2aWNlXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MjQtICogIFJlbW92ZSBhbGwgYWRkcmVzc2VzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGJ5XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQyNTogKiAgX19od19hZGRyX3JlZl9zeW5jX2RldigpLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MjYtICogIG5kb19zdG9wIG9yIG5kb19vcGVuIGZ1bmN0aW9ucyBvbiBkZXZpY2VzIHRoYXQgcmVxdWlyZSBleHBsaWNpdCBhZGRyZXNzIChvclxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDMwLSAqKi9cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDMxOnZvaWQgX19od19hZGRyX3JlZl91bnN5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MzItXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ0Ny1cdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0NDg6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ0OS1cdH1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDUwLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDUxOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3JlZl91bnN5bmNfZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDUyLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NTMtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ1NDogKiAgX19od19hZGRyX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBmcm9tIGRldmljZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NTUtICogIEBsaXN0OiBhZGRyZXNzIGxpc3QgdG8gcmVtb3ZlIHN5bmNocm9uaXplZCBhZGRyZXNzZXMgZnJvbVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDU4LSAqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ1OTogKiAgUmVtb3ZlIGFsbCBhZGRyZXNzZXMgdGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBkZXZpY2UgYnkgX19od19hZGRyX3N5bmNfZGV2KCkuXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ2MC0gKiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbmRvX3N0b3Agb3IgbmRvX29wZW5cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ2NC0gKiovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ2NTp2b2lkIF9faHdfYWRkcl91bnN5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NjYtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDgwLVx0XHRoYS1cdTAwM2VzeW5jX2NudC0tO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0ODE6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ4Mi1cdH1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDgzLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDg0OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luY19kZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00ODUtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ4Njp2b2lkIF9faHdfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdClcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDg3LXtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ5Ni19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ5NzpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKF9faHdfYWRkcl9mbHVzaCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ5OC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDk5OnZvaWQgX19od19hZGRyX2luaXQoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwMC17XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MDQtfVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MDU6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfaW5pdCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwNi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTA3OnN0YXRpYyB2b2lkIF9faHdfYWRkcl9zcGxpY2Uoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmRzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTA4LVx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnNyYylcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUxNi0vKipcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTE3OiAqICBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdCAtIGNyZWF0ZSBhIHNuYXBzaG90IGNvcHkgb2YgYW4gYWRkcmVzcyBsaXN0XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjUxODogKiAgQHNuYXA6IGRlc3RpbmF0aW9uIHNuYXBzaG90IGxpc3QgKG5lZWRzIHRvIGJlIF9faHdfYWRkcl9pbml0LWluaXRpYWxpemVkKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MTktICogIEBsaXN0OiBzb3VyY2UgYWRkcmVzcyBsaXN0IHRvIHNuYXBzaG90XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MjctICovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjUyODppbnQgX19od19hZGRyX2xpc3Rfc25hcHNob3Qoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnNuYXAsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUyOS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NDQtXHRcdH0gZWxzZSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU0NTpcdFx0XHRlbnRyeSA9IF9faHdfYWRkcl9jcmVhdGUoaGEtXHUwMDNlYWRkciwgYWRkcl9sZW4sIGhhLVx1MDAzZXR5cGUsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU0Ni1cdFx0XHRcdFx0XHQgZmFsc2UsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTQ3LVx0XHRcdGlmICghZW50cnkpIHtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTQ4Olx0XHRcdFx0X19od19hZGRyX2ZsdXNoKHNuYXApO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NDktXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU1NS1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZzbmFwLVx1MDAzZWxpc3QpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1NTY6XHRcdF9faHdfYWRkcl9pbnNlcnQoc25hcCwgZW50cnksIGFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTU3LVx0XHRzbmFwLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2MS19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU2MjpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKF9faHdfYWRkcl9saXN0X3NuYXBzaG90KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTYzLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NjQtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU2NTogKiAgX19od19hZGRyX2xpc3RfcmVjb25jaWxlIC0gc3luYyBzbmFwc2hvdCBjaGFuZ2VzIGJhY2sgYW5kIGZyZWUgc25hcHNob3RzXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2Ni0gKiAgQHJlYWxfbGlzdDogdGhlIHJlYWwgYWRkcmVzcyBsaXN0IHRvIHVwZGF0ZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1Njc6ICogIEB3b3JrOiB0aGUgd29ya2luZyBzbmFwc2hvdCAobW9kaWZpZWQgYnkgZHJpdmVyIHZpYSBfX2h3X2FkZHJfc3luY19kZXYpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2OC0gKiAgQHJlZjogdGhlIHJlZmVyZW5jZSBzbmFwc2hvdCAodW50b3VjaGVkIGNvcHkgb2Ygb3JpZ2luYWwgc3RhdGUpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NzYtICovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU3Nzp2b2lkIF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqcmVhbF9saXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NzgtXHRcdFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKndvcmssXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01ODUtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmX2hhLCB0bXAsIFx1MDAyNnJlZi1cdTAwM2VsaXN0LCBsaXN0KSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU4NjpcdFx0d29ya19oYSA9IF9faHdfYWRkcl9sb29rdXAod29yaywgcmVmX2hhLVx1MDAzZWFkZHIsIGFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01ODctXHRcdFx0XHRcdCAgIHJlZl9oYS1cdTAwM2V0eXBlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU5NS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTk2Olx0XHRyZWFsX2hhID0gX19od19hZGRyX2xvb2t1cChyZWFsX2xpc3QsIHJlZl9oYS1cdTAwM2VhZGRyLCBhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTk3LVx0XHRcdFx0XHQgICByZWZfaGEtXHUwMDNldHlwZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02MTEtXHRcdFx0XHRcdFx0ICBcdTAwMjZyZWFsX2xpc3QtXHUwMDNlbGlzdCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjYxMjpcdFx0XHRcdF9faHdfYWRkcl9pbnNlcnQocmVhbF9saXN0LCByZWZfaGEsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTYxMy1cdFx0XHRcdFx0XHQgYWRkcl9sZW4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjI4LVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Mjk6XHRfX2h3X2FkZHJfc3BsaWNlKGNhY2hlLCB3b3JrKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjMwOlx0X19od19hZGRyX3NwbGljZShjYWNoZSwgcmVmKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjMxLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjMyOkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoX19od19hZGRyX2xpc3RfcmVjb25jaWxlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjMzLVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NjYxPXZvaWQgZGV2X2FkZHJfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2NS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjY2Olx0X19od19hZGRyX2ZsdXNoKFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjctXHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9Njc5PWludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4NzpcdF9faHdfYWRkcl9pbml0KFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODgtXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njg5Olx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5MC1cdFx0XHQgICAgTkVUREVWX0hXX0FERFJfVF9MQU4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzAzPXZvaWQgZGV2X2FkZHJfbW9kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTMtXHRtZW1jcHkoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRyX3NoYWRvd1tvZmZzZXRdLCBhZGRyLCBsZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3MTQ6XHRXQVJOX09OKF9faHdfYWRkcl9pbnNlcnQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgaGEsIGRldi1cdTAwM2VhZGRyX2xlbikpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTUtfVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzI5PWludCBkZXZfYWRkcl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTczOC1cdFx0cmV0dXJuIGVycjtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzM5Olx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sIGFkZHJfdHlwZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0MC1cdGlmICghZXJyKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzU3PWludCBkZXZfYWRkcl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc3NC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzc1Olx0ZXJyID0gX19od19hZGRyX2RlbChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc3Ni1cdFx0XHQgICAgYWRkcl90eXBlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODM3PWludCBkZXZfdWNfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04NDEtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODQyOlx0ZXJyID0gX19od19hZGRyX2RlbChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODQzLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODY0PWludCBkZXZfdWNfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODcxLVx0bmV0aWZfYWRkcl9sb2NrKHRvKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODcyOlx0ZXJyID0gX19od19hZGRyX3N5bmMoXHUwMDI2dG8tXHUwMDNldWMsIFx1MDAyNmZyb20tXHUwMDNldWMsIHRvLVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODczLVx0aWYgKCFlcnIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04OTQ9aW50IGRldl91Y19zeW5jX211bHRpcGxlKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05MDEtXHRuZXRpZl9hZGRyX2xvY2sodG8pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5MDI6XHRlcnIgPSBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShcdTAwMjZ0by1cdTAwM2V1YywgXHUwMDI2ZnJvbS1cdTAwM2V1YywgdG8tXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05MDMtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTkxOT12b2lkIGRldl91Y191bnN5bmMoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSlcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkzNC1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjkzNTpcdF9faHdfYWRkcl91bnN5bmMoXHUwMDI2dG8tXHUwMDNldWMsIFx1MDAyNmZyb20tXHUwMDNldWMsIHRvLVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTM2LVx0X19kZXZfc2V0X3J4X21vZGUodG8pO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTQ4PXZvaWQgZGV2X3VjX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NTAtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTUxOlx0X19od19hZGRyX2ZsdXNoKFx1MDAyNmRldi1cdTAwM2V1Yyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk1Mi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05NjI9dm9pZCBkZXZfdWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NjMte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5NjQ6XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZkZXYtXHUwMDNldWMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NjUtfVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMDMzPXN0YXRpYyBpbnQgX19kZXZfbWNfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDM4LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEwMzk6XHRlcnIgPSBfX2h3X2FkZHJfZGVsX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDQwLVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgZ2xvYmFsLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMDg3PWludCBkZXZfbWNfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTA5NC1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEwOTU6XHRlcnIgPSBfX2h3X2FkZHJfc3luYyhcdTAwMjZ0by1cdTAwM2VtYywgXHUwMDI2ZnJvbS1cdTAwM2VtYywgdG8tXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDk2LVx0aWYgKCFlcnIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTE3PWludCBkZXZfbWNfc3luY19tdWx0aXBsZShzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTEyNC1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExMjU6XHRlcnIgPSBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShcdTAwMjZ0by1cdTAwM2VtYywgXHUwMDI2ZnJvbS1cdTAwM2VtYywgdG8tXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTI2LVx0aWYgKCFlcnIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTQyPXZvaWQgZGV2X21jX3Vuc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE0OS1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNTA6XHRfX2h3X2FkZHJfdW5zeW5jKFx1MDAyNnRvLVx1MDAzZW1jLCBcdTAwMjZmcm9tLVx1MDAzZW1jLCB0by1cdTAwM2VhZGRyX2xlbik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExNTEtXHRfX2Rldl9zZXRfcnhfbW9kZSh0byk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTYzPXZvaWQgZGV2X21jX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTY1LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNjY6XHRfX2h3X2FkZHJfZmx1c2goXHUwMDI2ZGV2LVx1MDAzZW1jKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE2Ny1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTc3PXZvaWQgZGV2X21jX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE3OC17XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNzk6XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZkZXYtXHUwMDNlbWMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTgwLX1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTExODM9c3RhdGljIGludCBuZXRpZl9hZGRyX2xpc3RzX3NuYXBzaG90KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTkwLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTkxOlx0ZXJyID0gX19od19hZGRyX2xpc3Rfc25hcHNob3QodWNfc25hcCwgXHUwMDI2ZGV2LVx1MDAzZXVjLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTItXHRcdFx0XHQgICAgICBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5My1cdGlmICghZXJyKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTk0Olx0XHRlcnIgPSBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdCh1Y19yZWYsIFx1MDAyNmRldi1cdTAwM2V1YywgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTk1LVx0XHRcdFx0XHQgICAgICBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5Ni1cdGlmICghZXJyKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTk3Olx0XHRlcnIgPSBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdChtY19zbmFwLCBcdTAwMjZkZXYtXHUwMDNlbWMsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTgtXHRcdFx0XHRcdCAgICAgIGRldi1cdTAwM2VhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMDAtXHRpZiAoIWVycilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwMTpcdFx0ZXJyID0gX19od19hZGRyX2xpc3Rfc25hcHNob3QobWNfcmVmLCBcdTAwMjZkZXYtXHUwMDNlbWMsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIwMi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjA0LVx0aWYgKGVycikge1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjA1Olx0XHRfX2h3X2FkZHJfZmx1c2godWNfc25hcCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMDY6XHRcdF9faHdfYWRkcl9mbHVzaCh1Y19yZWYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjA3Olx0XHRfX2h3X2FkZHJfZmx1c2gobWNfc25hcCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMDgtXHR9XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjEzPXN0YXRpYyB2b2lkIG5ldGlmX2FkZHJfbGlzdHNfcmVjb25jaWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjE4LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIxOTpcdF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShcdTAwMjZkZXYtXHUwMDNldWMsIHVjX3NuYXAsIHVjX3JlZiwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjIwLVx0XHRcdFx0IFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjIxOlx0X19od19hZGRyX2xpc3RfcmVjb25jaWxlKFx1MDAyNmRldi1cdTAwM2VtYywgbWNfc25hcCwgbWNfcmVmLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMjItXHRcdFx0XHQgXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjc3PXZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyODYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyODc6XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZ1Y19zbmFwKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI4ODpcdF9faHdfYWRkcl9pbml0KFx1MDAyNm1jX3NuYXApO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjg5Olx0X19od19hZGRyX2luaXQoXHUwMDI2dWNfcmVmKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5MDpcdF9faHdfYWRkcl9pbml0KFx1MDAyNm1jX3JlZik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTEtXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMzQ4PXZvaWQgbmV0aWZfcnhfbW9kZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNDkte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzUwOlx0X19od19hZGRyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNTEtXHR0aW1lcl9zZXR1cChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9yZXRyeV90aW1lciwgbmV0aWZfcnhfbW9kZV9yZXRyeSwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYF9faHdfYWRkcl9jcmVhdGVgIGluIGBkZXZfYWRkcl9saXN0cy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9faHdfYWRkcl9jcmVhdGVgIHdpdGhpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuICBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGxpbmVzIDUwLTc1IG9mIHRoZSBzb3VyY2UgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gZG9lcyB3aXRoaW4gdGhpcyBmaWxlLCBhcyBgZGV2X2FkZHJfbGlzdHMuY2AgaXMgaW1wb3J0YW50IGZvciBoYW5kbGluZyBuZXR3b3JrIGRldmljZSBhZGRyZXNzIGxpc3RzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIGxpbmVzIGJlY2F1c2UgdGhleSBsaWtlbHkgY29udGFpbiB0aGUgY29yZSBsb2dpYyBvciBpbml0aWFsIHNldHVwIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzLCBhbmQgSSBjYW4gcXVpY2tseSBncm9rIHRoZSBkZXRhaWxzIHRvIHN0YXJ0IG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0fVxuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG4gIDUzOlx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4gIDU0Olx0XHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuICA1NzpcdFx0aW50IGFsbG9jX3NpemU7XG4gIDU4Olx0XG4gIDU5Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XG4gIDYwOlx0XHRpZiAoYWxsb2Nfc2l6ZSBcdTAwM2MgTDFfQ0FDSEVfQllURVMpXG4gIDYxOlx0XHRcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcbiAgNjI6XHRcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcbiAgNjM6XHRcdGlmICghaGEpXG4gIDY0Olx0XHRcdHJldHVybiBOVUxMO1xuICA2NTpcdFx0bWVtY3B5KGhhLVx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcbiAgNjY6XHRcdGhhLVx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XG4gIDY3Olx0XHRoYS1cdTAwM2VyZWZjb3VudCA9IDE7XG4gIDY4Olx0XHRoYS1cdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xuICA2OTpcdFx0aGEtXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xuICA3MDpcdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIGhhO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE11bHRpY2FzdCBBZGRyZXNzIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvcHlpbmcgdGhlIGFkZHJlc3MgZGF0YSBhbmQgaG93IGl0JiMzOTtzIHRoZW4gcGxhY2VkIGludG8gYSBuZXRsaW5rIG1lc3NhZ2UuIFRoZSBjb3JlIG9mIG15IGNvbmNlcm4gYm9pbHMgZG93biB0byB0aGlzOiBgX19od19hZGRyX2NyZWF0ZWAgdXNlcyBgbWVtY3B5YCB0byBjb3B5IGBhZGRyX2xlbmAgYnl0ZXMgaW50byBgaGEtJmd0O2FkZHJgLCBhbmQgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZW4sIGluIGBydG5sX2ZpbGxfbWNhZGRyYCwgd2UgdXNlIGBubGFfcHV0YCB0byBwbGFjZSB0aGUgZGF0YSBpbnRvIGEgbmV0bGluayBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgSUZBX01VTFRJQ0FTVGAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBubGFfcHV0YCB0YWtlcyBgZGV2LSZndDthZGRyX2xlbmAgYXMgdGhlIGxlbmd0aCwgYW5kLCBzaW5jZSBgYWRkcl9sZW5gIGVxdWFscyBgZGV2LSZndDthZGRyX2xlbmAsIGFsbCBzaG91bGQgYmUgd2VsbC4gQnV0IHdhaXQsIEkgcmVjYWxsIGBubGFfcHV0YCYjMzk7cyBiZWhhdmlvciBpcyB0byB6ZXJvLXBhZCBhbnkgYWxpZ25tZW50IGJ5dGVzLiBTbyB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGJ5dGVzIGlzIHdyaXR0ZW4sIHdpdGggdGhlIHJlc3QgcGFkZGVkIHdpdGggMC4KCk5vdywgSSYjMzk7bSBjaGVja2luZyBgcnRubF9kdW1wX21jYWRkcmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHVtcGluZyBwcm9jZXNzIHdvcmtzIHRvIGFzc2VzcyBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkaXNjcmVwYW5jaWVzLiBJIHNlZSB0aGF0IGBydG5sX2R1bXBfbWNhZGRyYCB1c2VzIGEgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSwgYGNiYCwgd2hpY2ggY29udGFpbnMgY29udGV4dCBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29udGV4dCBpcyB1c2VkIGFuZCBpZiBhbnkgaW5pdGlhbGl6YXRpb24gZXJyb3JzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLgoKQWhhISBgY2ItJmd0O2N0eGAgaXMgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBkdW1wLCBhbmQgYGN0eC0mZ3Q7aWZpbmRleGAgYW5kIGBjdHgtJmd0O2FkZHJfaWR4YCBhcmUgdXNlZCB0byB0cmFjayB0aGUgcHJvZ3Jlc3MuIFNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBpdGVyYXRpb24gdGVjaG5pcXVlIGZvciBkdW1wcyBhbmQgZG9lc24mIzM5O3QgZGlyZWN0bHkgcmFpc2UgcmVkIGZsYWdzIHJlZ2FyZGluZyB0aGUgbWVtb3J5IGNvcHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYGZvcl9lYWNoX25ldGRldl9kdW1wYCBsb29wIHdvcmtzIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9yX2VhY2hfbmV0ZGV2X2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXByb2Nmcy5jPTEwPXN0YXRpYyB2b2lkICpkZXZfc2VxX2Zyb21faW5kZXgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNC1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYzoxNTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHNlcV9maWxlX25ldChzZXEpLCBkZXYsIGlmaW5kZXgpIHtcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNi1cdFx0KnBvcyA9IGRldi1cdTAwM2VpZmluZGV4O1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM9ODE9bmV0ZGV2X25sX3BhZ2VfcG9vbF9nZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYy05OC1cdG11dGV4X2xvY2soXHUwMDI2cGFnZV9wb29sc19sb2NrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM6OTk6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIG5ldGRldiwgc3RhdGUtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYy0xMDAtXHRcdC8qIEVpdGhlciB0aGUgcHJvdmlkZWQgaWZpbmRleCBkb2VzbiYjMzk7dCBleGlzdCBvciBkb25lIGR1bXBpbmcgKi9cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTQ0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxNi1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MTc6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjE4LVx0XHRpZiAobGlua19kdW1wX2ZpbHRlcmVkKGRldiwgbWFzdGVyX2lkeCwga2luZF9vcHMpKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ2ODU9c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzE4LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDcxOTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzIwLVx0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMwNz1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMzYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1MzM3Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzM4LVx0XHRpZiAoYnJwb3J0X2lkeCBcdTAwMjZcdTAwMjYgKGRldi1cdTAwM2VpZmluZGV4ICE9IGJycG9ydF9pZHgpKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTY2NDA9c3RhdGljIGludCBydG5sX3N0YXRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NzEtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo2NjcyOlx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy02NjczLVx0XHRlcnIgPSBydG5sX2ZpbGxfc3RhdHNpbmZvKHNrYiwgZGV2LCBSVE1fTkVXU1RBVFMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqRXhhbWluaW5nIHJ0bmV0bGluay5jJiMzOTtzIFVzYWdlIG9mICYjMzk7Y3R4JiMzOTsqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGFyZSB3ZSBzZWVpbmcgYGN0eGAgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBgcnRubF9kdW1wX2lmaW5mb2AgZnVuY3Rpb24gYW5kIG90aGVyIHJlbGF0ZWQgZHVtcHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBmbG93IG9mIGhvdyB0aGlzIGBjdHhgIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aHJvdWdoIGBydG5sX2R1bXBfaWZpbmZvYCBzcGVjaWZpY2FsbHksIGFuZCB0aGVuIGV4cGFuZCBteSBzZWFyY2ggdG8gb3RoZXIgc2ltaWxhciBkdW1wcyBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgY3R4YCBpcyBpbml0aWFsaXplZCwgdXNlZCBmb3IgZGF0YSByZXRyaWV2YWwsIGFuZCB1bHRpbWF0ZWx5LCB3aGV0aGVyIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYW55IGlzc3VlcyBvciBpbXByb3ZlbWVudHMgSSYjMzk7bSB0aGlua2luZyBhYm91dC4gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU0NDpcdHN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTQ1Olx0e1xuMjU0NjpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2ItXHUwMDNlZXh0YWNrO1xuMjU0NzpcdFx0c3RydWN0IHJ0bmxfbGlua19vcHMgKmtpbmRfb3BzID0gTlVMTDtcbjI1NDg6XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuMjU0OTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjI1NTA6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuMjU1MTpcdFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVgmIzQzOzFdO1xuMjU1MjpcdFx0c3RydWN0IHtcbjI1NTM6XHRcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuMjU1NDpcdFx0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4yNTU1Olx0XHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0ID0gbmV0O1xuMjU1NjpcdFx0dTMyIGV4dF9maWx0ZXJfbWFzayA9IDA7XG4yNTU3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMjU1ODpcdFx0aW50IG9wc19zcmN1X2luZGV4O1xuMjU1OTpcdFx0aW50IG1hc3Rlcl9pZHggPSAwO1xuMjU2MDpcdFx0aW50IG5ldG5zaWQgPSAtMTtcbjI1NjE6XHRcdGJvb2wgbmVlZF9ydG5sO1xuMjU2MjpcdFx0aW50IGVyciwgaTtcbjI1NjM6XHRcbjI1NjQ6XHRcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9pZmluZm9fcmVxKG5saCwgY2ItXHUwMDNlc3RyaWN0X2NoZWNrLCB0YiwgZXh0YWNrKTtcbjI1NjU6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI1NjY6XHRcdFx0aWYgKGNiLVx1MDAzZXN0cmljdF9jaGVjaylcbjI1Njc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjU2ODpcdFxuMjU2OTpcdFx0XHRnb3RvIHdhbGtfZW50cmllcztcbjI1NzA6XHRcdH1cbjI1NzE6XHRcbjI1NzI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJRkxBX01BWDsgJiM0MzsmIzQzO2kpIHtcbjI1NzM6XHRcdFx0aWYgKCF0YltpXSlcbjI1NzQ6XHRcdFx0XHRjb250aW51ZTtcbjI1NzU6XHRcbjI1NzY6XHRcdFx0LyogbmV3IGF0dHJpYnV0ZXMgc2hvdWxkIG9ubHkgYmUgYWRkZWQgd2l0aCBzdHJpY3QgY2hlY2tpbmcgKi9cbjI1Nzc6XHRcdFx0c3dpdGNoIChpKSB7XG4yNTc4Olx0XHRcdGNhc2UgSUZMQV9UQVJHRVRfTkVUTlNJRDpcbjI1Nzk6XHRcdFx0XHRuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbaV0pO1xuMjU4MDpcdFx0XHRcdHRndF9uZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShza2ItXHUwMDNlc2ssIG5ldG5zaWQpO1xuMjU4MTpcdFx0XHRcdGlmIChJU19FUlIodGd0X25ldCkpIHtcbjI1ODI6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWRcJiMzNDspO1xuMjU4MzpcdFx0XHRcdFx0ZXJyID0gUFRSX0VSUih0Z3RfbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NjAKCQkJCQkJCW91dHB1dDogMzE2CgkJCQkJCQl0aG91Z2h0czogMjQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIFJUTkwgTXVsdGljYXN0IER1bXAgSGFuZGxlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSB3YWxrZWQgdGhyb3VnaCB0aGUgY29kZSwgbWV0aWN1bG91c2x5IHRyYWNpbmcgZGF0YSBmbG93LiBGaXJzdCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCB2YWxpZGF0ZXMgdGhlIHJlcXVlc3Q7IEkmIzM5O3ZlIGNoZWNrZWQgdGhhdCB0aGUgYGZpbHRlcmAgc3RydWN0dXJlIGFuZCByZWxhdGVkIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhbmQgaGFuZGxlcyBhbnkgcG90ZW50aWFsIGVycm9ycyBjb3JyZWN0bHksIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZS4gVGhlIGB0Z3RfbmV0YCBtZW1iZXIgaW4gYGZpbHRlcmAgbG9va3MgbGlrZSBpdCYjMzk7cyBwcm9wZXJseSBoYW5kbGVkLCB3aXRoIGVycm9yIHJldHVybnMgcHJldmVudGluZyB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBhbmQgZW5zdXJpbmcgYHB1dF9uZXRgIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBuZXQgbmFtZXNwYWNlIGxvb2t1cCBzdWNjZWVkcyBhbmQgdGhlIGBuZXRuc2lkYCBpcyBub24tbmVnYXRpdmUuCgpUaGVuIEkgZXhhbWluZWQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBgc3RydWN0IGlmYWRkcm1zZ2Agd2hpY2ggaXMgc2VudCB0byB1c2VyIHNwYWNlLiBJIGNvbmZpcm1lZCB0aGF0IGFsbCBpdHMgbWVtYmVycyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSB3cml0dGVuIHRvIGJlZm9yZSB0aGUgc3RydWN0dXJlIGlzIHNlbnQgYWNyb3NzLiAgVGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhbHNvIGxvb2sgc2FmZTsgdGhleSBhcmUgZWl0aGVyIHByaW1pdGl2ZSB0eXBlcyBwYXNzZWQgYnkgdmFsdWUgb3IgaGFyZHdhcmUgYWRkcmVzc2VzIGNvcGllZCBpbiBjaHVua3MgZGV0ZXJtaW5lZCBieSBgZGV2LSZndDthZGRyX2xlbmAsIHdpdGggYG5sYV9wdXRfKmAgdGFraW5nIGNhcmUgb2YgcGFkZGluZy4gSSBjYXJlZnVsbHkgYXNzZXNzZWQgZXZlcnkgZnVuY3Rpb24gKGUuZy4sIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgZXRjLikgdG8gbWFrZSBzdXJlIG5vIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBBbGwgcmVsZXZhbnQgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgSSYjMzk7dmUgY2hlY2tlZCBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhbHNvIGZvciBwYWRkaW5nIGluIGRhdGEgc3RydWN0dXJlcyBvciBuZXRsaW5rIGF0dHJpYnV0ZXMuIEkgZG9uJiMzOTt0IHNlZSBhbnkuIFRoZSBjb2RlIGFwcGVhcnMgY2xlYW4gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuCgpGaW5hbGx5LCBJIHJldmlld2VkIHRoZSBLTVNBTiBndWlkZWxpbmVzIGFuZCBjb25jbHVkZWQgdGhhdCBub25lIG9mIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gdHJ1ZSBhcHBseSBoZXJlLiAgVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgc2VudCB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBhbmQgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAsIGJlY2F1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkgY292ZXIgYW55IGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIG9yIGRldmljZSBsb29rdXAgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIFJUTV9HRVRNVUxUSUNBU1QgZHVtcCBoYW5kbGVyIGZvciBQRl9QQUNLRVQgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIG5ldC9jb3JlL3J0bmV0bGluay5jLlxuXG4xLiBOZXRsaW5rIE1lc3NhZ2UgSW5pdGlhbGl6YXRpb246IFRoZSBmaXhlZCBoZWFkZXIgYHN0cnVjdCBpZmFkZHJtc2dgIGNvbnRhaW5zIG5vIHN0cnVjdHVyZSBwYWRkaW5nICg0IHU4IGZpZWxkcyBmb2xsb3dlZCBieSBhIHUzMiBmaWVsZCwgOCBieXRlcyB0b3RhbCkgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHJ0bmxfZmlsbF9tY2FkZHIoKWAuXG4yLiBOZXRsaW5rIEF0dHJpYnV0ZXM6IEFsbCBhcHBlbmRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgdXNlIHN0YW5kYXJkIG5ldGxpbmsgaGVscGVycyAoYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfczMyYCwgYG5sYV9wdXRgKSB0aGF0IHBhc3Mgc2NhbGFyIHZhbHVlcyBvciBleGFjdGx5IGBkZXYtXHUwMDNlYWRkcl9sZW5gIGJ5dGVzIGZyb20gYGhhLVx1MDAzZWFkZHJgICh3aGljaCBpcyBpbml0aWFsaXplZCB0byBgZGV2LVx1MDAzZWFkZHJfbGVuYCB1cG9uIGNyZWF0aW9uKS4gUGFkZGluZyBhbGlnbm1lbnQgYnl0ZXMgYXJlIHplcm9lZCBieSBuZXRsaW5rIGhlbHBlcnMuXG4zLiBWYXJpYWJsZXMgXHUwMDI2IEZpbHRlcnM6IFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBhbmQgZHVtcCBjb250ZXh0IHN0YXRlIChgY3R4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiBLQVNBTi9TdGFuZGFyZCBTYW5pdGl6ZXJzOiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIFJDVS9sb2NrZGVwIHRyYXZlcnNhbCBvZiBkZXZpY2UgbGlzdHMsIG5ldHdvcmsgbmFtZXNwYWNlIHJlZmNvdW50cywgb3IgYnVmZmVyIGJvdW5kcyBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cblxuMS4gTmV0bGluayBNZXNzYWdlIEluaXRpYWxpemF0aW9uOiBUaGUgZml4ZWQgaGVhZGVyIGBzdHJ1Y3QgaWZhZGRybXNnYCBjb250YWlucyBubyBzdHJ1Y3R1cmUgcGFkZGluZyAoNCB1OCBmaWVsZHMgZm9sbG93ZWQgYnkgYSB1MzIgZmllbGQsIDggYnl0ZXMgdG90YWwpIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBydG5sX2ZpbGxfbWNhZGRyKClgLlxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVx1MDAzZWFkZHJfbGVuYCBieXRlcyBmcm9tIGBoYS1cdTAwM2VhZGRyYCAod2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxuMy4gVmFyaWFibGVzIFx1MDAyNiBGaWx0ZXJzOiBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgYW5kIGR1bXAgY29udGV4dCBzdGF0ZSAoYGN0eGApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6MjguNjQxMTYyNzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTY5NjYwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJUTV9HRVRNVUxUSUNBU1QgZHVtcCBoYW5kbGVyIGZvciBQRl9QQUNLRVQgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIG5ldC9jb3JlL3J0bmV0bGluay5jLlxcblxcbjEuIE5ldGxpbmsgTWVzc2FnZSBJbml0aWFsaXphdGlvbjogVGhlIGZpeGVkIGhlYWRlciBgc3RydWN0IGlmYWRkcm1zZ2AgY29udGFpbnMgbm8gc3RydWN0dXJlIHBhZGRpbmcgKDQgdTggZmllbGRzIGZvbGxvd2VkIGJ5IGEgdTMyIGZpZWxkLCA4IGJ5dGVzIHRvdGFsKSBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgcnRubF9maWxsX21jYWRkcigpYC5cXG4yLiBOZXRsaW5rIEF0dHJpYnV0ZXM6IEFsbCBhcHBlbmRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgdXNlIHN0YW5kYXJkIG5ldGxpbmsgaGVscGVycyAoYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfczMyYCwgYG5sYV9wdXRgKSB0aGF0IHBhc3Mgc2NhbGFyIHZhbHVlcyBvciBleGFjdGx5IGBkZXYtXFx1MDAzZWFkZHJfbGVuYCBieXRlcyBmcm9tIGBoYS1cXHUwMDNlYWRkcmAgKHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIGBkZXYtXFx1MDAzZWFkZHJfbGVuYCB1cG9uIGNyZWF0aW9uKS4gUGFkZGluZyBhbGlnbm1lbnQgYnl0ZXMgYXJlIHplcm9lZCBieSBuZXRsaW5rIGhlbHBlcnMuXFxuMy4gVmFyaWFibGVzIFxcdTAwMjYgRmlsdGVyczogU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXJgIGFuZCBkdW1wIGNvbnRleHQgc3RhdGUgKGBjdHhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIGZpZWxkcy5cXG40LiBLQVNBTi9TdGFuZGFyZCBTYW5pdGl6ZXJzOiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIFJDVS9sb2NrZGVwIHRyYXZlcnNhbCBvZiBkZXZpY2UgbGlzdHMsIG5ldHdvcmsgbmFtZXNwYWNlIHJlZmNvdW50cywgb3IgYnVmZmVyIGJvdW5kcyBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzIGR1bXAgc3VwcG9ydCBmb3IgUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QgcmVxdWVzdHMgaW4gcnRuZXRsaW5rLiBUaGlzIGludHJvZHVjZXMgbmV3IHBhcnNpbmcgYW5kIGR1bXBpbmcgbG9naWMgKHJ0bmxfZHVtcF9tY2FkZHIsIHJ0bmxfZHVtcF9tY2FkZHJfZGV2LCBydG5sX2ZpbGxfbWNhZGRyLCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBORVRMSU5LX1JPVVRFIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjI4LjY0MTE2NzY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3NjUzNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWNiZDY1Mzg4MTg4NDM5ZDllZTJmNDhjMTQ4YTdkZjZiYzQzMWMzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuaW5kZXggMGVjYmQyNGM4OTBjNi4uYWRmODJiNjlhZGU3OCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxcbkBAIC03Nyw2ICs3Nyw4IEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHN0YWJsZS1wcml2YWN5XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBnbG9iYWxcXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTE5LDcgKzEyMSw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogdGFyZ2V0LW5ldG5zaWRcXG4tICAgICAgICB0eXBlOiBiaW5hcnlcXG4rICAgICAgICB0eXBlOiBzMzJcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHByb3RvXFxuICAgICAgICAgdHlwZTogdThcXG5AQCAtMTY4LDcgKzE3MCwxMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcXG4gICAgIC1cXG4gICAgICAgbmFtZTogZ2V0bXVsdGljYXN0XFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cXG4rICAgICAgZG9jOiB8XFxuKyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IHNlbGVjdHMgdGhlIGFkZHJlc3NcXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxcbisgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXFxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcXFwiYnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcXFwiLCByYXRoZXIgdGhhbiBieSBhXFxuKyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LlxcbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXFxuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXFxuICAgICAgIGRvOlxcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXFxuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gZmxhZ3NcXG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXFxuICAgICAgICAgcmVwbHk6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG5pbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuQEAgLTU3LDYgKzU3LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURVxcdDB4MjAwXFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlxcdDB4NDAwXFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcXHQweDgwMFxcbisjZGVmaW5lIElGQV9GX0dMT0JBTFxcdFxcdDB4MTAwMFxcbiBcXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xcbiBcXHRfX3UzMlxcdGlmYV9wcmVmZXJlZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmY1NGU5Y2IzYmYzMGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC00NTY2LDYgKzQ1NjYsMTY5IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdHJldHVybiBza2ItXFx1MDAzZWxlbiA/IDogcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXFxuK1xcdFxcdFxcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxcbit7XFxuK1xcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuK1xcbitcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxcbitcXHRcXHRcXHRmbGFncyk7XFxuK1xcdGlmICghbmxoKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XFxuK1xcdC8qIGlmbS1cXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXFxuK1xcdGlmbS1cXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX2luZGV4ID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXG4rXFx0aWYgKChuZXRuc2lkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XFxuK1xcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcXG4rXFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4rXFx0aW50IGFkZHJfaWR4ID0gMDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xcbitcXHRcXHRpZiAoYWRkcl9pZHggXFx1MDAzYyAqc19hZGRyX2lkeCkge1xcbitcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHR9XFxuK1xcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XFxuK1xcbitcXHQqc19hZGRyX2lkeCA9IGVyciBcXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xcbitcXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xcbitcXHRpbnQgbmV0bnNpZDtcXG4rXFx0aW50IGlmaW5kZXg7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCArIDFdID0ge1xcbitcXHRbSUZBX1RBUkdFVF9ORVROU0lEXVxcdD0geyAudHlwZSA9IE5MQV9TMzIgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICsgMV07XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xcbitcXHRpZiAoIWlmbSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpZm0tXFx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVxcdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVxcdTAwM2VpZmFfc2NvcGUpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLFxcbitcXHRcXHRcXHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XFxuK1xcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4rXFxuK1xcdFxcdGZpbHRlci1cXHUwMDNlbmV0bnNpZCA9IG5sYV9nZXRfczMyKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pO1xcbitcXHRcXHRuZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLVxcdTAwM2VuZXRuc2lkKTtcXG4rXFx0XFx0aWYgKElTX0VSUihuZXQpKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuZXQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGZpbHRlci1cXHUwMDNldGd0X25ldCA9IG5ldDtcXG4rXFx0fVxcbitcXG4rXFx0ZmlsdGVyLVxcdTAwM2VpZmluZGV4ID0gaWZtLVxcdTAwM2VpZmFfaW5kZXg7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xcbitcXHRcXHQudGd0X25ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLFxcbitcXHRcXHQubmV0bnNpZCA9IC0xLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbitcXHRcXHRpbnQgYWRkcl9pZHg7XFxuK1xcdH0gKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLVxcdTAwM2VubGgsIHNrYi1cXHUwMDNlc2ssIFxcdTAwMjZmaWx0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcbitcXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcXG4rXFx0XFx0Y2ItXFx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpO1xcbitcXHRcXHRpZiAoIWRldikge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFxcdTAwMjZjdHgtXFx1MDAzZWFkZHJfaWR4LCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAoZmlsdGVyLnRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpZiAoZmlsdGVyLm5ldG5zaWQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cHV0X25ldChmaWx0ZXIudGd0X25ldCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXFxuQEAgLTcyNTEsNiArNzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XFxuIFxcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXFxuIFxcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcXG4gXFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxcbitcXHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXFxuK1xcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxcbiBcXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtMSwxNyArMSwyMSBAQFxcbiAjIS91c3IvYmluL2VudiBweXRob24zXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuK2ltcG9ydCBlcnJub1xcbiBpbXBvcnQgc29ja2V0XFxuIGltcG9ydCBzdHJ1Y3RcXG4gaW1wb3J0IHRpbWVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcXG4gXFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFxcXHhlMFxcXFx4MDBcXFxceDAwXFxcXHgwMSdcXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFxcXHhlZlxcXFx4MDFcXFxceDAxXFxcXHgwMSdcXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcXG4rRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCcwMTAwNWUwMDAwMDEnKVxcbitFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJzAxOjAwOjVlOjAxOjAxOjAxJ1xcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcXG4gXFxuIFxcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XFxuQEAgLTEwNSw2ICsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXFxuIFxcbiBcXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxcbisgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzLCB0aGUgZ2xvYmFsIGZsYWcgYW5kXFxuKyAgICB0YXJnZXQtbmV0bnNpZC5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcXFwiZHVtbXkxXFxcIiwgXFxcImR1bW15MlxcXCIpOlxcbisgICAgICAgICAgICBpcChmXFxcImxpbmsgYWRkIG5hbWUge2lmbmFtZX0gdHlwZSBkdW1teVxcXCIpXFxuKyAgICAgICAgICAgIGlwKGZcXFwibGluayBzZXQge2lmbmFtZX0gdXBcXFwiKVxcbisgICAgICAgIGRldl9pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoXFxcImR1bW15MVxcXCIpXFxuKyAgICAgICAgaXAoZlxcXCJtYWRkciBhZGQge0VUSF9URVNUX01VTFRJQ0FTVF9TVFJ9IGRldiBkdW1teTFcXFwiKVxcbitcXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXFxuKyAgICAgICAgICAgICAgICB7XFxcImlmYS1mYW1pbHlcXFwiOiBzb2NrZXQuQUZfUEFDS0VULCBcXFwiaWZhLWluZGV4XFxcIjogZGV2X2lkeH0sXFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXFxuKyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcXG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXG4rICAgICAgICAgICAgICAgICAgICBcXFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXFxcIilcXG4rICAgICAgICAgICAgcmFpc2VcXG4rXFxuKyAgICAgICAgIyBkdW1teTIgaGFzIGVudHJpZXMgYXMgd2VsbCwgb25seSBkdW1teTEgbWF5IGJlIGxpc3RlZFxcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcXG4rICAgICAgICAgICAgICAgIFxcXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXFxcIilcXG4rXFxuKyAgICAgICAgZW50cmllcyA9IHthZGRyWydtdWx0aWNhc3QnXTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XFxuK1xcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xcbisgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cXG4rICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxcbisgICAgICAgICAgICAgICAgXFxcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzXFxcIilcXG4rICAgICAgICBrc2Z0X25vdF9pbignZ2xvYmFsJywgZW50cmllc1tFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcInByb3RvY29sIGVudHJ5IGlzIGdsb2JhbFxcXCIpXFxuK1xcbisgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxcbisgICAgICAgICAgICAgICAgXFxcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAga3NmdF9lcShlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ21jLXVzZXJzJ10sIDEsXFxuKyAgICAgICAgICAgICAgICBcXFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXFxcIilcXG4rICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXFxuKyAgICAgICAgICAgICAgICBcXFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcXFwiKVxcbitcXG4rICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdFxcbisgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOlxcbisgICAgICAgICAgICBpcChmXFxcIm5ldG5zIHNldCB7cGVlcn0gNVxcXCIpXFxuKyAgICAgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15XFxcIiwgbnM9cGVlcilcXG4rICAgICAgICAgICAgaXAoXFxcImxpbmsgc2V0IGR1bW15MyB1cFxcXCIsIG5zPXBlZXIpXFxuKyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXFxcImxpbmsgc2hvdyBkdW1teTNcXFwiLCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWydpZmluZGV4J11cXG4rXFxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxcbisgICAgICAgICAgICAgICAge1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX1BBQ0tFVCwgXFxcInRhcmdldC1uZXRuc2lkXFxcIjogNX0sXFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXFxuKyAgICAgICAgICAgIGtzZnRfZXEoeyhhZGRyWydpZmEtaW5kZXgnXSwgYWRkclsndGFyZ2V0LW5ldG5zaWQnXSlcXG4rICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJ0YXJnZXQtbmV0bnNpZCBkaWQgbm90IGR1bXAgdGhlIHBlZXIgbmV0bnNcXFwiKVxcbitcXG4rXFxuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIFxcXCJcXFwiXFxcIlxcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXFxuQEAgLTMxNSw3ICszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cXHUwMDNlIE5vbmU6XFxuIFxcbiBcXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXFxuKyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODoyOS4yOTk1NTIyNTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTAxOTcyOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJcIixcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJfZGV2XCIsXG4gICAgXCJydG5sX2ZpbGxfbWNhZGRyXCIsXG4gICAgXCJydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wIHN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIHJlcXVlc3RzIGluIHJ0bmV0bGluay4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGFuZCBkdW1waW5nIGxvZ2ljIChydG5sX2R1bXBfbWNhZGRyLCBydG5sX2R1bXBfbWNhZGRyX2RldiwgcnRubF9maWxsX21jYWRkciwgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEpIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgTkVUTElOS19ST1VURSBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLmFkZjgyYjY5YWRlNzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiArNzcsOCBAQCBkZWZpbml0aW9uczpcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkXG4tICAgICAgICB0eXBlOiBiaW5hcnlcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHByb3RvXG4gICAgICAgICB0eXBlOiB1OFxuQEAgLTE2OCw3ICsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcbisgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCBleHBsaWNpdGx5LCBlLmcuIHdpdGhcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcImJyaWRnZSBmZGIgYWRkIC4uLiBzZWxmXCIsIHJhdGhlciB0aGFuIGJ5IGFcbisgICAgICAgIHByb3RvY29sIGpvaW4gYXJlIHJlcG9ydGVkIHdpdGggdGhlIGdsb2JhbCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gbXVsdGljYXN0XG4gICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSBmbGFnc1xuKyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgICAgcmVwbHk6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IDdmYjYzMGI3ZmUzMTEuLjBhMWFkOWViYjQ3YmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5AQCAtNTcsNiArNTcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEVcdDB4MjAwXG4gI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOXHQweDQwMFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcdDB4ODAwXG4rI2RlZmluZSBJRkFfRl9HTE9CQUxcdFx0MHgxMDAwXG4gXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xuIFx0X191MzJcdGlmYV9wcmVmZXJlZDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCA4MWM1YTYxMDRkZWExLi5mNTRlOWNiM2JmMzBjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtNDU2Niw2ICs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXG4rXHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4re1xuK1x0dTMyIGlmYV9mbGFncyA9IGhhLVx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0c3RydWN0IG5sbXNnaGRyICpubGg7XG4rXG4rXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuK1x0XHRcdGZsYWdzKTtcbitcdGlmICghbmxoKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0aWZtID0gbmxtc2dfZGF0YShubGgpO1xuK1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4rXHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG4rXHQvKiBpZm0tXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXG4rXHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xuK1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4rXHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXG4rXHRpZiAoKG5ldG5zaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XG4rXHQgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcbitcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdH1cbitcbitcdG5sbXNnX2VuZChza2IsIG5saCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRpbnQgYWRkcl9pZHggPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbitcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbitcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuK1x0XHRcdGFkZHJfaWR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRhZGRyX2lkeCsrO1xuK1x0fVxuK1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbitcbitcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHtcbitcdHN0cnVjdCBuZXQgKnRndF9uZXQ7XG4rXHRpbnQgbmV0bnNpZDtcbitcdGludCBpZmluZGV4O1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5W0lGQV9NQVggKyAxXSA9IHtcbitcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCArIDFdO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0aW50IGVycjtcbitcbitcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuK1x0aWYgKCFpZm0pIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXG4rXHRcdFx0ICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xuK1x0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4rXG4rXHRcdGZpbHRlci1cdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XG4rXHRcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXHUwMDNlbmV0bnNpZCk7XG4rXHRcdGlmIChJU19FUlIobmV0KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXCIpO1xuK1x0XHRcdHJldHVybiBQVFJfRVJSKG5ldCk7XG4rXHRcdH1cbitcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4rXHR9XG4rXG4rXHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xuK1x0XHQudGd0X25ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4rXHRcdC5uZXRuc2lkID0gLTEsXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG4rXHRcdGludCBhZGRyX2lkeDtcbitcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuK1x0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdGlmIChmaWx0ZXIubmV0bnNpZCBcdTAwM2U9IDApXG4rXHRcdHB1dF9uZXQoZmlsdGVyLnRndF9uZXQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw2NiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcbisgICAgdGFyZ2V0LW5ldG5zaWQuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9ub3RfaW4oJ2dsb2JhbCcsIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgXCJwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcIilcbitcbisgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuKyAgICAgICAgICAgICAgICBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9lcShlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ21jLXVzZXJzJ10sIDEsXG4rICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgIFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcIilcbitcbisgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XG4rICAgICAgICB3aXRoIE5ldE5TKCkgYXMgcGVlcjpcbisgICAgICAgICAgICBpcChmXCJuZXRucyBzZXQge3BlZXJ9IDVcIilcbisgICAgICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcIiwgbnM9cGVlcilcbisgICAgICAgICAgICBpcChcImxpbmsgc2V0IGR1bW15MyB1cFwiLCBucz1wZWVyKVxuKyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXCJsaW5rIHNob3cgZHVtbXkzXCIsIGpzb249VHJ1ZSwgbnM9cGVlcilbMF1bJ2lmaW5kZXgnXVxuK1xuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwidGFyZ2V0LW5ldG5zaWRcIjogNX0sXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbisgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsnaWZhLWluZGV4J10sIGFkZHJbJ3RhcmdldC1uZXRuc2lkJ10pXG4rICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxuKyAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXQtbmV0bnNpZCBkaWQgbm90IGR1bXAgdGhlIHBlZXIgbmV0bnNcIilcbitcbitcbiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiXG4gICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGlua1xuQEAgLTMxNSw3ICszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbisgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjI5LjI5OTU1NDY4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3MDAxODQ1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgRmVhdHVyZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYWJpbGl0eSB0byBkdW1wIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyB1c2luZyBydG5ldGxpbmssIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYFBGX1BBQ0tFVGAgYW5kIHRoZSBgUlRNX0dFVE1VTFRJQ0FTVGAgbWVzc2FnZSB0eXBlLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXM6IGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHdoaWNoIGNvbnRhaW5zIHRoZSBuZXcgY29yZSBmdW5jdGlvbnMgZm9yIGR1bXBpbmcsIGluY2x1ZGluZyBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGFuZCB0aGUgcG9saWNpZXMgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXJlJ3MgYSBuZXcgYElGQV9GX0dMT0JBTGAgZmxhZyBpbiBgaWZfYWRkci5oYCwgcHJlc3VtYWJseSBmb3IgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGZsYWdzLiBXZSBhbHNvIHNlZSB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBhIHNlbGZ0ZXN0IGZvciB2ZXJpZmljYXRpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBldmFsdWF0ZSB0aGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGU6IHRoZSBjb3JlIHN1YnN5c3RlbSBpcyBOZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgYHJ0bmV0bGlua2AuIFRoZSBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpbXBsZW1lbnRzIHRoZSByZWxldmFudCBgcnRubF9kdW1wX21jYWRkcmAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gSXQncyB0cml2aWFsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBzaWduaWZpY2FudC4gV2UgaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIHN0YW5kYXJkIG5ldGxpbmsgc29ja2V0cyAoYEFGX05FVExJTktgLCBgTkVUTElOS19ST1VURWApLCBzZW5kaW5nIGBSVE1fR0VUTVVMVElDQVNUYCBtZXNzYWdlcywgYW5kIHNwZWNpZnlpbmcgdGhlIGBQRl9QQUNLRVRgIGZhbWlseS4gVGhpcyBzaG91bGQgYmUgZWFzaWx5IHRyaWdnZXJhYmxlIGluIHN5emthbGxlci5cblxuVGhlcmVmb3JlLCAqeWVzKiwgaXQncyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgbmV3IGZ1bmN0aW9ucy4gSSBzaG91bGQgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBpbnRlcm5hbHMgb2YgaG93IHRoZSBkdW1wIGlzIGltcGxlbWVudGVkLiBJdCdzIHRpbWUgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6MzcuOTk5NzQzMDI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTA2MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZHVtcF9tY2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NjAyLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2MDM6c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2MDQtXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjQwPXN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00Njg0LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2ODU6c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00Njg2LXtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTMtXFx0XFx0fVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MTQ6XFx0XFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcXHUwMDI2Y3R4LVxcdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDcxNS1cXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzE5LVxcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MjA6XFx0XFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcXHUwMDI2Y3R4LVxcdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDcyMS1cXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTc0MTctXFx0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjc0MTg6XFx0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzQxOS1cXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODozOC4wNjQ2NzUyNzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTcxMzI1MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFJUTkVUTElOSyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeS4gSSBuZWVkIHRvIHNlZSB3aGF0IGRlcGVuZGVuY2llcyBhcmUgZGVjbGFyZWQgdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgY29uZmlnIHN5bWJvbHMgdGhhdCBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiBgcnRuZXRsaW5rLmNgIGFuZCBpdHMgc3VwcG9ydGluZyBjb21wb25lbnRzLiBJdOKAmXMgaW1wb3J0YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBuZXR3b3JrIGZlYXR1cmVzLiBUaGF0IHdheSwgSSBjYW4gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGVuYWJsZWQgYW5kIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYW5kIGhvcGVmdWxseSBJIHdvbid0IG5lZWQgdG8gdHJhY2UgdGhyb3VnaCAqdG9vKiBtYW55IGxldmVscyBvZiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0MC4yMzYwMDQwOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNTIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRuZXRsaW5rXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0MC4yODUxNjIyMDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc2OTU3MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSVE5ldGxpbmsgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgbW9kdWxlIChgbmV0L2NvcmUvYCkgd2hlbiB0aGUgbmV0d29ya2luZyBzdGFjayBpcyBlbmFibGVkLiBUaGF0J3MgYSBnaXZlbiwgYENPTkZJR19ORVRgIGlzIHRoZSBiYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgaGFuZGxpbmcgd2l0aGluIFJUTmV0bGluay5cblxuTGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBtdWx0aWNhc3QgYWRkcmVzcyBkdW1waW5nPyBJIGhhdmUgdGhlc2UgZm91cjogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGFuZCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gYW55IG90aGVyIHJlbGV2YW50IGZpbGVzLlxuXG5SaWdodCwgSSBzZWUgYSBmZXcgb3RoZXIgcGxhY2VzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZDogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCB0aGUgYGlmX2FkZHIuaGAgaW5jbHVkZSBmaWxlLCBgcnRuZXRsaW5rLmNgIG9mIGNvdXJzZSwgYW5kIGEgc2VsZnRlc3Qgc2NyaXB0LiBUaGVzZSBzdXBwb3J0IG15IHdvcmsgb24gdGhpcyBhcmVhLlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHRoZSBzeW1ib2xzOiBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYC4gR29vZCwgZ29vZC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIG11bHRpY2FzdCBhZGRyZXNzIGR1bXBzLCBiZXlvbmQgdGhlIGJhc2ljIGBORVRgIGNvbmZpZz8gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIHNvbWV0aGluZyBsaWtlIGBQRl9QQUNLRVRgIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgY29uZmlnLCBsaWtlIGBDT05GSUdfUEFDS0VUYC4gSSdsbCBoYXZlIHRvIGxvb2sgaW50byBgcnRuZXRsaW5rLmNgIGNvZGUgdG8gc2VlIGlmIHRoZSBwYWNrZXQgZmFtaWx5IGlzIGludm9sdmVkIGluIHRoaXMgcGFydC4gSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0My43NjIxMjE3MTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MTMzODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEZfUEFDS0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1MjI9c3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1MzYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDUzNzpcXHRcXHRpZiAoaWR4IFxcdTAwM2Mgc19pZHggfHwgaWR4ID09IFBGX1BBQ0tFVClcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTM4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NzM5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE2LVxcdHsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3NDE3OlxcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE4LVxcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0My44MTA1NDIyMTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODk5ODc2MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEknbSBzZWVpbmc6IHRoZSBoYW5kbGVyIGZvciB0aGlzIG11bHRpY2FzdCBhZGRyZXNzIHJldHJpZXZhbCB2aWEgcnRuZXRsaW5rIChgUlRNX0dFVE1VTFRJQ0FTVGApIGlzIHJlZ2lzdGVyZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gKGAjaWZkZWZgKSBoZXJlLCB3aGljaCBtZWFucyBpdCdzIGFsd2F5cyBhdmFpbGFibGUuIFRoZSBtZXNzYWdlIGlzIGJlaW5nIHJlY2VpdmVkIG92ZXIgdGhlIHN0YW5kYXJkIGBORVRMSU5LX1JPVVRFYCBzb2NrZXQsIHdoaWNoIHVzZXMgdGhlIGBBRl9ORVRMSU5LYCBhZGRyZXNzIGZhbWlseS4gQW5kLCBjcnVjaWFsbHksIHRoZSBgaWZtLVx1MDAzZWlmYV9mYW1pbHlgIGlzIGBBRl9QQUNLRVRgLlxuXG5UaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCB0aGUgY29yZSByZXF1aXJlbWVudCBpcyBqdXN0IHN0YW5kYXJkIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCksIGFuZCBieSBleHRlbnNpb24sIGBDT05GSUdfTkVUTElOS2AuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBzdHVmZiBoZXJlLlxuXG5MZXQgbWUganVzdCBzb2xpZGlmeSB0aGlzIGZ1cnRoZXI6XG5cbjEuICBgV29ydGhGdXp6aW5nYCBpcyBtYXJrZWQgYXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCB0byBrbm93LlxuMi4gIFRoZSBcIlJlYXNvbmluZ1wiIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmc6IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzICh1c2luZyBgUEZfUEFDS0VUYCB3aXRoIGBSVE1fR0VUTVVMVElDQVNUYCkgdGhyb3VnaCBydG5ldGxpbmsuIFRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGFuZCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGlzIGFjY2VzcyBpcyBhdmFpbGFibGUgdGhyb3VnaCB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBuZXRsaW5rIHJvdXRlIHNvY2tldHMuXG4zLiAgVGhlIGNyaXRpY2FsIFwiRm9jdXNTeW1ib2xzXCIg4oCTIHRoZSBmdW5jdGlvbnMgdGhleSd2ZSBoaWdobGlnaHRlZDogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGFuZCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGUgc2NvcGUuXG40LiAgVGhlIFwiRW5hYmxlQ29uZmlnc1wiIGV4cGxpY2l0bHkgbGlzdHMgYFtcIk5FVFwiXWAuIFByZWNpc2VseSB3aGF0IEkgaGFkIGluIG1pbmQhXG5cblJpZ2h0LCBJJ20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTAsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjQ3LjcxMDQyMTAzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDk4OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6NDcuODAxNTI5OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjM2NTg5MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6NDcuODAyMTU4MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MzIzNTk1NzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cXG5cXG4xLiBOZXRsaW5rIE1lc3NhZ2UgSW5pdGlhbGl6YXRpb246IFRoZSBmaXhlZCBoZWFkZXIgYHN0cnVjdCBpZmFkZHJtc2dgIGNvbnRhaW5zIG5vIHN0cnVjdHVyZSBwYWRkaW5nICg0IHU4IGZpZWxkcyBmb2xsb3dlZCBieSBhIHUzMiBmaWVsZCwgOCBieXRlcyB0b3RhbCkgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHJ0bmxfZmlsbF9tY2FkZHIoKWAuXFxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgYnl0ZXMgZnJvbSBgaGEtXFx1MDAzZWFkZHJgICh3aGljaCBpcyBpbml0aWFsaXplZCB0byBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxcbjMuIFZhcmlhYmxlcyBcXHUwMDI2IEZpbHRlcnM6IFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBhbmQgZHVtcCBjb250ZXh0IHN0YXRlIChgY3R4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBmaWVsZHMuXFxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLmFkZjgyYjY5YWRlNzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiArNzcsOCBAQCBkZWZpbml0aW9uczpcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkXG4tICAgICAgICB0eXBlOiBiaW5hcnlcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHByb3RvXG4gICAgICAgICB0eXBlOiB1OFxuQEAgLTE2OCw3ICsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcbisgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCBleHBsaWNpdGx5LCBlLmcuIHdpdGhcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcImJyaWRnZSBmZGIgYWRkIC4uLiBzZWxmXCIsIHJhdGhlciB0aGFuIGJ5IGFcbisgICAgICAgIHByb3RvY29sIGpvaW4gYXJlIHJlcG9ydGVkIHdpdGggdGhlIGdsb2JhbCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gbXVsdGljYXN0XG4gICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSBmbGFnc1xuKyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgICAgcmVwbHk6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IDdmYjYzMGI3ZmUzMTEuLjBhMWFkOWViYjQ3YmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5AQCAtNTcsNiArNTcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEVcdDB4MjAwXG4gI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOXHQweDQwMFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcdDB4ODAwXG4rI2RlZmluZSBJRkFfRl9HTE9CQUxcdFx0MHgxMDAwXG4gXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xuIFx0X191MzJcdGlmYV9wcmVmZXJlZDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCA4MWM1YTYxMDRkZWExLi5mNTRlOWNiM2JmMzBjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtNDU2Niw2ICs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXG4rXHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4re1xuK1x0dTMyIGlmYV9mbGFncyA9IGhhLVx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0c3RydWN0IG5sbXNnaGRyICpubGg7XG4rXG4rXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuK1x0XHRcdGZsYWdzKTtcbitcdGlmICghbmxoKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0aWZtID0gbmxtc2dfZGF0YShubGgpO1xuK1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4rXHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG4rXHQvKiBpZm0tXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXG4rXHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xuK1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4rXHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXG4rXHRpZiAoKG5ldG5zaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XG4rXHQgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcbitcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdH1cbitcbitcdG5sbXNnX2VuZChza2IsIG5saCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRpbnQgYWRkcl9pZHggPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbitcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbitcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuK1x0XHRcdGFkZHJfaWR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRhZGRyX2lkeCsrO1xuK1x0fVxuK1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbitcbitcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHtcbitcdHN0cnVjdCBuZXQgKnRndF9uZXQ7XG4rXHRpbnQgbmV0bnNpZDtcbitcdGludCBpZmluZGV4O1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5W0lGQV9NQVggKyAxXSA9IHtcbitcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCArIDFdO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0aW50IGVycjtcbitcbitcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuK1x0aWYgKCFpZm0pIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXG4rXHRcdFx0ICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xuK1x0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4rXG4rXHRcdGZpbHRlci1cdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XG4rXHRcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXHUwMDNlbmV0bnNpZCk7XG4rXHRcdGlmIChJU19FUlIobmV0KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXCIpO1xuK1x0XHRcdHJldHVybiBQVFJfRVJSKG5ldCk7XG4rXHRcdH1cbitcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4rXHR9XG4rXG4rXHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xuK1x0XHQudGd0X25ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4rXHRcdC5uZXRuc2lkID0gLTEsXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG4rXHRcdGludCBhZGRyX2lkeDtcbitcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuK1x0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdGlmIChmaWx0ZXIubmV0bnNpZCBcdTAwM2U9IDApXG4rXHRcdHB1dF9uZXQoZmlsdGVyLnRndF9uZXQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw2NiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcbisgICAgdGFyZ2V0LW5ldG5zaWQuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9ub3RfaW4oJ2dsb2JhbCcsIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgXCJwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcIilcbitcbisgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuKyAgICAgICAgICAgICAgICBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9lcShlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ21jLXVzZXJzJ10sIDEsXG4rICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgIFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcIilcbitcbisgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XG4rICAgICAgICB3aXRoIE5ldE5TKCkgYXMgcGVlcjpcbisgICAgICAgICAgICBpcChmXCJuZXRucyBzZXQge3BlZXJ9IDVcIilcbisgICAgICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcIiwgbnM9cGVlcilcbisgICAgICAgICAgICBpcChcImxpbmsgc2V0IGR1bW15MyB1cFwiLCBucz1wZWVyKVxuKyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXCJsaW5rIHNob3cgZHVtbXkzXCIsIGpzb249VHJ1ZSwgbnM9cGVlcilbMF1bJ2lmaW5kZXgnXVxuK1xuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwidGFyZ2V0LW5ldG5zaWRcIjogNX0sXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbisgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsnaWZhLWluZGV4J10sIGFkZHJbJ3RhcmdldC1uZXRuc2lkJ10pXG4rICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxuKyAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXQtbmV0bnNpZCBkaWQgbm90IGR1bXAgdGhlIHBlZXIgbmV0bnNcIilcbitcbitcbiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiXG4gICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGlua1xuQEAgLTMxNSw3ICszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbisgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjQ3LjgwMjE1OTY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzUyMjg0MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBydW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybi5cblxuTG9va2luZyBhdCB0aGUgZmlsZSBjaGFuZ2VzLCBJIHNlZSB1cGRhdGVzIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCBjb25jZXJuaW5nIG5ldGxpbmsgc3BlY3MsIGFkZGluZyBgQUZfUEFDS0VUYCwgYSBnbG9iYWwgZmxhZywgYW5kIGB0YXJnZXQtbmV0bnNpZGAgZm9yIGBnZXRtdWx0aWNhc3RgLiBBIG5ldyBkZWZpbmUsIGAjZGVmaW5lIElGQV9GX0dMT0JBTCAweDEwMDBgLCBpcyBhZGRlZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIFRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggaW1wbGVtZW50cyBhIGR1bXAgZnVuY3Rpb24gZm9yIGBQRl9QQUNLRVRgIGBnZXRtdWx0aWNhc3RgLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbiBgcnRubF9maWxsX21jYWRkcmAgaXMgd2hlcmUgSSdsbCBmb2N1cy4gSXQgY29uc3RydWN0cyBhIE5ldGxpbmsgbWVzc2FnZSwgYW5kIHRoZXJlIHNlZW1zIHRvIGJlIGEgc3VidGxlIGlzc3VlIGhlcmU6XG5cbkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIGBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLCBmbGFncylgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYG5sbXNnX3B1dGAgaW5pdGlhbGl6ZXMgdGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBoZWFkZXIgYW5kIHBheWxvYWQsIG9yIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubG1zZ19kYXRhYCBpcyB1bmluaXRpYWxpemVkLiBJZiBpdCdzIHRoZSBsYXR0ZXIsIHRoaXMgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG5sbXNnX3B1dGAgemVyb2VzIHRoZSBtZW1vcnkgb3IgaWYgYG5sbXNnX2RhdGFgIGNvbnRhaW5zIGp1bmssIG9yIGlmIHRoZSBjb2RlIGluaXRpYWxpemVzIGl0LiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIGJlY2F1c2UgdGhhdCBgaWZtYCBpcyBiZWluZyB1c2VkLCBhbmQgaWYgdW5pbml0aWFsaXplZCwgdGhhdCdzIGEgcHJvYmxlbS5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG11c3QgYWxzbyByZWNhbGwgd2hhdCBhIGBzdHJ1Y3QgaWZhZGRybXNnYCBpcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uIGFuZCBtZW1iZXJzIHRvIGdldCBhIG1vcmUgaG9saXN0aWMgdmlldyBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYGNvZGVzZWFyY2hgIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ2NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjU5LjE1NDQ0NjMxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwODczMjI3LCJFcnJvciI6ImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxceyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpZmFkZHJtc2cge1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxcXFx7XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjU5LjM2NTMyODg4NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTc5NzM4MzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBJbnRlcmZhY2UgU3RydWN0dXJlIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBzb21lIGRldGFpbHMgYWJvdXQgbmV0d29yayBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgZGlnZ2luZyBpbnRvIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBvZiB0aGUgZGF0YS4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBkZWZpbml0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGp1bXBpbmctb2ZmIHBvaW50LiBMZXQncyBnZXQgdGhhdCBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCBpbmZvcm1hdGlvbiBpdCBob2xkcy4gSSdtIGV4cGVjdGluZyB0aGlzIHN0cnVjdHVyZSB0byBjb250YWluIHRoZSBiYXNpYyBhdHRyaWJ1dGVzIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gZHJpbGwgZG93biB0byBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgaWYgbmVlZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MTEuMTYyNzE0NjE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI3MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaWZhZGRybXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXFx0X191OFxcdFxcdGlmYV9mYW1pbHk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTIzLSAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDoyNDogKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTI1LSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaD02Mj1zdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTcwLSNpZm5kZWYgX19LRVJORUxfX1xcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6NzE6I2RlZmluZSBJRkFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpKSlcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjcyOiNkZWZpbmUgSUZBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSlcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTczLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxOToxMS4yMjQ5OTI5MDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1MTEzNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBpZl9hZGRyLmgqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbGlrZWx5IHN0YXJ0cyBkZWZpbmluZyB0aGUgc3RydWN0dXJlcyBvciBjb25zdGFudHMgcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzIGluZm9ybWF0aW9uLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGlmYWRkcm1zZ2AsIG9yIHBlcmhhcHMgc29tZSBrZXkgZmxhZyBkZWZpbml0aW9ucyB0aGF0IGdvdmVybiBob3cgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBJJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCByZWxhdGUgdG8gYWRkcmVzcyBmYW1pbGllcywgYWRkcmVzcyBsZW5ndGhzLCBhbmQgYXR0cmlidXRlIGNvZGVzLiBJJ20gYW50aWNpcGF0aW5nIHBvc3NpYmx5IHNlZWluZyBzb21lIGVudW1zLiBBbnl0aGluZyB0aGF0IGRpY3RhdGVzIHRoZSBmb3JtYXQgb3IgcHJvcGVydGllcyBvZiBuZXR3b3JrIGFkZHJlc3NlcyBpcyB3aGF0IEknbSBsb29raW5nIGZvciBpbml0aWFsbHkuIEknbSBrZWVuIHRvIGVuc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0IHN0YW5kYXJkcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MTMuMzc2MTMxNjg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cXG4gICAyOlxcdCNpZm5kZWYgX1VBUElfX0xJTlVYX0lGX0FERFJfSFxcbiAgIDM6XFx0I2RlZmluZSBfVUFQSV9fTElOVVhfSUZfQUREUl9IXFxuICAgNDpcXHRcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gICA3OlxcdFxcbiAgIDg6XFx0c3RydWN0IGlmYWRkcm1zZyB7XFxuICAgOTpcXHRcXHRfX3U4XFx0XFx0aWZhX2ZhbWlseTtcXG4gIDEwOlxcdFxcdF9fdThcXHRcXHRpZmFfcHJlZml4bGVuO1xcdC8qIFRoZSBwcmVmaXggbGVuZ3RoXFx0XFx0Ki9cXG4gIDExOlxcdFxcdF9fdThcXHRcXHRpZmFfZmxhZ3M7XFx0LyogRmxhZ3NcXHRcXHRcXHQqL1xcbiAgMTI6XFx0XFx0X191OFxcdFxcdGlmYV9zY29wZTtcXHQvKiBBZGRyZXNzIHNjb3BlXFx0XFx0Ki9cXG4gIDEzOlxcdFxcdF9fdTMyXFx0XFx0aWZhX2luZGV4O1xcdC8qIExpbmsgaW5kZXhcXHRcXHRcXHQqL1xcbiAgMTQ6XFx0fTtcXG4gIDE1OlxcdFxcbiAgMTY6XFx0LypcXG4gIDE3OlxcdCAqIEltcG9ydGFudCBjb21tZW50OlxcbiAgMTg6XFx0ICogSUZBX0FERFJFU1MgaXMgcHJlZml4IGFkZHJlc3MsIHJhdGhlciB0aGFuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzLlxcbiAgMTk6XFx0ICogSXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBmb3Igbm9ybWFsbHkgY29uZmlndXJlZCBicm9hZGNhc3QgaW50ZXJmYWNlcyxcXG4gIDIwOlxcdCAqIGJ1dCBmb3IgcG9pbnQtdG8tcG9pbnQgSUZBX0FERFJFU1MgaXMgREVTVElOQVRJT04gYWRkcmVzcyxcXG4gIDIxOlxcdCAqIGxvY2FsIGFkZHJlc3MgaXMgc3VwcGxpZWQgaW4gSUZBX0xPQ0FMIGF0dHJpYnV0ZS5cXG4gIDIyOlxcdCAqXFxuICAyMzpcXHQgKiBJRkFfRkxBR1MgaXMgYSB1MzIgYXR0cmlidXRlIHRoYXQgZXh0ZW5kcyB0aGUgdTggZmllbGQgaWZhX2ZsYWdzLlxcbiAgMjQ6XFx0ICogSWYgcHJlc2VudCwgdGhlIHZhbHVlIGZyb20gc3RydWN0IGlmYWRkcm1zZyB3aWxsIGJlIGlnbm9yZWQuXFxuICAyNTpcXHQgKi9cXG4gIDI2OlxcdGVudW0ge1xcbiAgMjc6XFx0XFx0SUZBX1VOU1BFQyxcXG4gIDI4OlxcdFxcdElGQV9BRERSRVNTLFxcbiAgMjk6XFx0XFx0SUZBX0xPQ0FMLFxcbiAgMzA6XFx0XFx0SUZBX0xBQkVMLFxcbiAgMzE6XFx0XFx0SUZBX0JST0FEQ0FTVCxcXG4gIDMyOlxcdFxcdElGQV9BTllDQVNULFxcbiAgMzM6XFx0XFx0SUZBX0NBQ0hFSU5GTyxcXG4gIDM0OlxcdFxcdElGQV9NVUxUSUNBU1QsXFxuICAzNTpcXHRcXHRJRkFfRkxBR1MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjEzLjM3NjIzNjY3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI2MjA4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaWZhZGRybXNnIFN0cnVjdHVyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIGl0J3MgZ290IHRoZSBzdGFuZGFyZCBuZXR3b3JrIGFkZHJlc3MgZmFtaWx5IChgaWZhX2ZhbWlseWApLCBwcmVmaXggbGVuZ3RoIChgaWZhX3ByZWZpeGxlbmApLCBmbGFncyAoYGlmYV9mbGFnc2ApLCBzY29wZSAoYGlmYV9zY29wZWApLCBhbmQgaW50ZXJmYWNlIGluZGV4IChgaWZhX2luZGV4YCkuIEdvb2QsIGdvb2QuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIHRvdGFsIHNpemUgaXMgOCBieXRlcyDigJMgbmljZSBhbmQgY2xlYW4sIG5vIHBhZGRpbmcgdG8gd29ycnkgYWJvdXQuIEFuZCBpdCBsb29rcyBsaWtlIGFsbCB0aGUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIGBpZmFfZmFtaWx5YCB0byBgQUZfUEFDS0VUYCwgcHJlZml4IGxlbmd0aCBzZXQgdG8gMCwgYGlmYV9mbGFnc2AgZ2V0cyB0aGUgcmF3IGlucHV0LiBTY29wZSBpcyBzZXQgdG8gYFJUX1NDT1BFX0xJTktgLCBhbmQgdGhlIGluZGV4IGlzIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UncyBpbmRleCB2YWx1ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGFkZHJlc3MgcGxheXMgaW50byB0aGlzLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBgaGEtXHUwMDNlYWRkcmAgYW5kIGBkZXYtXHUwMDNlYWRkcl9sZW5gLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmcmFtaW5nIHRoaXMgZGF0YS4gQnV0IHdoZXJlIGV4YWN0bHkgZG9lcyBgaGEtXHUwMDNlYWRkcmAgZ2V0IGl0cyB2YWx1ZXM/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExvb2tzIGxpa2UgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIGhvbGQgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjE2LjAwMjQ0ODc1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4MzI1MjAsIkVycm9yIjoiYmFkIGV4cHJlc3Npb246IGZhdGFsOiAtZSBvcHRpb24sICdzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgeyc6IFVubWF0Y2hlZCBcXHsiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IG5ldGRldl9od19hZGRyIHsnOiBVbm1hdGNoZWQgXFxcXHtcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MTYuMDMyMzA5Nzk3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMzE3NTU1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEZXZpY2UgU3RydWN0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGRlZmluaXRpb24uIFRoYXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpbmZyYXN0cnVjdHVyZSwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGtlcm5lbCBoZWFkZXJzLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IG5ldHdvcmtpbmctcmVsYXRlZCBkZWZpbml0aW9ucyBhcmUgdXN1YWxseSB0dWNrZWQgYXdheSBpbiB0aGUgYGluY2x1ZGUvbGludXhgIGRpcmVjdG9yeS4gTm93LCB3aGVyZSB3b3VsZCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBzdHJ1Y3R1cmUgcmVzaWRlPyBMb2dpY2FsbHksIGl04oCZbGwgYmUgaW4gYG5ldGRldmljZS5oYC4gSSdsbCBydW4gYSBxdWljayBzZWFyY2ggZm9yIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzIGFib3V0IGl0cyB1c2FnZSB3aXRoaW4gdGhlIGtlcm5lbCBuZXR3b3JraW5nIGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdHJ1Y3R1cmUncyBtZW1iZXJzLCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zLCBhbmQgcGVyaGFwcyBzb21lIGluc2lnaHRmdWwgY29tbWVudHMgb24gaG93IGl0J3MgdXNlZCB0byBtYW5hZ2UgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciBuZXR3b3JrIGludGVyZmFjZXMuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjE5LjM2NDA2OTUxOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODA2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGRldl9od19hZGRyXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIzNT1zdHJ1Y3Qgc2tfYnVmZjtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzNzpzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxOToxOS40MTE4NTQ3NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NjY3ODM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEZXZpY2UgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjM3LiBJJ20gaG9waW5nIHRoYXQgcGFydGljdWxhciBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgSSdtIGxvb2tpbmcgZm9yIHJlZ2FyZGluZyB0aGUgYmFzaWMgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIG9yIHBlcmhhcHMgdGhlIGluaXRpYWwgc2V0dXAgcm91dGluZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZWxlbWVudHMgbGlrZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHF1ZXVlcywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHBvaW50ZXJzLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxOToyMS43MDg1Mzc0ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdHN0cnVjdCBza19idWZmO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xcbiAyMzg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDIzOTpcXHRcXHRzdHJ1Y3QgcmJfbm9kZVxcdFxcdG5vZGU7XFxuIDI0MDpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0YWRkcltNQVhfQUREUl9MRU5dO1xcbiAyNDE6XFx0XFx0dW5zaWduZWQgY2hhclxcdFxcdHR5cGU7XFxuIDI0MjpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXFx0XFx0MVxcbiAyNDM6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1NBTlxcdFxcdDJcXG4gMjQ0OlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9VTklDQVNUXFx0M1xcbiAyNDU6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVFxcdDRcXG4gMjQ2OlxcdFxcdGJvb2xcXHRcXHRcXHRnbG9iYWxfdXNlO1xcbiAyNDc6XFx0XFx0aW50XFx0XFx0XFx0c3luY19jbnQ7XFxuIDI0ODpcXHRcXHRpbnRcXHRcXHRcXHRyZWZjb3VudDtcXG4gMjQ5OlxcdFxcdGludFxcdFxcdFxcdHN5bmNlZDtcXG4gMjUwOlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdV9oZWFkO1xcbiAyNTE6XFx0fTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3Qge1xcbiAyNTQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDI1NTpcXHRcXHRpbnRcXHRcXHRcXHRjb3VudDtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0LyogQXV4aWxpYXJ5IHRyZWUgZm9yIGZhc3RlciBsb29rdXAgb24gYWRkaXRpb24gYW5kIGRlbGV0aW9uICovXFxuIDI1ODpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdHRyZWU7XFxuIDI1OTpcXHR9O1xcbiAyNjA6XFx0XFxuIDI2MTpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgKChsKS1cXHUwMDNlY291bnQpXFxuIDI2MjpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkobCkgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgPT0gMClcXG4gMjYzOlxcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcXFxcbiAyNjQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgXFx1MDAyNihsKS1cXHUwMDNlbGlzdCwgbGlzdClcXG4gMjY1OlxcdFxcbiAyNjY6XFx0I2RlZmluZSBuZXRkZXZfdWNfY291bnQoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI2NzpcXHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG4gMjY4OlxcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXFxcXFxcbiAyNjk6XFx0XFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MjEuNzA4ODY2OTA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODkyMzA2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUMgQWRkcmVzcyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhZGRpdGlvbiBvZiBgaGFgIOKAkyBsaWtlbHkgYSBoYXJkd2FyZSBhZGRyZXNzIOKAkyBpbnRvIGBkZXYtXHUwMDNlbWNgLCB3aGljaCBJJ20gYXNzdW1pbmcgcmVmZXJzIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0IGZvciBhIG5ldHdvcmsgZGV2aWNlIChgZGV2YCkuIExldCdzIGdldCBjcmFja2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdoZXJlIGRldmljZSBhZGRyZXNzIG1hbmFnZW1lbnQgaXMgaGFuZGxlZC4gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiB0aGlzIGxvZ2ljIGJlZm9yZSwgcHJvYmFibHkgc29tZXdoZXJlIGluIGBuZXQvY29yZS9gLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSBpbnRvIGBkZXZfYWRkcl9saXN0cy5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nLiBXaXRoaW4gdGhhdCBmaWxlLCBJJ2xsIHN0YXJ0IHdpdGggYSBmZXcgc2VhcmNoIHF1ZXJpZXMsIGFpbWluZyBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGlzIHByb2Nlc3MuIEknbSB0aGlua2luZyBJJ2xsIHRyeSBzZWFyY2hpbmcgZm9yIGBkZXZfbWNfYWRkYCBmaXJzdCwgYnV0IEkgbWlnaHQgYWxzbyBjYXN0IGEgd2lkZXIgbmV0IHdpdGggc29tZXRoaW5nIGxpa2UgYF9faHdfYWRkcl9hZGRgIG9yIGFueXRoaW5nIHRoYXQgc3VnZ2VzdHMgaGFyZHdhcmUgYWRkcmVzcyBhZGRpdGlvbi4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3cgbGV2ZWwgbWFuYWdlbWVudC4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGZhaXJseSBzdHJhaWdodCBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MjQuMTk4MTAwNzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mzg2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjM6c3RhdGljIGludCBfX2h3X2FkZHJfaW5zZXJ0KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqbmV3LCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUyPXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MzpfX2h3X2FkZHJfY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU0LVxcdFxcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3NTpzdGF0aWMgaW50IF9faHdfYWRkcl9hZGRfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03Ni1cXHRcXHRcXHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTktXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjA6XFx0aGEgPSBfX2h3X2FkZHJfY3JlYXRlKGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGdsb2JhbCwgc3luYyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjEtXFx0aWYgKCFoYSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3OlxcdHJldHVybiBfX2h3X2FkZHJfYWRkX2V4KGxpc3QsIGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGZhbHNlLCBmYWxzZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cXHRcXHRcXHRcXHQwLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0MC1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE0MTpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZW50cnkoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIGJvb2wgZ2xvYmFsLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNjctXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNjg6c3RhdGljIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqX19od19hZGRyX2xvb2t1cChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE2OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xOTMtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxOTQ6c3RhdGljIGludCBfX2h3X2FkZHJfZGVsX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTk1LVxcdFxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE5Ny17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxOTg6XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYSA9IF9faHdfYWRkcl9sb29rdXAobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xOTktXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwMS1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIwMjpcXHRyZXR1cm4gX19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZ2xvYmFsLCBzeW5jKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwMy19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMDQtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMDU6c3RhdGljIGludCBfX2h3X2FkZHJfZGVsKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjA2LVxcdFxcdFxcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwOC17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMDk6XFx0cmV0dXJuIF9faHdfYWRkcl9kZWxfZXgobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxMC19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTEtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMTI6c3RhdGljIGludCBfX2h3X2FkZHJfc3luY19vbmUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnRvX2xpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIxODpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KHRvX2xpc3QsIGhhLVxcdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXFx1MDAzZXR5cGUsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTktXFx0XFx0XFx0ICAgICAgIGZhbHNlLCB0cnVlLCBoYS1cXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjMwLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjMxOnN0YXRpYyB2b2lkIF9faHdfYWRkcl91bnN5bmNfb25lKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjMyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMzctXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMzg6XFx0ZXJyID0gX19od19hZGRyX2RlbF9leCh0b19saXN0LCBoYS1cXHUwMDNlYWRkciwgYWRkcl9sZW4sIGhhLVxcdTAwM2V0eXBlLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjM5LVxcdFxcdFxcdCAgICAgICBmYWxzZSwgdHJ1ZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0My1cXHQvKiBhZGRyZXNzIG9uIGZyb20gbGlzdCBpcyBub3QgbWFya2VkIHN5bmNlZCAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjQ0OlxcdF9faHdfYWRkcl9kZWxfZW50cnkoZnJvbV9saXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0NS19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNDYtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNDc6aW50IF9faHdfYWRkcl9zeW5jX211bHRpcGxlKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjQ4LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNTUtXFx0XFx0aWYgKGhhLVxcdTAwM2VzeW5jX2NudCA9PSBoYS1cXHUwMDNlcmVmY291bnQpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjI1NjpcXHRcXHRcXHRfX2h3X2FkZHJfdW5zeW5jX29uZSh0b19saXN0LCBmcm9tX2xpc3QsIGhhLCBhZGRyX2xlbik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNTctXFx0XFx0fSBlbHNlIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjI1ODpcXHRcXHRcXHRlcnIgPSBfX2h3X2FkZHJfc3luY19vbmUodG9fbGlzdCwgaGEsIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI1OS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjQtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjY1OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3N5bmNfbXVsdGlwbGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjY2LVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjktICogc3luYyBhZGRyZXNzZXMgdG8gbW9yZSB0aGVuIDEgZGVzdGluYXRpb24sIHlvdSBuZWVkIHRvIHVzZVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjcwOiAqIF9faHdfYWRkcl9zeW5jX211bHRpcGxlKCkuXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNzEtICovXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNzI6aW50IF9faHdfYWRkcl9zeW5jKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjczLVxcdFxcdCAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpmcm9tX2xpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4MC1cXHRcXHRpZiAoIWhhLVxcdTAwM2VzeW5jX2NudCkge1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjgxOlxcdFxcdFxcdGVyciA9IF9faHdfYWRkcl9zeW5jX29uZSh0b19saXN0LCBoYSwgYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjgyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4NC1cXHRcXHR9IGVsc2UgaWYgKGhhLVxcdTAwM2VyZWZjb3VudCA9PSAxKVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Mjg1OlxcdFxcdFxcdF9faHdfYWRkcl91bnN5bmNfb25lKHRvX2xpc3QsIGZyb21fbGlzdCwgaGEsIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4Ni1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4OC19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyODk6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfc3luYyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yOTAtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyOTE6dm9pZCBfX2h3X2FkZHJfdW5zeW5jKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjkyLVxcdFxcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpmcm9tX2xpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI5OC1cXHRcXHRpZiAoaGEtXFx1MDAzZXN5bmNfY250KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Mjk5OlxcdFxcdFxcdF9faHdfYWRkcl91bnN5bmNfb25lKHRvX2xpc3QsIGZyb21fbGlzdCwgaGEsIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMwMC1cXHR9XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDEtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzAyOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luYyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDMtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDQtLyoqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMDU6ICogIF9faHdfYWRkcl9zeW5jX2RldiAtIFN5bmNocm9uaXplIGRldmljZSdzIG11bHRpY2FzdCBsaXN0XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDYtICogIEBsaXN0OiBhZGRyZXNzIGxpc3QgdG8gc3luY2hyb25pemVcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzE2LSAqKi9cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjMxNzppbnQgX19od19hZGRyX3N5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzE4LVxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMzUtXFx0XFx0aGEtXFx1MDAzZXN5bmNfY250LS07XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMzY6XFx0XFx0X19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMzNy1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1My19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozNTQ6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfc3luY19kZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU1LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU2LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzU3OiAqICBfX2h3X2FkZHJfcmVmX3N5bmNfZGV2IC0gU3luY2hyb25pemUgZGV2aWNlJ3MgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCB0YWtpbmdcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1OC0gKiAgaW50byBhY2NvdW50IHJlZmVyZW5jZXNcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzcxLSAqKi9cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjM3MjppbnQgX19od19hZGRyX3JlZl9zeW5jX2RldihzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM3My1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zOTQtXFx0XFx0aGEtXFx1MDAzZXN5bmNfY250ID0gcmVmX2NudDtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjM5NTpcXHRcXHRfX2h3X2FkZHJfZGVsX2VudHJ5KGxpc3QsIGhhLCBmYWxzZSwgZmFsc2UpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzk2LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE0LX1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQxNTpFWFBPUlRfU1lNQk9MKF9faHdfYWRkcl9yZWZfc3luY19kZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE2LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE3LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDE4OiAqICBfX2h3X2FkZHJfcmVmX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBhbmQgcmVmZXJlbmNlcyBvblxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE5LSAqICBpdCBmcm9tIGRldmljZVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MjQtICogIFJlbW92ZSBhbGwgYWRkcmVzc2VzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGJ5XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0MjU6ICogIF9faHdfYWRkcl9yZWZfc3luY19kZXYoKS4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGVcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQyNi0gKiAgbmRvX3N0b3Agb3IgbmRvX29wZW4gZnVuY3Rpb25zIG9uIGRldmljZXMgdGhhdCByZXF1aXJlIGV4cGxpY2l0IGFkZHJlc3MgKG9yXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQzMC0gKiovXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0MzE6dm9pZCBfX2h3X2FkZHJfcmVmX3Vuc3luY19kZXYoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MzItXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDQ3LVxcdFxcdGhhLVxcdTAwM2VzeW5jX2NudCA9IDA7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0NDg6XFx0XFx0X19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ0OS1cXHR9XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NTAtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDUxOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3JlZl91bnN5bmNfZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ1Mi1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ1My0vKipcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ1NDogKiAgX19od19hZGRyX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBmcm9tIGRldmljZVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDU1LSAqICBAbGlzdDogYWRkcmVzcyBsaXN0IHRvIHJlbW92ZSBzeW5jaHJvbml6ZWQgYWRkcmVzc2VzIGZyb21cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDU4LSAqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0NTk6ICogIFJlbW92ZSBhbGwgYWRkcmVzc2VzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGJ5IF9faHdfYWRkcl9zeW5jX2RldigpLlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDYwLSAqICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBuZG9fc3RvcCBvciBuZG9fb3Blblxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NjQtICoqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDY1OnZvaWQgX19od19hZGRyX3Vuc3luY19kZXYoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NjYtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00ODAtXFx0XFx0aGEtXFx1MDAzZXN5bmNfY250LS07XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0ODE6XFx0XFx0X19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ4Mi1cXHR9XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00ODMtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDg0OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luY19kZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDg1LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDg2OnZvaWQgX19od19hZGRyX2ZsdXNoKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDg3LXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDk2LX1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ5NzpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKF9faHdfYWRkcl9mbHVzaCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00OTgtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0OTk6dm9pZCBfX2h3X2FkZHJfaW5pdChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdClcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwMC17XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwNC19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MDU6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfaW5pdCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MDYtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MDc6c3RhdGljIHZvaWQgX19od19hZGRyX3NwbGljZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZHN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTA4LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnNyYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTE2LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTE3OiAqICBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdCAtIGNyZWF0ZSBhIHNuYXBzaG90IGNvcHkgb2YgYW4gYWRkcmVzcyBsaXN0XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MTg6ICogIEBzbmFwOiBkZXN0aW5hdGlvbiBzbmFwc2hvdCBsaXN0IChuZWVkcyB0byBiZSBfX2h3X2FkZHJfaW5pdC1pbml0aWFsaXplZClcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUxOS0gKiAgQGxpc3Q6IHNvdXJjZSBhZGRyZXNzIGxpc3QgdG8gc25hcHNob3RcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTI3LSAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTI4OmludCBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqc25hcCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUyOS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU0NC1cXHRcXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTQ1OlxcdFxcdFxcdGVudHJ5ID0gX19od19hZGRyX2NyZWF0ZShoYS1cXHUwMDNlYWRkciwgYWRkcl9sZW4sIGhhLVxcdTAwM2V0eXBlLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTQ2LVxcdFxcdFxcdFxcdFxcdFxcdCBmYWxzZSwgZmFsc2UpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTQ3LVxcdFxcdFxcdGlmICghZW50cnkpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU0ODpcXHRcXHRcXHRcXHRfX2h3X2FkZHJfZmx1c2goc25hcCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NDktXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU1NS1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNuYXAtXFx1MDAzZWxpc3QpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTU2OlxcdFxcdF9faHdfYWRkcl9pbnNlcnQoc25hcCwgZW50cnksIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU1Ny1cXHRcXHRzbmFwLVxcdTAwM2Vjb3VudCsrO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NjEtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTYyOkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoX19od19hZGRyX2xpc3Rfc25hcHNob3QpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTYzLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTY0LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTY1OiAqICBfX2h3X2FkZHJfbGlzdF9yZWNvbmNpbGUgLSBzeW5jIHNuYXBzaG90IGNoYW5nZXMgYmFjayBhbmQgZnJlZSBzbmFwc2hvdHNcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2Ni0gKiAgQHJlYWxfbGlzdDogdGhlIHJlYWwgYWRkcmVzcyBsaXN0IHRvIHVwZGF0ZVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTY3OiAqICBAd29yazogdGhlIHdvcmtpbmcgc25hcHNob3QgKG1vZGlmaWVkIGJ5IGRyaXZlciB2aWEgX19od19hZGRyX3N5bmNfZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTY4LSAqICBAcmVmOiB0aGUgcmVmZXJlbmNlIHNuYXBzaG90ICh1bnRvdWNoZWQgY29weSBvZiBvcmlnaW5hbCBzdGF0ZSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTc2LSAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTc3OnZvaWQgX19od19hZGRyX2xpc3RfcmVjb25jaWxlKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpyZWFsX2xpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NzgtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKndvcmssXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU4NS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmX2hhLCB0bXAsIFxcdTAwMjZyZWYtXFx1MDAzZWxpc3QsIGxpc3QpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU4NjpcXHRcXHR3b3JrX2hhID0gX19od19hZGRyX2xvb2t1cCh3b3JrLCByZWZfaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTg3LVxcdFxcdFxcdFxcdFxcdCAgIHJlZl9oYS1cXHUwMDNldHlwZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU5NS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU5NjpcXHRcXHRyZWFsX2hhID0gX19od19hZGRyX2xvb2t1cChyZWFsX2xpc3QsIHJlZl9oYS1cXHUwMDNlYWRkciwgYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01OTctXFx0XFx0XFx0XFx0XFx0ICAgcmVmX2hhLVxcdTAwM2V0eXBlKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjExLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnJlYWxfbGlzdC1cXHUwMDNlbGlzdCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2MTI6XFx0XFx0XFx0XFx0X19od19hZGRyX2luc2VydChyZWFsX2xpc3QsIHJlZl9oYSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTYxMy1cXHRcXHRcXHRcXHRcXHRcXHQgYWRkcl9sZW4pO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02MjgtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Mjk6XFx0X19od19hZGRyX3NwbGljZShjYWNoZSwgd29yayk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2MzA6XFx0X19od19hZGRyX3NwbGljZShjYWNoZSwgcmVmKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTYzMS19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2MzI6RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChfX2h3X2FkZHJfbGlzdF9yZWNvbmNpbGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjMzLVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02NjE9dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjUtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2NjY6XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjctXFx0ZGV2LVxcdTAwM2VkZXZfYWRkciA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODYtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2ODc6XFx0X19od19hZGRyX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY4OC1cXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjkwLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcwMz12b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTMtXFx0bWVtY3B5KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRyX3NoYWRvd1tvZmZzZXRdLCBhZGRyLCBsZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzE0OlxcdFdBUk5fT04oX19od19hZGRyX2luc2VydChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGhhLCBkZXYtXFx1MDAzZWFkZHJfbGVuKSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTUtfVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz03Mjk9aW50IGRldl9hZGRyX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXFx0XFx0cmV0dXJuIGVycjtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgYWRkcl90eXBlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0MC1cXHRpZiAoIWVycilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzU3PWludCBkZXZfYWRkcl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzc0LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzc1OlxcdGVyciA9IF9faHdfYWRkcl9kZWwoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzc2LVxcdFxcdFxcdCAgICBhZGRyX3R5cGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz03OTI9aW50IGRldl91Y19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3OTc6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2V1YywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5OC1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9VTklDQVNULCB0cnVlLCBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTgxOS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjgyMDpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04Mzc9aW50IGRldl91Y19kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODQxLVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODQyOlxcdGVyciA9IF9faHdfYWRkcl9kZWwoXFx1MDAyNmRldi1cXHUwMDNldWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04NDMtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTg2ND1pbnQgZGV2X3VjX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODcxLVxcdG5ldGlmX2FkZHJfbG9jayh0byk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo4NzI6XFx0ZXJyID0gX19od19hZGRyX3N5bmMoXFx1MDAyNnRvLVxcdTAwM2V1YywgXFx1MDAyNmZyb20tXFx1MDAzZXVjLCB0by1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODczLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04OTQ9aW50IGRldl91Y19zeW5jX211bHRpcGxlKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkwMS1cXHRuZXRpZl9hZGRyX2xvY2sodG8pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTAyOlxcdGVyciA9IF9faHdfYWRkcl9zeW5jX211bHRpcGxlKFxcdTAwMjZ0by1cXHUwMDNldWMsIFxcdTAwMjZmcm9tLVxcdTAwM2V1YywgdG8tXFx1MDAzZWFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkwMy1cXHRpZiAoIWVycilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTE5PXZvaWQgZGV2X3VjX3Vuc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05MzQtXFx0bmV0aWZfYWRkcl9sb2NrKHRvKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjkzNTpcXHRfX2h3X2FkZHJfdW5zeW5jKFxcdTAwMjZ0by1cXHUwMDNldWMsIFxcdTAwMjZmcm9tLVxcdTAwM2V1YywgdG8tXFx1MDAzZWFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkzNi1cXHRfX2Rldl9zZXRfcnhfbW9kZSh0byk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk0OD12b2lkIGRldl91Y19mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NTAtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5NTE6XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZXVjKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk1Mi1cXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05NjI9dm9pZCBkZXZfdWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTYzLXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk2NDpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V1Yyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NjUtfVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05Nzc9aW50IGRldl9tY19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODEtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4My1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05OTI9c3RhdGljIGludCBfX2Rldl9tY19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTk4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXFx1MDAyNmRldi1cXHUwMDNlbWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTktXFx0XFx0XFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCBnbG9iYWwsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMDMzPXN0YXRpYyBpbnQgX19kZXZfbWNfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEwMzgtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMDM5OlxcdGVyciA9IF9faHdfYWRkcl9kZWxfZXgoXFx1MDAyNmRldi1cXHUwMDNlbWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDQwLVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgZ2xvYmFsLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEwODc9aW50IGRldl9tY19zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEwOTQtXFx0bmV0aWZfYWRkcl9sb2NrKHRvKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEwOTU6XFx0ZXJyID0gX19od19hZGRyX3N5bmMoXFx1MDAyNnRvLVxcdTAwM2VtYywgXFx1MDAyNmZyb20tXFx1MDAzZW1jLCB0by1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTA5Ni1cXHRpZiAoIWVycilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTExNz1pbnQgZGV2X21jX3N5bmNfbXVsdGlwbGUoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTEyNC1cXHRuZXRpZl9hZGRyX2xvY2sodG8pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTEyNTpcXHRlcnIgPSBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShcXHUwMDI2dG8tXFx1MDAzZW1jLCBcXHUwMDI2ZnJvbS1cXHUwMDNlbWMsIHRvLVxcdTAwM2VhZGRyX2xlbik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTI2LVxcdGlmICghZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTQyPXZvaWQgZGV2X21jX3Vuc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTQ5LVxcdG5ldGlmX2FkZHJfbG9jayh0byk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTUwOlxcdF9faHdfYWRkcl91bnN5bmMoXFx1MDAyNnRvLVxcdTAwM2VtYywgXFx1MDAyNmZyb20tXFx1MDAzZW1jLCB0by1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE1MS1cXHRfX2Rldl9zZXRfcnhfbW9kZSh0byk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTExNjM9dm9pZCBkZXZfbWNfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE2NS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNjY6XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZW1jKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExNjctXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTE3Nz12b2lkIGRldl9tY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTc4LXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNzk6XFx0X19od19hZGRyX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlbWMpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE4MC19XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTExODM9c3RhdGljIGludCBuZXRpZl9hZGRyX2xpc3RzX3NuYXBzaG90KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTAtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTkxOlxcdGVyciA9IF9faHdfYWRkcl9saXN0X3NuYXBzaG90KHVjX3NuYXAsIFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5Mi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5My1cXHRpZiAoIWVycilcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExOTQ6XFx0XFx0ZXJyID0gX19od19hZGRyX2xpc3Rfc25hcHNob3QodWNfcmVmLCBcXHUwMDI2ZGV2LVxcdTAwM2V1YywgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTYtXFx0aWYgKCFlcnIpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTk3OlxcdFxcdGVyciA9IF9faHdfYWRkcl9saXN0X3NuYXBzaG90KG1jX3NuYXAsIFxcdTAwMjZkZXYtXFx1MDAzZW1jLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5OC1cXHRcXHRcXHRcXHRcXHQgICAgICBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjAwLVxcdGlmICghZXJyKVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwMTpcXHRcXHRlcnIgPSBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdChtY19yZWYsIFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIwMi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjA0LVxcdGlmIChlcnIpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMDU6XFx0XFx0X19od19hZGRyX2ZsdXNoKHVjX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwNjpcXHRcXHRfX2h3X2FkZHJfZmx1c2godWNfcmVmKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMDc6XFx0XFx0X19od19hZGRyX2ZsdXNoKG1jX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIwOC1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEyMTM9c3RhdGljIHZvaWQgbmV0aWZfYWRkcl9saXN0c19yZWNvbmNpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIxOC17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjE5OlxcdF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShcXHUwMDI2ZGV2LVxcdTAwM2V1YywgdWNfc25hcCwgdWNfcmVmLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIyMC1cXHRcXHRcXHRcXHQgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMjE6XFx0X19od19hZGRyX2xpc3RfcmVjb25jaWxlKFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBtY19zbmFwLCBtY19yZWYsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjIyLVxcdFxcdFxcdFxcdCBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjc3PXZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI4Ni1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyODc6XFx0X19od19hZGRyX2luaXQoXFx1MDAyNnVjX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI4ODpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2bWNfc25hcCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjg5OlxcdF9faHdfYWRkcl9pbml0KFxcdTAwMjZ1Y19yZWYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5MDpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2bWNfcmVmKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTEtXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNDg9dm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNDkte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM1MDpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM1MS1cXHR0aW1lcl9zZXR1cChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX3JldHJ5X3RpbWVyLCBuZXRpZl9yeF9tb2RlX3JldHJ5LCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MjQuMjQ1NDkyNDE5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODg5OTk1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBfX2h3X2FkZHJfY3JlYXRlYCBpbiBgZGV2X2FkZHJfbGlzdHMuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX19od19hZGRyX2NyZWF0ZWAgd2l0aGluIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYC4gIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcywgc28gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBsaW5lcyA1MC03NSBvZiB0aGUgc291cmNlIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGRvZXMgd2l0aGluIHRoaXMgZmlsZSwgYXMgYGRldl9hZGRyX2xpc3RzLmNgIGlzIGltcG9ydGFudCBmb3IgaGFuZGxpbmcgbmV0d29yayBkZXZpY2UgYWRkcmVzcyBsaXN0cy4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIGxpbmVzIGJlY2F1c2UgdGhleSBsaWtlbHkgY29udGFpbiB0aGUgY29yZSBsb2dpYyBvciBpbml0aWFsIHNldHVwIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzLCBhbmQgSSBjYW4gcXVpY2tseSBncm9rIHRoZSBkZXRhaWxzIHRvIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjI2LjQzNDQ5ODYwOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHR9XFxuICA1MTpcXHRcXG4gIDUyOlxcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXFxuICA1MzpcXHRfX2h3X2FkZHJfY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4gIDU0OlxcdFxcdFxcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcXG4gIDU1OlxcdHtcXG4gIDU2OlxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuICA1NzpcXHRcXHRpbnQgYWxsb2Nfc2l6ZTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0YWxsb2Nfc2l6ZSA9IHNpemVvZigqaGEpO1xcbiAgNjA6XFx0XFx0aWYgKGFsbG9jX3NpemUgXFx1MDAzYyBMMV9DQUNIRV9CWVRFUylcXG4gIDYxOlxcdFxcdFxcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcXG4gIDYyOlxcdFxcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcXG4gIDYzOlxcdFxcdGlmICghaGEpXFxuICA2NDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDY1OlxcdFxcdG1lbWNweShoYS1cXHUwMDNlYWRkciwgYWRkciwgYWRkcl9sZW4pO1xcbiAgNjY6XFx0XFx0aGEtXFx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XFxuICA2NzpcXHRcXHRoYS1cXHUwMDNlcmVmY291bnQgPSAxO1xcbiAgNjg6XFx0XFx0aGEtXFx1MDAzZWdsb2JhbF91c2UgPSBnbG9iYWw7XFxuICA2OTpcXHRcXHRoYS1cXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xcbiAgNzA6XFx0XFx0aGEtXFx1MDAzZXN5bmNfY250ID0gMDtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cmV0dXJuIGhhO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjI2LjQzNDYyODA1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTc0MTUxOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY29weWluZyB0aGUgYWRkcmVzcyBkYXRhIGFuZCBob3cgaXQncyB0aGVuIHBsYWNlZCBpbnRvIGEgbmV0bGluayBtZXNzYWdlLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGJvaWxzIGRvd24gdG8gdGhpczogYF9faHdfYWRkcl9jcmVhdGVgIHVzZXMgYG1lbWNweWAgdG8gY29weSBgYWRkcl9sZW5gIGJ5dGVzIGludG8gYGhhLVx1MDAzZWFkZHJgLCBhbmQgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZW4sIGluIGBydG5sX2ZpbGxfbWNhZGRyYCwgd2UgdXNlIGBubGFfcHV0YCB0byBwbGFjZSB0aGUgZGF0YSBpbnRvIGEgbmV0bGluayBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgSUZBX01VTFRJQ0FTVGAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBubGFfcHV0YCB0YWtlcyBgZGV2LVx1MDAzZWFkZHJfbGVuYCBhcyB0aGUgbGVuZ3RoLCBhbmQsIHNpbmNlIGBhZGRyX2xlbmAgZXF1YWxzIGBkZXYtXHUwMDNlYWRkcl9sZW5gLCBhbGwgc2hvdWxkIGJlIHdlbGwuIEJ1dCB3YWl0LCBJIHJlY2FsbCBgbmxhX3B1dGAncyBiZWhhdmlvciBpcyB0byB6ZXJvLXBhZCBhbnkgYWxpZ25tZW50IGJ5dGVzLiBTbyB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGJ5dGVzIGlzIHdyaXR0ZW4sIHdpdGggdGhlIHJlc3QgcGFkZGVkIHdpdGggMC5cblxuTm93LCBJJ20gY2hlY2tpbmcgYHJ0bmxfZHVtcF9tY2FkZHJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGR1bXBpbmcgcHJvY2VzcyB3b3JrcyB0byBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGlzY3JlcGFuY2llcy4gSSBzZWUgdGhhdCBgcnRubF9kdW1wX21jYWRkcmAgdXNlcyBhIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3R1cmUsIGBjYmAsIHdoaWNoIGNvbnRhaW5zIGNvbnRleHQgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbnRleHQgaXMgdXNlZCBhbmQgaWYgYW55IGluaXRpYWxpemF0aW9uIGVycm9ycyBhcmUgYmVpbmcgaW50cm9kdWNlZC5cblxuQWhhISBgY2ItXHUwMDNlY3R4YCBpcyB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgY29yZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGR1bXAsIGFuZCBgY3R4LVx1MDAzZWlmaW5kZXhgIGFuZCBgY3R4LVx1MDAzZWFkZHJfaWR4YCBhcmUgdXNlZCB0byB0cmFjayB0aGUgcHJvZ3Jlc3MuIFNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBpdGVyYXRpb24gdGVjaG5pcXVlIGZvciBkdW1wcyBhbmQgZG9lc24ndCBkaXJlY3RseSByYWlzZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHRoZSBtZW1vcnkgY29weS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgZm9yX2VhY2hfbmV0ZGV2X2R1bXBgIGxvb3Agd29ya3Mgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk4MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjMwLjQwODc4MjIyMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3ODU0MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvcl9lYWNoX25ldGRldl9kdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXQtcHJvY2ZzLmM9MTA9c3RhdGljIHZvaWQgKmRldl9zZXFfZnJvbV9pbmRleChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTQtXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjE1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHNlcV9maWxlX25ldChzZXEpLCBkZXYsIGlmaW5kZXgpIHtcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTYtXFx0XFx0KnBvcyA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM9ODE9bmV0ZGV2X25sX3BhZ2VfcG9vbF9nZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jLTk4LVxcdG11dGV4X2xvY2soXFx1MDAyNnBhZ2VfcG9vbHNfbG9jayk7XFxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYzo5OTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIG5ldGRldiwgc3RhdGUtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jLTEwMC1cXHRcXHQvKiBFaXRoZXIgdGhlIHByb3ZpZGVkIGlmaW5kZXggZG9lc24ndCBleGlzdCBvciBkb25lIGR1bXBpbmcgKi9cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1NDQ9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MTYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjYxNzpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MTgtXFx0XFx0aWYgKGxpbmtfZHVtcF9maWx0ZXJlZChkZXYsIG1hc3Rlcl9pZHgsIGtpbmRfb3BzKSlcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ2ODU9c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTgtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDcxOTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzIwLVxcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMwNz1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMzNi1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1MzM3OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzM4LVxcdFxcdGlmIChicnBvcnRfaWR4IFxcdTAwMjZcXHUwMDI2IChkZXYtXFx1MDAzZWlmaW5kZXggIT0gYnJwb3J0X2lkeCkpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz02NjQwPXN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NzEtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjY3MjpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjY3My1cXHRcXHRlcnIgPSBydG5sX2ZpbGxfc3RhdHNpbmZvKHNrYiwgZGV2LCBSVE1fTkVXU1RBVFMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjMwLjczNjY0MDk0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mjg1OTY2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkV4YW1pbmluZyBydG5ldGxpbmsuYydzIFVzYWdlIG9mICdjdHgnKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZywgd2hlcmUgYXJlIHdlIHNlZWluZyBgY3R4YCBhY3R1YWxseSBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIGBydG5sX2R1bXBfaWZpbmZvYCBmdW5jdGlvbiBhbmQgb3RoZXIgcmVsYXRlZCBkdW1wcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGZsb3cgb2YgaG93IHRoaXMgYGN0eGAgaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhyb3VnaCBgcnRubF9kdW1wX2lmaW5mb2Agc3BlY2lmaWNhbGx5LCBhbmQgdGhlbiBleHBhbmQgbXkgc2VhcmNoIHRvIG90aGVyIHNpbWlsYXIgZHVtcHMgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYGN0eGAgaXMgaW5pdGlhbGl6ZWQsIHVzZWQgZm9yIGRhdGEgcmV0cmlldmFsLCBhbmQgdWx0aW1hdGVseSwgd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gYW55IGlzc3VlcyBvciBpbXByb3ZlbWVudHMgSSdtIHRoaW5raW5nIGFib3V0LiBVbmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjM3LjAyMjYwOTc4NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDYzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0NDpcXHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjI1NDU6XFx0e1xcbjI1NDY6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2ItXFx1MDAzZWV4dGFjaztcXG4yNTQ3OlxcdFxcdHN0cnVjdCBydG5sX2xpbmtfb3BzICpraW5kX29wcyA9IE5VTEw7XFxuMjU0ODpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuMjU0OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4yNTUwOlxcdFxcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xcbjI1NTE6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVgrMV07XFxuMjU1MjpcXHRcXHRzdHJ1Y3Qge1xcbjI1NTM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbjI1NTQ6XFx0XFx0fSAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjI1NTU6XFx0XFx0c3RydWN0IG5ldCAqdGd0X25ldCA9IG5ldDtcXG4yNTU2OlxcdFxcdHUzMiBleHRfZmlsdGVyX21hc2sgPSAwO1xcbjI1NTc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yNTU4OlxcdFxcdGludCBvcHNfc3JjdV9pbmRleDtcXG4yNTU5OlxcdFxcdGludCBtYXN0ZXJfaWR4ID0gMDtcXG4yNTYwOlxcdFxcdGludCBuZXRuc2lkID0gLTE7XFxuMjU2MTpcXHRcXHRib29sIG5lZWRfcnRubDtcXG4yNTYyOlxcdFxcdGludCBlcnIsIGk7XFxuMjU2MzpcXHRcXG4yNTY0OlxcdFxcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9pZmluZm9fcmVxKG5saCwgY2ItXFx1MDAzZXN0cmljdF9jaGVjaywgdGIsIGV4dGFjayk7XFxuMjU2NTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjI1NjY6XFx0XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spXFxuMjU2NzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI1Njg6XFx0XFxuMjU2OTpcXHRcXHRcXHRnb3RvIHdhbGtfZW50cmllcztcXG4yNTcwOlxcdFxcdH1cXG4yNTcxOlxcdFxcbjI1NzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBJRkxBX01BWDsgKytpKSB7XFxuMjU3MzpcXHRcXHRcXHRpZiAoIXRiW2ldKVxcbjI1NzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjU3NTpcXHRcXG4yNTc2OlxcdFxcdFxcdC8qIG5ldyBhdHRyaWJ1dGVzIHNob3VsZCBvbmx5IGJlIGFkZGVkIHdpdGggc3RyaWN0IGNoZWNraW5nICovXFxuMjU3NzpcXHRcXHRcXHRzd2l0Y2ggKGkpIHtcXG4yNTc4OlxcdFxcdFxcdGNhc2UgSUZMQV9UQVJHRVRfTkVUTlNJRDpcXG4yNTc5OlxcdFxcdFxcdFxcdG5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltpXSk7XFxuMjU4MDpcXHRcXHRcXHRcXHR0Z3RfbmV0ID0gcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc2tiLVxcdTAwM2VzaywgbmV0bnNpZCk7XFxuMjU4MTpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHRndF9uZXQpKSB7XFxuMjU4MjpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFxcXCIpO1xcbjI1ODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUih0Z3RfbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MzcuMDIyODU3ODU3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MDE1MjM3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgUlROTCBNdWx0aWNhc3QgRHVtcCBIYW5kbGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBjb2RlLCBtZXRpY3Vsb3VzbHkgdHJhY2luZyBkYXRhIGZsb3cuIEZpcnN0LCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgIHZhbGlkYXRlcyB0aGUgcmVxdWVzdDsgSSd2ZSBjaGVja2VkIHRoYXQgdGhlIGBmaWx0ZXJgIHN0cnVjdHVyZSBhbmQgcmVsYXRlZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYW5kIGhhbmRsZXMgYW55IHBvdGVudGlhbCBlcnJvcnMgY29ycmVjdGx5LCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UuIFRoZSBgdGd0X25ldGAgbWVtYmVyIGluIGBmaWx0ZXJgIGxvb2tzIGxpa2UgaXQncyBwcm9wZXJseSBoYW5kbGVkLCB3aXRoIGVycm9yIHJldHVybnMgcHJldmVudGluZyB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBhbmQgZW5zdXJpbmcgYHB1dF9uZXRgIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBuZXQgbmFtZXNwYWNlIGxvb2t1cCBzdWNjZWVkcyBhbmQgdGhlIGBuZXRuc2lkYCBpcyBub24tbmVnYXRpdmUuXG5cblRoZW4gSSBleGFtaW5lZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGBzdHJ1Y3QgaWZhZGRybXNnYCB3aGljaCBpcyBzZW50IHRvIHVzZXIgc3BhY2UuIEkgY29uZmlybWVkIHRoYXQgYWxsIGl0cyBtZW1iZXJzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIHdyaXR0ZW4gdG8gYmVmb3JlIHRoZSBzdHJ1Y3R1cmUgaXMgc2VudCBhY3Jvc3MuICBUaGUgbmV0bGluayBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFsc28gbG9vayBzYWZlOyB0aGV5IGFyZSBlaXRoZXIgcHJpbWl0aXZlIHR5cGVzIHBhc3NlZCBieSB2YWx1ZSBvciBoYXJkd2FyZSBhZGRyZXNzZXMgY29waWVkIGluIGNodW5rcyBkZXRlcm1pbmVkIGJ5IGBkZXYtXHUwMDNlYWRkcl9sZW5gLCB3aXRoIGBubGFfcHV0XypgIHRha2luZyBjYXJlIG9mIHBhZGRpbmcuIEkgY2FyZWZ1bGx5IGFzc2Vzc2VkIGV2ZXJ5IGZ1bmN0aW9uIChlLmcuLCBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGV0Yy4pIHRvIG1ha2Ugc3VyZSBubyBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gQWxsIHJlbGV2YW50IHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIHRoZXJlIGFyZSBubyBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gIEkndmUgY2hlY2tlZCBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhbHNvIGZvciBwYWRkaW5nIGluIGRhdGEgc3RydWN0dXJlcyBvciBuZXRsaW5rIGF0dHJpYnV0ZXMuIEkgZG9uJ3Qgc2VlIGFueS4gVGhlIGNvZGUgYXBwZWFycyBjbGVhbiBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgS01TQU4gZ3VpZGVsaW5lcyBhbmQgY29uY2x1ZGVkIHRoYXQgbm9uZSBvZiB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIHRydWUgYXBwbHkgaGVyZS4gIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgc2VudCB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBhbmQgdGhlcmUncyBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YWx1ZXMuICBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApIGNvdmVyIGFueSBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBvciBkZXZpY2UgbG9va3VwIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NjAsIk91dHB1dFRva2VucyI6MzE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjUxLjAzODA5ODg3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cXG5cXG4xLiBOZXRsaW5rIE1lc3NhZ2UgSW5pdGlhbGl6YXRpb246IFRoZSBmaXhlZCBoZWFkZXIgYHN0cnVjdCBpZmFkZHJtc2dgIGNvbnRhaW5zIG5vIHN0cnVjdHVyZSBwYWRkaW5nICg0IHU4IGZpZWxkcyBmb2xsb3dlZCBieSBhIHUzMiBmaWVsZCwgOCBieXRlcyB0b3RhbCkgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHJ0bmxfZmlsbF9tY2FkZHIoKWAuXFxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgYnl0ZXMgZnJvbSBgaGEtXFx1MDAzZWFkZHJgICh3aGljaCBpcyBpbml0aWFsaXplZCB0byBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxcbjMuIFZhcmlhYmxlcyBcXHUwMDI2IEZpbHRlcnM6IFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBhbmQgZHVtcCBjb250ZXh0IHN0YXRlIChgY3R4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBmaWVsZHMuXFxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gUlRNX0dFVE1VTFRJQ0FTVCBkdW1wIGhhbmRsZXIgZm9yIFBGX1BBQ0tFVCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gbmV0L2NvcmUvcnRuZXRsaW5rLmMuXFxuXFxuMS4gTmV0bGluayBNZXNzYWdlIEluaXRpYWxpemF0aW9uOiBUaGUgZml4ZWQgaGVhZGVyIGBzdHJ1Y3QgaWZhZGRybXNnYCBjb250YWlucyBubyBzdHJ1Y3R1cmUgcGFkZGluZyAoNCB1OCBmaWVsZHMgZm9sbG93ZWQgYnkgYSB1MzIgZmllbGQsIDggYnl0ZXMgdG90YWwpIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBydG5sX2ZpbGxfbWNhZGRyKClgLlxcbjIuIE5ldGxpbmsgQXR0cmlidXRlczogQWxsIGFwcGVuZGVkIG5ldGxpbmsgYXR0cmlidXRlcyB1c2Ugc3RhbmRhcmQgbmV0bGluayBoZWxwZXJzIChgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zMzJgLCBgbmxhX3B1dGApIHRoYXQgcGFzcyBzY2FsYXIgdmFsdWVzIG9yIGV4YWN0bHkgYGRldi1cXHUwMDNlYWRkcl9sZW5gIGJ5dGVzIGZyb20gYGhhLVxcdTAwM2VhZGRyYCAod2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGRldi1cXHUwMDNlYWRkcl9sZW5gIHVwb24gY3JlYXRpb24pLiBQYWRkaW5nIGFsaWdubWVudCBieXRlcyBhcmUgemVyb2VkIGJ5IG5ldGxpbmsgaGVscGVycy5cXG4zLiBWYXJpYWJsZXMgXFx1MDAyNiBGaWx0ZXJzOiBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgYW5kIGR1bXAgY29udGV4dCBzdGF0ZSAoYGN0eGApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxcbjQuIEtBU0FOL1N0YW5kYXJkIFNhbml0aXplcnM6IFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgUkNVL2xvY2tkZXAgdHJhdmVyc2FsIG9mIGRldmljZSBsaXN0cywgbmV0d29yayBuYW1lc3BhY2UgcmVmY291bnRzLCBvciBidWZmZXIgYm91bmRzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 14:54:43 +0000 UTC FinishedAt: 2026-09-09 15:19:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "fb527853-2b10-4a3d-824a-fbb23da2b2bf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_dump_mcaddr", "rtnl_dump_mcaddr_dev", "rtnl_fill_mcaddr", "rtnl_valid_dump_mcaddr_req" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUlRNX0dFVE1VTFRJQ0FTVCBkdW1wIGhhbmRsZXIgZm9yIFBGX1BBQ0tFVCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gbmV0L2NvcmUvcnRuZXRsaW5rLmMuXG5cbjEuIE5ldGxpbmsgTWVzc2FnZSBJbml0aWFsaXphdGlvbjogVGhlIGZpeGVkIGhlYWRlciBgc3RydWN0IGlmYWRkcm1zZ2AgY29udGFpbnMgbm8gc3RydWN0dXJlIHBhZGRpbmcgKDQgdTggZmllbGRzIGZvbGxvd2VkIGJ5IGEgdTMyIGZpZWxkLCA4IGJ5dGVzIHRvdGFsKSBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgcnRubF9maWxsX21jYWRkcigpYC5cbjIuIE5ldGxpbmsgQXR0cmlidXRlczogQWxsIGFwcGVuZGVkIG5ldGxpbmsgYXR0cmlidXRlcyB1c2Ugc3RhbmRhcmQgbmV0bGluayBoZWxwZXJzIChgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zMzJgLCBgbmxhX3B1dGApIHRoYXQgcGFzcyBzY2FsYXIgdmFsdWVzIG9yIGV4YWN0bHkgYGRldi1cdTAwM2VhZGRyX2xlbmAgYnl0ZXMgZnJvbSBgaGEtXHUwMDNlYWRkcmAgKHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIGBkZXYtXHUwMDNlYWRkcl9sZW5gIHVwb24gY3JlYXRpb24pLiBQYWRkaW5nIGFsaWdubWVudCBieXRlcyBhcmUgemVyb2VkIGJ5IG5ldGxpbmsgaGVscGVycy5cbjMuIFZhcmlhYmxlcyBcdTAwMjYgRmlsdGVyczogU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXJgIGFuZCBkdW1wIGNvbnRleHQgc3RhdGUgKGBjdHhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuIEtBU0FOL1N0YW5kYXJkIFNhbml0aXplcnM6IFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgUkNVL2xvY2tkZXAgdHJhdmVyc2FsIG9mIGRldmljZSBsaXN0cywgbmV0d29yayBuYW1lc3BhY2UgcmVmY291bnRzLCBvciBidWZmZXIgYm91bmRzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wIHN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIHJlcXVlc3RzIGluIHJ0bmV0bGluay4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGFuZCBkdW1waW5nIGxvZ2ljIChydG5sX2R1bXBfbWNhZGRyLCBydG5sX2R1bXBfbWNhZGRyX2RldiwgcnRubF9maWxsX21jYWRkciwgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEpIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgTkVUTElOS19ST1VURSBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWNiZDY1Mzg4MTg4NDM5ZDllZTJmNDhjMTQ4YTdkZjZiYzQzMWMzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MTg6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLmFkZjgyYjY5YWRlNzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiAmIzQzOzc3LDggQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgICBuYW1lOiBtY2F1dG9qb2luXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogc3RhYmxlLXByaXZhY3lcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICYjNDM7MTIxLDcgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiB0YXJnZXQtbmV0bnNpZFxuLSAgICAgICAgdHlwZTogYmluYXJ5XG4mIzQzOyAgICAgICAgdHlwZTogczMyXG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcHJvdG9cbiAgICAgICAgIHR5cGU6IHU4XG5AQCAtMTY4LDcgJiM0MzsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbiYjNDM7ICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IHNlbGVjdHMgdGhlIGFkZHJlc3NcbiYjNDM7ICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuJiM0MzsgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXG4mIzQzOyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxuJiM0MzsgICAgICAgIFNJT0NBRERNVUxUSSBvciBcJiMzNDticmlkZ2UgZmRiIGFkZCAuLi4gc2VsZlwmIzM0OywgcmF0aGVyIHRoYW4gYnkgYVxuJiM0MzsgICAgICAgIHByb3RvY29sIGpvaW4gYXJlIHJlcG9ydGVkIHdpdGggdGhlIGdsb2JhbCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbkBAIC0xODEsMTAgJiM0MzsxODksMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxuICAgICAgICAgICAgIC0gbWMtdXNlcnNcbiAgICAgICAgICAgICAtIGNhY2hlaW5mb1xuJiM0MzsgICAgICAgICAgICAtIGZsYWdzXG4mIzQzOyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXG4gICAgICAgICByZXBseTpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaFxuaW5kZXggN2ZiNjMwYjdmZTMxMS4uMGExYWQ5ZWJiNDdiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC01Nyw2ICYjNDM7NTcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEVcdDB4MjAwXG4gI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOXHQweDQwMFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcdDB4ODAwXG4mIzQzOyNkZWZpbmUgSUZBX0ZfR0xPQkFMXHRcdDB4MTAwMFxuIFxuIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHtcbiBcdF9fdTMyXHRpZmFfcHJlZmVyZWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggODFjNWE2MTA0ZGVhMS4uZjU0ZTljYjNiZjMwYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTY5IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuJiM0MztcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbmV0bnNpZClcbiYjNDM7e1xuJiM0MztcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfR0xPQkFMIDogMDtcbiYjNDM7XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4mIzQzO1x0c3RydWN0IG5sbXNnaGRyICpubGg7XG4mIzQzO1xuJiM0MztcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG4mIzQzO1x0XHRcdGZsYWdzKTtcbiYjNDM7XHRpZiAoIW5saClcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG4mIzQzO1x0LyogaWZtLVx1MDAzZWlmYV9mbGFncyBob2xkcyA4IGJpdHMsIHRoZSBmdWxsIHZhbHVlIGlzIGluIElGQV9GTEFHUyAqL1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcbiYjNDM7XHRpZiAoKG5ldG5zaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgbmxhX3B1dF9zMzIoc2tiLCBJRkFfVEFSR0VUX05FVE5TSUQsIG5ldG5zaWQpKSB8fFxuJiM0MztcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKSB7XG4mIzQzO1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5sbXNnX2VuZChza2IsIG5saCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiYjNDM7XHRpbnQgYWRkcl9pZHggPSAwO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbiYjNDM7XHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4mIzQzO1x0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG4mIzQzO1x0XHRcdGFkZHJfaWR4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbiYjNDM7XHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRhZGRyX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4mIzQzO1xuJiM0MztcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xuJiM0MztcdHN0cnVjdCBuZXQgKnRndF9uZXQ7XG4mIzQzO1x0aW50IG5ldG5zaWQ7XG4mIzQzO1x0aW50IGlmaW5kZXg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHtcbiYjNDM7XHRbSUZBX1RBUkdFVF9ORVROU0lEXVx0PSB7IC50eXBlID0gTkxBX1MzMiB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTtcbiYjNDM7XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG4mIzQzO1x0aWYgKCFpZm0pIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuIHx8IGlmbS1cdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVx1MDAzZWlmYV9zY29wZSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLFxuJiM0MztcdFx0XHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xuJiM0MztcdFx0c3RydWN0IG5ldCAqbmV0O1xuJiM0MztcbiYjNDM7XHRcdGZpbHRlci1cdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XG4mIzQzO1x0XHRuZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLVx1MDAzZW5ldG5zaWQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihuZXQpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIGZpbHRlciA9IHtcbiYjNDM7XHRcdC50Z3RfbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKSxcbiYjNDM7XHRcdC5uZXRuc2lkID0gLTEsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuJiM0MztcdFx0aW50IGFkZHJfaWR4O1xuJiM0MztcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBza2ItXHUwMDNlc2ssIFx1MDAyNmZpbHRlcixcbiYjNDM7XHRcdFx0XHRcdCBjYi1cdTAwM2VleHRhY2spO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChmaWx0ZXIuaWZpbmRleCkge1xuJiM0MztcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4mIzQzO1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuJiM0MztcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTtcbiYjNDM7XHRcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGZpbHRlci5uZXRuc2lkIFx1MDAzZT0gMClcbiYjNDM7XHRcdHB1dF9uZXQoZmlsdGVyLnRndF9uZXQpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiAmIzQzOzc0MTQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPVxuIFx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcbiBcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcbiBcdHsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSxcbiYjNDM7XHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXG4mIzQzO1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyAmIzQzOzEsMjEgQEBcbiAjIS91c3IvYmluL2VudiBweXRob24zXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuJiM0MztpbXBvcnQgZXJybm9cbiBpbXBvcnQgc29ja2V0XG4gaW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuLWZyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1xceGVmXFx4MDFcXHgwMVxceDAxJiMzOTtcbiBJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5O2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJiMzOTspXG4mIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KVxuJiM0MztFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJiMzOTswMTowMDo1ZTowMTowMTowMSYjMzk7XG4mIzQzO0VUSF9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoRVRIX1RFU1RfTVVMVElDQVNUX1NUUi5yZXBsYWNlKCYjMzk7OiYjMzk7LCAmIzM5OyYjMzk7KSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgJiM0MzsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuIFxuJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1RcbiYjNDM7ICAgIGR1bXA6IHRoZSBpZmEtaW5kZXggZmlsdGVyLCBtYy11c2VycywgdGhlIGdsb2JhbCBmbGFnIGFuZFxuJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgZm9yIGlmbmFtZSBpbiAoXCYjMzQ7ZHVtbXkxXCYjMzQ7LCBcJiMzNDtkdW1teTJcJiMzNDspOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgbmFtZSB7aWZuYW1lfSB0eXBlIGR1bW15XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBzZXQge2lmbmFtZX0gdXBcJiMzNDspXG4mIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcJiMzNDtkdW1teTFcJiMzNDspXG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O21hZGRyIGFkZCB7RVRIX1RFU1RfTVVMVElDQVNUX1NUUn0gZGV2IGR1bW15MVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuJiM0MzsgICAgICAgICAgICAgICAge1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsIFwmIzM0O2lmYS1pbmRleFwmIzM0OzogZGV2X2lkeH0sXG4mIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4mIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbiYjNDM7ICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXBcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIHJhaXNlXG4mIzQzO1xuJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXJcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XG4mIzQzO1xuJiM0MzsgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cbiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtnbG9iYWwmIzM5OywgZW50cmllc1tFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCYjMzQ7KVxuJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDt1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9pbigmIzM5O2dsb2JhbCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O1NJT0NBRERNVUxUSSBlbnRyeSBpcyBub3QgZ2xvYmFsXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdFxuJiM0MzsgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bmV0bnMgc2V0IHtwZWVyfSA1XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15XCYjMzQ7LCBucz1wZWVyKVxuJiM0MzsgICAgICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBkdW1teTMgdXBcJiMzNDssIG5zPXBlZXIpXG4mIzQzOyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXCYjMzQ7bGluayBzaG93IGR1bW15M1wmIzM0OywganNvbj1UcnVlLCBucz1wZWVyKVswXVsmIzM5O2lmaW5kZXgmIzM5O11cbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuJiM0MzsgICAgICAgICAgICAgICAge1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsIFwmIzM0O3RhcmdldC1uZXRuc2lkXCYjMzQ7OiA1fSxcbiYjNDM7ICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10sIGFkZHJbJiMzOTt0YXJnZXQtbmV0bnNpZCYjMzk7XSlcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIFwmIzM0O3RhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRuc1wmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgJiM0MzszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXG4mIzQzOyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uYWRmODJiNjlhZGU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgc2VsZWN0cyB0aGUgYWRkcmVzcwomIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb24KJiM0MzsgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlCiYjNDM7ICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgZXhwbGljaXRseSwgZS5nLiB3aXRoCiYjNDM7ICAgICAgICBTSU9DQURETVVMVEkgb3IgJiMzNDticmlkZ2UgZmRiIGFkZCAuLi4gc2VsZiYjMzQ7LCByYXRoZXIgdGhhbiBieSBhCiYjNDM7ICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuCiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzCiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZwogICAgICAgZG86CkBAIC0xODEsMTAgJiM0MzsxODksMTMgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gbXVsdGljYXN0CiAgICAgICAgICAgICAtIG1jLXVzZXJzCiAgICAgICAgICAgICAtIGNhY2hlaW5mbwomIzQzOyAgICAgICAgICAgIC0gZmxhZ3MKJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiA1OAotICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgICByZXBseToKICAgICAgICAgICB2YWx1ZTogNTgKICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAppbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKQEAgLTU3LDYgJiM0Mzs1Nyw3IEBAIGVudW0gewogI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFCTB4MjAwCiAjZGVmaW5lIElGQV9GX01DQVVUT0pPSU4JMHg0MDAKICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1kJMHg4MDAKJiM0MzsjZGVmaW5lIElGQV9GX0dMT0JBTAkJMHgxMDAwCiAKIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHsKIAlfX3UzMglpZmFfcHJlZmVyZWQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDgxYzVhNjEwNGRlYTEuLmY1NGU5Y2IzYmYzMGMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00NTY2LDYgJiM0Mzs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCXJldHVybiBza2ItJmd0O2xlbiA/IDogcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsCiYjNDM7CQkJICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpCiYjNDM7ewomIzQzOwl1MzIgaWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwOwomIzQzOwlzdHJ1Y3QgaWZhZGRybXNnICppZm07CiYjNDM7CXN0cnVjdCBubG1zZ2hkciAqbmxoOwomIzQzOwomIzQzOwlubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLAomIzQzOwkJCWZsYWdzKTsKJiM0MzsJaWYgKCFubGgpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19kYXRhKG5saCk7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDsKJiM0MzsJaWZtLSZndDtpZmFfcHJlZml4bGVuID0gMDsKJiM0MzsJLyogaWZtLSZndDtpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi8KJiM0MzsJaWZtLSZndDtpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7CiYjNDM7CWlmbS0mZ3Q7aWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSzsKJiM0MzsJaWZtLSZndDtpZmFfaW5kZXggPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CiYjNDM7CWlmICgobmV0bnNpZCAmZ3Q7PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8CiYjNDM7CSAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LSZndDthZGRyX2xlbiwgaGEtJmd0O2FkZHIpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtJmd0O3JlZmNvdW50KSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKJiM0MzsJaW50IGFkZHJfaWR4ID0gMDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CiYjNDM7CQlpZiAoYWRkcl9pZHggJmx0OyAqc19hZGRyX2lkeCkgewomIzQzOwkJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKJiM0MzsJCQkJICAgICAgIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKJiM0MzsKJiM0MzsJKnNfYWRkcl9pZHggPSBlcnIgJmx0OyAwID8gYWRkcl9pZHggOiAwOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgewomIzQzOwlzdHJ1Y3QgbmV0ICp0Z3RfbmV0OwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCWZpbHRlci0mZ3Q7dGd0X25ldCA9IG5ldDsKJiM0MzsJfQomIzQzOwomIzQzOwlmaWx0ZXItJmd0O2lmaW5kZXggPSBpZm0tJmd0O2lmYV9pbmRleDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0gewomIzQzOwkJLnRndF9uZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKSwKJiM0MzsJCS5uZXRuc2lkID0gLTEsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJdW5zaWduZWQgbG9uZyBpZmluZGV4OwomIzQzOwkJaW50IGFkZHJfaWR4OwomIzQzOwl9ICpjdHggPSAodm9pZCAqKWNiLSZndDtjdHg7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLSZndDtubGgsIHNrYi0mZ3Q7c2ssICZhbXA7ZmlsdGVyLAomIzQzOwkJCQkJIGNiLSZndDtleHRhY2spOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKGZpbHRlci5pZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncywKJiM0MzsJCQkJCSAgIGZpbHRlci5uZXRuc2lkKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXQoZmlsdGVyLnRndF9uZXQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uNDFkYTI1OWMzYTA5NSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7Z2xvYmFsJiMzOTssIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sIGVudHJ5IGlzIGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAga3NmdF9pbihFVEhfVEVTVF9NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2VxKGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O21jLXVzZXJzJiMzOTtdLCAxLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAga3NmdF9pbigmIzM5O2dsb2JhbCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgIyB0YXJnZXQtbmV0bnNpZCBkdW1wcyBhbm90aGVyIG5ldG5zLCBpZmEtaW5kZXggaXMgcmVsYXRpdmUgdG8gaXQKJiM0MzsgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O25ldG5zIHNldCB7cGVlcn0gNSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTMgdHlwZSBkdW1teSYjMzQ7LCBucz1wZWVyKQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZHVtbXkzIHVwJiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgcGVlcl9pZHggPSBpcCgmIzM0O2xpbmsgc2hvdyBkdW1teTMmIzM0OywganNvbj1UcnVlLCBucz1wZWVyKVswXVsmIzM5O2lmaW5kZXgmIzM5O10KJiM0MzsKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O3RhcmdldC1uZXRuc2lkJiMzNDs6IDV9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10sIGFkZHJbJiMzOTt0YXJnZXQtbmV0bnNpZCYjMzk7XSkKJiM0MzsgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3RhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRucyYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgRmVhdHVyZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGFiaWxpdHkgdG8gZHVtcCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgdXNpbmcgcnRuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBQRl9QQUNLRVRgIGFuZCB0aGUgYFJUTV9HRVRNVUxUSUNBU1RgIG1lc3NhZ2UgdHlwZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGtleSBmaWxlczogYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggY29udGFpbnMgdGhlIG5ldyBjb3JlIGZ1bmN0aW9ucyBmb3IgZHVtcGluZywgaW5jbHVkaW5nIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYW5kIHRoZSBwb2xpY2llcyBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gVGhlcmUmIzM5O3MgYSBuZXcgYElGQV9GX0dMT0JBTGAgZmxhZyBpbiBgaWZfYWRkci5oYCwgcHJlc3VtYWJseSBmb3IgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGZsYWdzLiBXZSBhbHNvIHNlZSB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBhIHNlbGZ0ZXN0IGZvciB2ZXJpZmljYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXZhbHVhdGUgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOiB0aGUgY29yZSBzdWJzeXN0ZW0gaXMgTmV0d29ya2luZywgc3BlY2lmaWNhbGx5IGBydG5ldGxpbmtgLiBUaGUgY29kZSBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaW1wbGVtZW50cyB0aGUgcmVsZXZhbnQgYHJ0bmxfZHVtcF9tY2FkZHJgIGZhbWlseSBvZiBmdW5jdGlvbnMuIEl0JiMzOTtzIHRyaXZpYWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBXZSBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggc3RhbmRhcmQgbmV0bGluayBzb2NrZXRzIChgQUZfTkVUTElOS2AsIGBORVRMSU5LX1JPVVRFYCksIHNlbmRpbmcgYFJUTV9HRVRNVUxUSUNBU1RgIG1lc3NhZ2VzLCBhbmQgc3BlY2lmeWluZyB0aGUgYFBGX1BBQ0tFVGAgZmFtaWx5LiBUaGlzIHNob3VsZCBiZSBlYXNpbHkgdHJpZ2dlcmFibGUgaW4gc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCAqeWVzKiwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIG5ldyBmdW5jdGlvbnMuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgaW50ZXJuYWxzIG9mIGhvdyB0aGUgZHVtcCBpcyBpbXBsZW1lbnRlZC4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz00NTY5PXN0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2MDItXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NjAzOnN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2MDQtXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjQwPXN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY4NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2ODU6c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2ODYte1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTMtXHRcdH1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MTQ6XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTUtXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzE5LVx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAoZmlsdGVyLnRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MjA6XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MjEtXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE3LVx0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQxODpcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzQxOS1cdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkludmVzdGlnYXRpbmcgUlRORVRMSU5LIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBgbmV0L2NvcmUvTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGRlY2xhcmVkIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBjb25maWcgc3ltYm9scyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIGBydG5ldGxpbmsuY2AgYW5kIGl0cyBzdXBwb3J0aW5nIGNvbXBvbmVudHMuIEl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBuZXR3b3JrIGZlYXR1cmVzLiBUaGF0IHdheSwgSSBjYW4gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGVuYWJsZWQgYW5kIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYW5kIGhvcGVmdWxseSBJIHdvbiYjMzk7dCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggKnRvbyogbWFueSBsZXZlbHMgb2YgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGlua1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSVE5ldGxpbmsgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gYG5ldC9jb3JlL3J0bmV0bGluay5jYCBpcyBhbHdheXMgY29tcGlsZWQgaW50byB0aGUgY29yZSBuZXR3b3JraW5nIG1vZHVsZSAoYG5ldC9jb3JlL2ApIHdoZW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLCBgQ09ORklHX05FVGAgaXMgdGhlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBoYW5kbGluZyB3aXRoaW4gUlROZXRsaW5rLgoKTGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZz8gSSBoYXZlIHRoZXNlIGZvdXI6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfZmlsbF9tY2FkZHJgLCBhbmQgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBhbnkgb3RoZXIgcmVsZXZhbnQgZmlsZXMuCgpSaWdodCwgSSBzZWUgYSBmZXcgb3RoZXIgcGxhY2VzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZDogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCB0aGUgYGlmX2FkZHIuaGAgaW5jbHVkZSBmaWxlLCBgcnRuZXRsaW5rLmNgIG9mIGNvdXJzZSwgYW5kIGEgc2VsZnRlc3Qgc2NyaXB0LiBUaGVzZSBzdXBwb3J0IG15IHdvcmsgb24gdGhpcyBhcmVhLgoKQWxyaWdodCwgYmFjayB0byB0aGUgc3ltYm9sczogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAuIEdvb2QsIGdvb2QuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy4KCk5vdywgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMsIGJleW9uZCB0aGUgYmFzaWMgYE5FVGAgY29uZmlnPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGlmIHNvbWV0aGluZyBsaWtlIGBQRl9QQUNLRVRgIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgY29uZmlnLCBsaWtlIGBDT05GSUdfUEFDS0VUYC4gSSYjMzk7bGwgaGF2ZSB0byBsb29rIGludG8gYHJ0bmV0bGluay5jYCBjb2RlIHRvIHNlZSBpZiB0aGUgcGFja2V0IGZhbWlseSBpcyBpbnZvbHZlZCBpbiB0aGlzIHBhcnQuIEkgbmVlZCB0byBiZSBzdXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEZfUEFDS0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9NDUyMj1zdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1MzYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTM3Olx0XHRpZiAoaWR4IFx1MDAzYyBzX2lkeCB8fCBpZHggPT0gUEZfUEFDS0VUKVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDUzOC1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE2LVx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQxNzpcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTc0MTgtXHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1MAoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZzogdGhlIGhhbmRsZXIgZm9yIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgcmV0cmlldmFsIHZpYSBydG5ldGxpbmsgKGBSVE1fR0VUTVVMVElDQVNUYCkgaXMgcmVnaXN0ZXJlZCB1bmNvbmRpdGlvbmFsbHkgd2l0aGluIGBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNgLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoYCNpZmRlZmApIGhlcmUsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFsd2F5cyBhdmFpbGFibGUuIFRoZSBtZXNzYWdlIGlzIGJlaW5nIHJlY2VpdmVkIG92ZXIgdGhlIHN0YW5kYXJkIGBORVRMSU5LX1JPVVRFYCBzb2NrZXQsIHdoaWNoIHVzZXMgdGhlIGBBRl9ORVRMSU5LYCBhZGRyZXNzIGZhbWlseS4gQW5kLCBjcnVjaWFsbHksIHRoZSBgaWZtLSZndDtpZmFfZmFtaWx5YCBpcyBgQUZfUEFDS0VUYC4KClRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCB0aGUgY29yZSByZXF1aXJlbWVudCBpcyBqdXN0IHN0YW5kYXJkIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCksIGFuZCBieSBleHRlbnNpb24sIGBDT05GSUdfTkVUTElOS2AuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgc3R1ZmYgaGVyZS4KCkxldCBtZSBqdXN0IHNvbGlkaWZ5IHRoaXMgZnVydGhlcjoKCjEuICBgV29ydGhGdXp6aW5nYCBpcyBtYXJrZWQgYXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCB0byBrbm93LgoyLiAgVGhlICYjMzQ7UmVhc29uaW5nJiMzNDsgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZzogVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgdG8gZHVtcCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKHVzaW5nIGBQRl9QQUNLRVRgIHdpdGggYFJUTV9HRVRNVUxUSUNBU1RgKSB0aHJvdWdoIHJ0bmV0bGluay4gVGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX2ZpbGxfbWNhZGRyYCwgYW5kIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAuIFRoaXMgYWNjZXNzIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoIG5ldGxpbmsgcm91dGUgc29ja2V0cy4KMy4gIFRoZSBjcml0aWNhbCAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IOKAkyB0aGUgZnVuY3Rpb25zIHRoZXkmIzM5O3ZlIGhpZ2hsaWdodGVkOiBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX2ZpbGxfbWNhZGRyYCwgYW5kIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoZSBzY29wZS4KNC4gIFRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBleHBsaWNpdGx5IGxpc3RzIGBbJiMzNDtORVQmIzM0O11gLiBQcmVjaXNlbHkgd2hhdCBJIGhhZCBpbiBtaW5kIQoKUmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDssCiAgICAmIzM0O3J0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wIHN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIHJlcXVlc3RzIGluIHJ0bmV0bGluay4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGFuZCBkdW1waW5nIGxvZ2ljIChydG5sX2R1bXBfbWNhZGRyLCBydG5sX2R1bXBfbWNhZGRyX2RldiwgcnRubF9maWxsX21jYWRkciwgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEpIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgTkVUTElOS19ST1VURSBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cblxuMS4gTmV0bGluayBNZXNzYWdlIEluaXRpYWxpemF0aW9uOiBUaGUgZml4ZWQgaGVhZGVyIGBzdHJ1Y3QgaWZhZGRybXNnYCBjb250YWlucyBubyBzdHJ1Y3R1cmUgcGFkZGluZyAoNCB1OCBmaWVsZHMgZm9sbG93ZWQgYnkgYSB1MzIgZmllbGQsIDggYnl0ZXMgdG90YWwpIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBydG5sX2ZpbGxfbWNhZGRyKClgLlxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVx1MDAzZWFkZHJfbGVuYCBieXRlcyBmcm9tIGBoYS1cdTAwM2VhZGRyYCAod2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxuMy4gVmFyaWFibGVzIFx1MDAyNiBGaWx0ZXJzOiBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgYW5kIGR1bXAgY29udGV4dCBzdGF0ZSAoYGN0eGApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKaW5kZXggMGVjYmQyNGM4OTBjNi4uYWRmODJiNjlhZGU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCkBAIC03Nyw2ICYjNDM7NzcsOCBAQCBkZWZpbml0aW9uczoKICAgICAgICAgbmFtZTogbWNhdXRvam9pbgogICAgICAgLQogICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeQomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGdsb2JhbAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTE5LDcgJiM0MzsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkCi0gICAgICAgIHR5cGU6IGJpbmFyeQomIzQzOyAgICAgICAgdHlwZTogczMyCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHByb3RvCiAgICAgICAgIHR5cGU6IHU4CkBAIC0xNjgsNyAmIzQzOzE3MCwxMyBAQCBvcGVyYXRpb25zOgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsCiAgICAgLQogICAgICAgbmFtZTogZ2V0bXVsdGljYXN0Ci0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuCiYjNDM7ICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgc2VsZWN0cyB0aGUgYWRkcmVzcwomIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb24KJiM0MzsgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlCiYjNDM7ICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgZXhwbGljaXRseSwgZS5nLiB3aXRoCiYjNDM7ICAgICAgICBTSU9DQURETVVMVEkgb3IgJiMzNDticmlkZ2UgZmRiIGFkZCAuLi4gc2VsZiYjMzQ7LCByYXRoZXIgdGhhbiBieSBhCiYjNDM7ICAgICAgICBwcm90b2NvbCBqb2luIGFyZSByZXBvcnRlZCB3aXRoIHRoZSBnbG9iYWwgZmxhZyBzZXQuCiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzCiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZwogICAgICAgZG86CkBAIC0xODEsMTAgJiM0MzsxODksMTMgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gbXVsdGljYXN0CiAgICAgICAgICAgICAtIG1jLXVzZXJzCiAgICAgICAgICAgICAtIGNhY2hlaW5mbwomIzQzOyAgICAgICAgICAgIC0gZmxhZ3MKJiM0MzsgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiA1OAotICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZAogICAgICAgICByZXBseToKICAgICAgICAgICB2YWx1ZTogNTgKICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAppbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgKQEAgLTU3LDYgJiM0Mzs1Nyw3IEBAIGVudW0gewogI2RlZmluZSBJRkFfRl9OT1BSRUZJWFJPVVRFCTB4MjAwCiAjZGVmaW5lIElGQV9GX01DQVVUT0pPSU4JMHg0MDAKICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1kJMHg4MDAKJiM0MzsjZGVmaW5lIElGQV9GX0dMT0JBTAkJMHgxMDAwCiAKIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHsKIAlfX3UzMglpZmFfcHJlZmVyZWQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDgxYzVhNjEwNGRlYTEuLmY1NGU5Y2IzYmYzMGMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00NTY2LDYgJiM0Mzs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCXJldHVybiBza2ItJmd0O2xlbiA/IDogcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsCiYjNDM7CQkJICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpCiYjNDM7ewomIzQzOwl1MzIgaWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwOwomIzQzOwlzdHJ1Y3QgaWZhZGRybXNnICppZm07CiYjNDM7CXN0cnVjdCBubG1zZ2hkciAqbmxoOwomIzQzOwomIzQzOwlubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLAomIzQzOwkJCWZsYWdzKTsKJiM0MzsJaWYgKCFubGgpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19kYXRhKG5saCk7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDsKJiM0MzsJaWZtLSZndDtpZmFfcHJlZml4bGVuID0gMDsKJiM0MzsJLyogaWZtLSZndDtpZmFfZmxhZ3MgaG9sZHMgOCBiaXRzLCB0aGUgZnVsbCB2YWx1ZSBpcyBpbiBJRkFfRkxBR1MgKi8KJiM0MzsJaWZtLSZndDtpZmFfZmxhZ3MgPSAoX191OClpZmFfZmxhZ3M7CiYjNDM7CWlmbS0mZ3Q7aWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSzsKJiM0MzsJaWZtLSZndDtpZmFfaW5kZXggPSBkZXYtJmd0O2lmaW5kZXg7CiYjNDM7CiYjNDM7CWlmICgobmV0bnNpZCAmZ3Q7PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8CiYjNDM7CSAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LSZndDthZGRyX2xlbiwgaGEtJmd0O2FkZHIpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtJmd0O3JlZmNvdW50KSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKJiM0MzsJaW50IGFkZHJfaWR4ID0gMDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CiYjNDM7CQlpZiAoYWRkcl9pZHggJmx0OyAqc19hZGRyX2lkeCkgewomIzQzOwkJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKJiM0MzsJCQkJICAgICAgIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlhZGRyX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKJiM0MzsKJiM0MzsJKnNfYWRkcl9pZHggPSBlcnIgJmx0OyAwID8gYWRkcl9pZHggOiAwOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgewomIzQzOwlzdHJ1Y3QgbmV0ICp0Z3RfbmV0OwomIzQzOwlpbnQgbmV0bnNpZDsKJiM0MzsJaW50IGlmaW5kZXg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0lGQV9UQVJHRVRfTkVUTlNJRF0JPSB7IC50eXBlID0gTkxBX1MzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCAmIzQzOyAxXTsKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTsKJiM0MzsJaWYgKCFpZm0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZm0tJmd0O2lmYV9wcmVmaXhsZW4gfHwgaWZtLSZndDtpZmFfZmxhZ3MgfHwgaWZtLSZndDtpZmFfc2NvcGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsCiYjNDM7CQkJICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkgewomIzQzOwkJc3RydWN0IG5ldCAqbmV0OwomIzQzOwomIzQzOwkJZmlsdGVyLSZndDtuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7CiYjNDM7CQluZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLSZndDtuZXRuc2lkKTsKJiM0MzsJCWlmIChJU19FUlIobmV0KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIobmV0KTsKJiM0MzsJCX0KJiM0MzsJCWZpbHRlci0mZ3Q7dGd0X25ldCA9IG5ldDsKJiM0MzsJfQomIzQzOwomIzQzOwlmaWx0ZXItJmd0O2lmaW5kZXggPSBpZm0tJmd0O2lmYV9pbmRleDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0gewomIzQzOwkJLnRndF9uZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKSwKJiM0MzsJCS5uZXRuc2lkID0gLTEsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJdW5zaWduZWQgbG9uZyBpZmluZGV4OwomIzQzOwkJaW50IGFkZHJfaWR4OwomIzQzOwl9ICpjdHggPSAodm9pZCAqKWNiLSZndDtjdHg7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLSZndDtubGgsIHNrYi0mZ3Q7c2ssICZhbXA7ZmlsdGVyLAomIzQzOwkJCQkJIGNiLSZndDtleHRhY2spOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKGZpbHRlci5pZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZmlsdGVyLnRndF9uZXQsIGZpbHRlci5pZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncywKJiM0MzsJCQkJCSAgIGZpbHRlci5uZXRuc2lkKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCAmYW1wO2N0eC0mZ3Q7YWRkcl9pZHgsIGZsYWdzLAomIzQzOwkJCQkJICAgZmlsdGVyLm5ldG5zaWQpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZmlsdGVyLm5ldG5zaWQgJmd0Oz0gMCkKJiM0MzsJCXB1dF9uZXQoZmlsdGVyLnRndF9uZXQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLAogCQkJCSAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLApAQCAtNzI1MSw2ICYjNDM7NzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9CiAJey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSwKIAl7Lm1zZ3R5cGUgPSBSVE1fTkVXTElOS1BST1AsIC5kb2l0ID0gcnRubF9uZXdsaW5rcHJvcH0sCiAJey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LAomIzQzOwl7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsCiYjNDM7CSAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LAogCXsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssCiAJIC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uNDFkYTI1OWMzYTA5NSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0xLDE3ICYjNDM7MSwyMSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiYjNDM7aW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lCiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSBsaWIucHkgaW1wb3J0IGRlZmVyCiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwogSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzO0VUSF9BTExfSE9TVFNfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgmIzM5OzAxMDA1ZTAwMDAwMSYjMzk7KQomIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTsKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgmIzM5OzomIzM5OywgJiMzOTsmIzM5OykpCiAKIAogZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOgpAQCAtMTA1LDYgJiM0MzsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKQogCiAKJiM0MztkZWYgZHVtcF9tY2FkZHJfbDJfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVAomIzQzOyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmQKJiM0MzsgICAgdGFyZ2V0LW5ldG5zaWQuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7Z2xvYmFsJiMzOTssIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWyYjMzk7ZmxhZ3MmIzM5O10sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sIGVudHJ5IGlzIGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAga3NmdF9pbihFVEhfVEVTVF9NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2VxKGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O21jLXVzZXJzJiMzOTtdLCAxLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3VuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzcyYjMzQ7KQomIzQzOyAgICAgICAga3NmdF9pbigmIzM5O2dsb2JhbCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtmbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IGdsb2JhbCYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgIyB0YXJnZXQtbmV0bnNpZCBkdW1wcyBhbm90aGVyIG5ldG5zLCBpZmEtaW5kZXggaXMgcmVsYXRpdmUgdG8gaXQKJiM0MzsgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O25ldG5zIHNldCB7cGVlcn0gNSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTMgdHlwZSBkdW1teSYjMzQ7LCBucz1wZWVyKQomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgZHVtbXkzIHVwJiMzNDssIG5zPXBlZXIpCiYjNDM7ICAgICAgICAgICAgcGVlcl9pZHggPSBpcCgmIzM0O2xpbmsgc2hvdyBkdW1teTMmIzM0OywganNvbj1UcnVlLCBucz1wZWVyKVswXVsmIzM5O2lmaW5kZXgmIzM5O10KJiM0MzsKJiM0MzsgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCgKJiM0MzsgICAgICAgICAgICAgICAgeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfUEFDS0VULCAmIzM0O3RhcmdldC1uZXRuc2lkJiMzNDs6IDV9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICAgICAga3NmdF9lcSh7KGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10sIGFkZHJbJiMzOTt0YXJnZXQtbmV0bnNpZCYjMzk7XSkKJiM0MzsgICAgICAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7KHBlZXJfaWR4LCA1KX0sCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O3RhcmdldC1uZXRuc2lkIGRpZCBub3QgZHVtcCB0aGUgcGVlciBuZXRucyYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIHJ1bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLgoKTG9va2luZyBhdCB0aGUgZmlsZSBjaGFuZ2VzLCBJIHNlZSB1cGRhdGVzIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCBjb25jZXJuaW5nIG5ldGxpbmsgc3BlY3MsIGFkZGluZyBgQUZfUEFDS0VUYCwgYSBnbG9iYWwgZmxhZywgYW5kIGB0YXJnZXQtbmV0bnNpZGAgZm9yIGBnZXRtdWx0aWNhc3RgLiBBIG5ldyBkZWZpbmUsIGAjZGVmaW5lIElGQV9GX0dMT0JBTCAweDEwMDBgLCBpcyBhZGRlZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIFRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggaW1wbGVtZW50cyBhIGR1bXAgZnVuY3Rpb24gZm9yIGBQRl9QQUNLRVRgIGBnZXRtdWx0aWNhc3RgLgoKU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gYHJ0bmxfZmlsbF9tY2FkZHJgIGlzIHdoZXJlIEkmIzM5O2xsIGZvY3VzLiBJdCBjb25zdHJ1Y3RzIGEgTmV0bGluayBtZXNzYWdlLCBhbmQgdGhlcmUgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgaXNzdWUgaGVyZToKCkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIGBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLCBmbGFncylgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYG5sbXNnX3B1dGAgaW5pdGlhbGl6ZXMgdGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBoZWFkZXIgYW5kIHBheWxvYWQsIG9yIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubG1zZ19kYXRhYCBpcyB1bmluaXRpYWxpemVkLiBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGlzIGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmxtc2dfcHV0YCB6ZXJvZXMgdGhlIG1lbW9yeSBvciBpZiBgbmxtc2dfZGF0YWAgY29udGFpbnMganVuaywgb3IgaWYgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgaXQuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMgYmVjYXVzZSB0aGF0IGBpZm1gIGlzIGJlaW5nIHVzZWQsIGFuZCBpZiB1bmluaXRpYWxpemVkLCB0aGF0JiMzOTtzIGEgcHJvYmxlbS4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBtdXN0IGFsc28gcmVjYWxsIHdoYXQgYSBgc3RydWN0IGlmYWRkcm1zZ2AgaXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIG1lbWJlcnMgdG8gZ2V0IGEgbW9yZSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgY29kZXNlYXJjaGAgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgaWZhZGRybXNnIHsmIzM5OzogVW5tYXRjaGVkIFx7PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzk7OiBVbm1hdGNoZWQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBJbnRlcmZhY2UgU3RydWN0dXJlIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgc29tZSBkZXRhaWxzIGFib3V0IG5ldHdvcmsgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IGRpZ2dpbmcgaW50byB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBpcyB3aXRoIHRoZSBgc3RydWN0IGlmYWRkcm1zZ2AgZGVmaW5pdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBqdW1waW5nLW9mZiBwb2ludC4gTGV0JiMzOTtzIGdldCB0aGF0IGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGluZm9ybWF0aW9uIGl0IGhvbGRzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHN0cnVjdHVyZSB0byBjb250YWluIHRoZSBiYXNpYyBhdHRyaWJ1dGVzIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gZHJpbGwgZG93biB0byBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgaWYgbmVlZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaWZhZGRybXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTctXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjg6c3RydWN0IGlmYWRkcm1zZyB7XG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXHRfX3U4XHRcdGlmYV9mYW1pbHk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC0yMy0gKiBJRkFfRkxBR1MgaXMgYSB1MzIgYXR0cmlidXRlIHRoYXQgZXh0ZW5kcyB0aGUgdTggZmllbGQgaWZhX2ZsYWdzLlxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDoyNDogKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtMjUtICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaD02Mj1zdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03MC0jaWZuZGVmIF9fS0VSTkVMX19cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6NzE6I2RlZmluZSBJRkFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjcyOiNkZWZpbmUgSUZBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSlcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGlmX2FkZHIuaCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgOC4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGl0IGxpa2VseSBzdGFydHMgZGVmaW5pbmcgdGhlIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHJlbGF0ZWQgdG8gbmV0d29yayBpbnRlcmZhY2UgYWRkcmVzcyBpbmZvcm1hdGlvbi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBgaWZhZGRybXNnYCwgb3IgcGVyaGFwcyBzb21lIGtleSBmbGFnIGRlZmluaXRpb25zIHRoYXQgZ292ZXJuIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBxdWlja2x5IHNjYW4gZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgcmVsYXRlIHRvIGFkZHJlc3MgZmFtaWxpZXMsIGFkZHJlc3MgbGVuZ3RocywgYW5kIGF0dHJpYnV0ZSBjb2Rlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcG9zc2libHkgc2VlaW5nIHNvbWUgZW51bXMuIEFueXRoaW5nIHRoYXQgZGljdGF0ZXMgdGhlIGZvcm1hdCBvciBwcm9wZXJ0aWVzIG9mIG5ldHdvcmsgYWRkcmVzc2VzIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbml0aWFsbHkuIEkmIzM5O20ga2VlbiB0byBlbnN1cmUgaXQmIzM5O3MgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG4gICAyOlx0I2lmbmRlZiBfVUFQSV9fTElOVVhfSUZfQUREUl9IXG4gICAzOlx0I2RlZmluZSBfVUFQSV9fTElOVVhfSUZfQUREUl9IXG4gICA0Olx0XG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdHN0cnVjdCBpZmFkZHJtc2cge1xuICAgOTpcdFx0X191OFx0XHRpZmFfZmFtaWx5O1xuICAxMDpcdFx0X191OFx0XHRpZmFfcHJlZml4bGVuO1x0LyogVGhlIHByZWZpeCBsZW5ndGhcdFx0Ki9cbiAgMTE6XHRcdF9fdThcdFx0aWZhX2ZsYWdzO1x0LyogRmxhZ3NcdFx0XHQqL1xuICAxMjpcdFx0X191OFx0XHRpZmFfc2NvcGU7XHQvKiBBZGRyZXNzIHNjb3BlXHRcdCovXG4gIDEzOlx0XHRfX3UzMlx0XHRpZmFfaW5kZXg7XHQvKiBMaW5rIGluZGV4XHRcdFx0Ki9cbiAgMTQ6XHR9O1xuICAxNTpcdFxuICAxNjpcdC8qXG4gIDE3Olx0ICogSW1wb3J0YW50IGNvbW1lbnQ6XG4gIDE4Olx0ICogSUZBX0FERFJFU1MgaXMgcHJlZml4IGFkZHJlc3MsIHJhdGhlciB0aGFuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzLlxuICAxOTpcdCAqIEl0IG1ha2VzIG5vIGRpZmZlcmVuY2UgZm9yIG5vcm1hbGx5IGNvbmZpZ3VyZWQgYnJvYWRjYXN0IGludGVyZmFjZXMsXG4gIDIwOlx0ICogYnV0IGZvciBwb2ludC10by1wb2ludCBJRkFfQUREUkVTUyBpcyBERVNUSU5BVElPTiBhZGRyZXNzLFxuICAyMTpcdCAqIGxvY2FsIGFkZHJlc3MgaXMgc3VwcGxpZWQgaW4gSUZBX0xPQ0FMIGF0dHJpYnV0ZS5cbiAgMjI6XHQgKlxuICAyMzpcdCAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXG4gIDI0Olx0ICogSWYgcHJlc2VudCwgdGhlIHZhbHVlIGZyb20gc3RydWN0IGlmYWRkcm1zZyB3aWxsIGJlIGlnbm9yZWQuXG4gIDI1Olx0ICovXG4gIDI2Olx0ZW51bSB7XG4gIDI3Olx0XHRJRkFfVU5TUEVDLFxuICAyODpcdFx0SUZBX0FERFJFU1MsXG4gIDI5Olx0XHRJRkFfTE9DQUwsXG4gIDMwOlx0XHRJRkFfTEFCRUwsXG4gIDMxOlx0XHRJRkFfQlJPQURDQVNULFxuICAzMjpcdFx0SUZBX0FOWUNBU1QsXG4gIDMzOlx0XHRJRkFfQ0FDSEVJTkZPLFxuICAzNDpcdFx0SUZBX01VTFRJQ0FTVCxcbiAgMzU6XHRcdElGQV9GTEFHUyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlmYWRkcm1zZyBTdHJ1Y3R1cmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIGl0JiMzOTtzIGdvdCB0aGUgc3RhbmRhcmQgbmV0d29yayBhZGRyZXNzIGZhbWlseSAoYGlmYV9mYW1pbHlgKSwgcHJlZml4IGxlbmd0aCAoYGlmYV9wcmVmaXhsZW5gKSwgZmxhZ3MgKGBpZmFfZmxhZ3NgKSwgc2NvcGUgKGBpZmFfc2NvcGVgKSwgYW5kIGludGVyZmFjZSBpbmRleCAoYGlmYV9pbmRleGApLiBHb29kLCBnb29kLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZSB0b3RhbCBzaXplIGlzIDggYnl0ZXMg4oCTIG5pY2UgYW5kIGNsZWFuLCBubyBwYWRkaW5nIHRvIHdvcnJ5IGFib3V0LiBBbmQgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gYGlmYV9mYW1pbHlgIHRvIGBBRl9QQUNLRVRgLCBwcmVmaXggbGVuZ3RoIHNldCB0byAwLCBgaWZhX2ZsYWdzYCBnZXRzIHRoZSByYXcgaW5wdXQuIFNjb3BlIGlzIHNldCB0byBgUlRfU0NPUEVfTElOS2AsIGFuZCB0aGUgaW5kZXggaXMgYXNzaWduZWQgdG8gdGhlIGludGVyZmFjZSYjMzk7cyBpbmRleCB2YWx1ZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBhZGRyZXNzIHBsYXlzIGludG8gdGhpcy4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBkZWFsaW5nIHdpdGggYGhhLSZndDthZGRyYCBhbmQgYGRldi0mZ3Q7YWRkcl9sZW5gLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmcmFtaW5nIHRoaXMgZGF0YS4gQnV0IHdoZXJlIGV4YWN0bHkgZG9lcyBgaGEtJmd0O2FkZHJgIGdldCBpdHMgdmFsdWVzPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBMb29rcyBsaWtlIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAgZGVmaW5pdGlvbi4gVGhhdCBzaG91bGQgaG9sZCB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgeyYjMzk7OiBVbm1hdGNoZWQgXHs8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldGRldl9od19hZGRyIHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtiYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgeyYjMzk7OiBVbm1hdGNoZWQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBzZWFyY2g6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGRlZmluaXRpb24uIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgbmV0d29ya2luZy1yZWxhdGVkIGRlZmluaXRpb25zIGFyZSB1c3VhbGx5IHR1Y2tlZCBhd2F5IGluIHRoZSBgaW5jbHVkZS9saW51eGAgZGlyZWN0b3J5LiBOb3csIHdoZXJlIHdvdWxkIHRoZSBoYXJkd2FyZSBhZGRyZXNzIHN0cnVjdHVyZSByZXNpZGU/IExvZ2ljYWxseSwgaXTigJlsbCBiZSBpbiBgbmV0ZGV2aWNlLmhgLiBJJiMzOTtsbCBydW4gYSBxdWljayBzZWFyY2ggZm9yIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzIGFib3V0IGl0cyB1c2FnZSB3aXRoaW4gdGhlIGtlcm5lbCBuZXR3b3JraW5nIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RydWN0dXJlJiMzOTtzIG1lbWJlcnMsIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBtYWNyb3MsIGFuZCBwZXJoYXBzIHNvbWUgaW5zaWdodGZ1bCBjb21tZW50cyBvbiBob3cgaXQmIzM5O3MgdXNlZCB0byBtYW5hZ2UgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciBuZXR3b3JrIGludGVyZmFjZXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRkZXZfaHdfYWRkclxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMzU9c3RydWN0IHNrX2J1ZmY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBIZWFkZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjM3LiBJJiMzOTttIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIEkmIzM5O20gbG9va2luZyBmb3IgcmVnYXJkaW5nIHRoZSBiYXNpYyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBzZXR1cCByb3V0aW5lcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZWxlbWVudHMgbGlrZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHF1ZXVlcywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHBvaW50ZXJzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRzdHJ1Y3Qgc2tfYnVmZjtcbiAyMzY6XHRcbiAyMzc6XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xuIDIzODpcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiAyMzk6XHRcdHN0cnVjdCByYl9ub2RlXHRcdG5vZGU7XG4gMjQwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdGFkZHJbTUFYX0FERFJfTEVOXTtcbiAyNDE6XHRcdHVuc2lnbmVkIGNoYXJcdFx0dHlwZTtcbiAyNDI6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXHRcdDFcbiAyNDM6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfU0FOXHRcdDJcbiAyNDQ6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVFx0M1xuIDI0NTpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1RcdDRcbiAyNDY6XHRcdGJvb2xcdFx0XHRnbG9iYWxfdXNlO1xuIDI0NzpcdFx0aW50XHRcdFx0c3luY19jbnQ7XG4gMjQ4Olx0XHRpbnRcdFx0XHRyZWZjb3VudDtcbiAyNDk6XHRcdGludFx0XHRcdHN5bmNlZDtcbiAyNTA6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3VfaGVhZDtcbiAyNTE6XHR9O1xuIDI1MjpcdFxuIDI1MzpcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0IHtcbiAyNTQ6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjU1Olx0XHRpbnRcdFx0XHRjb3VudDtcbiAyNTY6XHRcbiAyNTc6XHRcdC8qIEF1eGlsaWFyeSB0cmVlIGZvciBmYXN0ZXIgbG9va3VwIG9uIGFkZGl0aW9uIGFuZCBkZWxldGlvbiAqL1xuIDI1ODpcdFx0c3RydWN0IHJiX3Jvb3RcdFx0dHJlZTtcbiAyNTk6XHR9O1xuIDI2MDpcdFxuIDI2MTpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSAoKGwpLVx1MDAzZWNvdW50KVxuIDI2MjpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9lbXB0eShsKSAobmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChsKSA9PSAwKVxuIDI2MzpcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcbiAyNjQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaGEsIFx1MDAyNihsKS1cdTAwM2VsaXN0LCBsaXN0KVxuIDI2NTpcdFxuIDI2NjpcdCNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChcdTAwMjYoZGV2KS1cdTAwM2V1YylcbiAyNjc6XHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjY4Olx0I2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSBcXFxuIDI2OTpcdFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXHUwMDI2KGRldiktXHUwMDNldWMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1BQyBBZGRyZXNzIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhZGRpdGlvbiBvZiBgaGFgIOKAkyBsaWtlbHkgYSBoYXJkd2FyZSBhZGRyZXNzIOKAkyBpbnRvIGBkZXYtJmd0O21jYCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyByZWZlcnMgdG8gdGhlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3QgZm9yIGEgbmV0d29yayBkZXZpY2UgKGBkZXZgKS4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdoZXJlIGRldmljZSBhZGRyZXNzIG1hbmFnZW1lbnQgaXMgaGFuZGxlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIHRoaXMgbG9naWMgYmVmb3JlLCBwcm9iYWJseSBzb21ld2hlcmUgaW4gYG5ldC9jb3JlL2AuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSBpbnRvIGBkZXZfYWRkcl9saXN0cy5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nLiBXaXRoaW4gdGhhdCBmaWxlLCBJJiMzOTtsbCBzdGFydCB3aXRoIGEgZmV3IHNlYXJjaCBxdWVyaWVzLCBhaW1pbmcgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgdGhpcyBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHRyeSBzZWFyY2hpbmcgZm9yIGBkZXZfbWNfYWRkYCBmaXJzdCwgYnV0IEkgbWlnaHQgYWxzbyBjYXN0IGEgd2lkZXIgbmV0IHdpdGggc29tZXRoaW5nIGxpa2UgYF9faHdfYWRkcl9hZGRgIG9yIGFueXRoaW5nIHRoYXQgc3VnZ2VzdHMgaGFyZHdhcmUgYWRkcmVzcyBhZGRpdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgbG93IGxldmVsIG1hbmFnZW1lbnQuIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBmYWlybHkgc3RyYWlnaHQgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19od19hZGRyXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjM6c3RhdGljIGludCBfX2h3X2FkZHJfaW5zZXJ0KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNC1cdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpuZXcsIGludCBhZGRyX2xlbilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUyPXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjUzOl9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NC1cdFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCwgYm9vbCBzeW5jKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwOlx0aGEgPSBfX2h3X2FkZHJfY3JlYXRlKGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGdsb2JhbCwgc3luYyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMS1cdGlmICghaGEpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzItXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMzpzdGF0aWMgaW50IF9faHdfYWRkcl9hZGQoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM2LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3Olx0cmV0dXJuIF9faHdfYWRkcl9hZGRfZXgobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSwgZmFsc2UsIGZhbHNlLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzgtXHRcdFx0XHQwLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE0MTpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZW50cnkoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0Mi1cdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgYm9vbCBnbG9iYWwsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNjctXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE2ODpzdGF0aWMgc3RydWN0IG5ldGRldl9od19hZGRyICpfX2h3X2FkZHJfbG9va3VwKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNjktXHRcdFx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xOTMtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE5NDpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE5NS1cdFx0XHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTk3LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTk4Olx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYSA9IF9faHdfYWRkcl9sb29rdXAobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE5OS1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwMS1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIwMjpcdHJldHVybiBfX2h3X2FkZHJfZGVsX2VudHJ5KGxpc3QsIGhhLCBnbG9iYWwsIHN5bmMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMDMtfVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMDQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIwNTpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWwoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwNi1cdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjA4LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjA5Olx0cmV0dXJuIF9faHdfYWRkcl9kZWxfZXgobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSwgZmFsc2UsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjEwLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjExLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMTI6c3RhdGljIGludCBfX2h3X2FkZHJfc3luY19vbmUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnRvX2xpc3QsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxMy1cdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIzMC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjMxOnN0YXRpYyB2b2lkIF9faHdfYWRkcl91bnN5bmNfb25lKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMzItXHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmZyb21fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIzNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjM4Olx0ZXJyID0gX19od19hZGRyX2RlbF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjM5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNDMtXHQvKiBhZGRyZXNzIG9uIGZyb20gbGlzdCBpcyBub3QgbWFya2VkIHN5bmNlZCAqL1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNDQ6XHRfX2h3X2FkZHJfZGVsX2VudHJ5KGZyb21fbGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0NS19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0Ni1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjQ3OmludCBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjQ4LVx0XHRcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjU1LVx0XHRpZiAoaGEtXHUwMDNlc3luY19jbnQgPT0gaGEtXHUwMDNlcmVmY291bnQpIHtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjU2Olx0XHRcdF9faHdfYWRkcl91bnN5bmNfb25lKHRvX2xpc3QsIGZyb21fbGlzdCwgaGEsIGFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjU3LVx0XHR9IGVsc2Uge1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNTg6XHRcdFx0ZXJyID0gX19od19hZGRyX3N5bmNfb25lKHRvX2xpc3QsIGhhLCBhZGRyX2xlbik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI1OS1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjY0LX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjY1OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3N5bmNfbXVsdGlwbGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjYtXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjktICogc3luYyBhZGRyZXNzZXMgdG8gbW9yZSB0aGVuIDEgZGVzdGluYXRpb24sIHlvdSBuZWVkIHRvIHVzZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNzA6ICogX19od19hZGRyX3N5bmNfbXVsdGlwbGUoKS5cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjcxLSAqL1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNzI6aW50IF9faHdfYWRkcl9zeW5jKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNzMtXHRcdCAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpmcm9tX2xpc3QsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODAtXHRcdGlmICghaGEtXHUwMDNlc3luY19jbnQpIHtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjgxOlx0XHRcdGVyciA9IF9faHdfYWRkcl9zeW5jX29uZSh0b19saXN0LCBoYSwgYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODItXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4NC1cdFx0fSBlbHNlIGlmIChoYS1cdTAwM2VyZWZjb3VudCA9PSAxKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyODU6XHRcdFx0X19od19hZGRyX3Vuc3luY19vbmUodG9fbGlzdCwgZnJvbV9saXN0LCBoYSwgYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODYtXHR9XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yODgtfVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyODk6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfc3luYyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI5MC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjkxOnZvaWQgX19od19hZGRyX3Vuc3luYyhzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjkyLVx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjk4LVx0XHRpZiAoaGEtXHUwMDNlc3luY19jbnQpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjI5OTpcdFx0XHRfX2h3X2FkZHJfdW5zeW5jX29uZSh0b19saXN0LCBmcm9tX2xpc3QsIGhhLCBhZGRyX2xlbik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMwMC1cdH1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzAxLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzAyOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luYyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMwMy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzA0LS8qKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMDU6ICogIF9faHdfYWRkcl9zeW5jX2RldiAtIFN5bmNocm9uaXplIGRldmljZSYjMzk7cyBtdWx0aWNhc3QgbGlzdFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDYtICogIEBsaXN0OiBhZGRyZXNzIGxpc3QgdG8gc3luY2hyb25pemVcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMxNi0gKiovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjMxNzppbnQgX19od19hZGRyX3N5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMTgtXHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzM1LVx0XHRoYS1cdTAwM2VzeW5jX2NudC0tO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMzY6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMzNy1cdH1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1My19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjM1NDpFWFBPUlRfU1lNQk9MKF9faHdfYWRkcl9zeW5jX2Rldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1NS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU2LS8qKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozNTc6ICogIF9faHdfYWRkcl9yZWZfc3luY19kZXYgLSBTeW5jaHJvbml6ZSBkZXZpY2UmIzM5O3MgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCB0YWtpbmdcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU4LSAqICBpbnRvIGFjY291bnQgcmVmZXJlbmNlc1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzcxLSAqKi9cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzcyOmludCBfX2h3X2FkZHJfcmVmX3N5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zNzMtXHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM5NC1cdFx0aGEtXHUwMDNlc3luY19jbnQgPSByZWZfY250O1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozOTU6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM5Ni1cdH1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQxNC19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQxNTpFWFBPUlRfU1lNQk9MKF9faHdfYWRkcl9yZWZfc3luY19kZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MTYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQxNy0vKipcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDE4OiAqICBfX2h3X2FkZHJfcmVmX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBhbmQgcmVmZXJlbmNlcyBvblxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MTktICogIGl0IGZyb20gZGV2aWNlXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MjQtICogIFJlbW92ZSBhbGwgYWRkcmVzc2VzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGJ5XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQyNTogKiAgX19od19hZGRyX3JlZl9zeW5jX2RldigpLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MjYtICogIG5kb19zdG9wIG9yIG5kb19vcGVuIGZ1bmN0aW9ucyBvbiBkZXZpY2VzIHRoYXQgcmVxdWlyZSBleHBsaWNpdCBhZGRyZXNzIChvclxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDMwLSAqKi9cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDMxOnZvaWQgX19od19hZGRyX3JlZl91bnN5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MzItXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ0Ny1cdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0NDg6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ0OS1cdH1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDUwLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDUxOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3JlZl91bnN5bmNfZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDUyLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NTMtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ1NDogKiAgX19od19hZGRyX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBmcm9tIGRldmljZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NTUtICogIEBsaXN0OiBhZGRyZXNzIGxpc3QgdG8gcmVtb3ZlIHN5bmNocm9uaXplZCBhZGRyZXNzZXMgZnJvbVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDU4LSAqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ1OTogKiAgUmVtb3ZlIGFsbCBhZGRyZXNzZXMgdGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBkZXZpY2UgYnkgX19od19hZGRyX3N5bmNfZGV2KCkuXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ2MC0gKiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbmRvX3N0b3Agb3IgbmRvX29wZW5cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ2NC0gKiovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ2NTp2b2lkIF9faHdfYWRkcl91bnN5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NjYtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDgwLVx0XHRoYS1cdTAwM2VzeW5jX2NudC0tO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0ODE6XHRcdF9faHdfYWRkcl9kZWxfZW50cnkobGlzdCwgaGEsIGZhbHNlLCBmYWxzZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ4Mi1cdH1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDgzLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDg0OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luY19kZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00ODUtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ4Njp2b2lkIF9faHdfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdClcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDg3LXtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ5Ni19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ5NzpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKF9faHdfYWRkcl9mbHVzaCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ5OC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDk5OnZvaWQgX19od19hZGRyX2luaXQoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwMC17XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MDQtfVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MDU6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfaW5pdCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwNi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTA3OnN0YXRpYyB2b2lkIF9faHdfYWRkcl9zcGxpY2Uoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmRzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTA4LVx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnNyYylcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUxNi0vKipcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTE3OiAqICBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdCAtIGNyZWF0ZSBhIHNuYXBzaG90IGNvcHkgb2YgYW4gYWRkcmVzcyBsaXN0XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjUxODogKiAgQHNuYXA6IGRlc3RpbmF0aW9uIHNuYXBzaG90IGxpc3QgKG5lZWRzIHRvIGJlIF9faHdfYWRkcl9pbml0LWluaXRpYWxpemVkKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MTktICogIEBsaXN0OiBzb3VyY2UgYWRkcmVzcyBsaXN0IHRvIHNuYXBzaG90XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MjctICovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjUyODppbnQgX19od19hZGRyX2xpc3Rfc25hcHNob3Qoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnNuYXAsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUyOS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NDQtXHRcdH0gZWxzZSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU0NTpcdFx0XHRlbnRyeSA9IF9faHdfYWRkcl9jcmVhdGUoaGEtXHUwMDNlYWRkciwgYWRkcl9sZW4sIGhhLVx1MDAzZXR5cGUsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU0Ni1cdFx0XHRcdFx0XHQgZmFsc2UsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTQ3LVx0XHRcdGlmICghZW50cnkpIHtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTQ4Olx0XHRcdFx0X19od19hZGRyX2ZsdXNoKHNuYXApO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NDktXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU1NS1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZzbmFwLVx1MDAzZWxpc3QpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1NTY6XHRcdF9faHdfYWRkcl9pbnNlcnQoc25hcCwgZW50cnksIGFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTU3LVx0XHRzbmFwLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2MS19XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU2MjpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKF9faHdfYWRkcl9saXN0X3NuYXBzaG90KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTYzLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NjQtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU2NTogKiAgX19od19hZGRyX2xpc3RfcmVjb25jaWxlIC0gc3luYyBzbmFwc2hvdCBjaGFuZ2VzIGJhY2sgYW5kIGZyZWUgc25hcHNob3RzXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2Ni0gKiAgQHJlYWxfbGlzdDogdGhlIHJlYWwgYWRkcmVzcyBsaXN0IHRvIHVwZGF0ZVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1Njc6ICogIEB3b3JrOiB0aGUgd29ya2luZyBzbmFwc2hvdCAobW9kaWZpZWQgYnkgZHJpdmVyIHZpYSBfX2h3X2FkZHJfc3luY19kZXYpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2OC0gKiAgQHJlZjogdGhlIHJlZmVyZW5jZSBzbmFwc2hvdCAodW50b3VjaGVkIGNvcHkgb2Ygb3JpZ2luYWwgc3RhdGUpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NzYtICovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU3Nzp2b2lkIF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqcmVhbF9saXN0LFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NzgtXHRcdFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKndvcmssXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01ODUtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmX2hhLCB0bXAsIFx1MDAyNnJlZi1cdTAwM2VsaXN0LCBsaXN0KSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU4NjpcdFx0d29ya19oYSA9IF9faHdfYWRkcl9sb29rdXAod29yaywgcmVmX2hhLVx1MDAzZWFkZHIsIGFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01ODctXHRcdFx0XHRcdCAgIHJlZl9oYS1cdTAwM2V0eXBlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU5NS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTk2Olx0XHRyZWFsX2hhID0gX19od19hZGRyX2xvb2t1cChyZWFsX2xpc3QsIHJlZl9oYS1cdTAwM2VhZGRyLCBhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTk3LVx0XHRcdFx0XHQgICByZWZfaGEtXHUwMDNldHlwZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02MTEtXHRcdFx0XHRcdFx0ICBcdTAwMjZyZWFsX2xpc3QtXHUwMDNlbGlzdCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjYxMjpcdFx0XHRcdF9faHdfYWRkcl9pbnNlcnQocmVhbF9saXN0LCByZWZfaGEsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTYxMy1cdFx0XHRcdFx0XHQgYWRkcl9sZW4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjI4LVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Mjk6XHRfX2h3X2FkZHJfc3BsaWNlKGNhY2hlLCB3b3JrKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjMwOlx0X19od19hZGRyX3NwbGljZShjYWNoZSwgcmVmKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjMxLX1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjMyOkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoX19od19hZGRyX2xpc3RfcmVjb25jaWxlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjMzLVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NjYxPXZvaWQgZGV2X2FkZHJfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2NS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjY2Olx0X19od19hZGRyX2ZsdXNoKFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjctXHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9Njc5PWludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4NzpcdF9faHdfYWRkcl9pbml0KFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODgtXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njg5Olx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5MC1cdFx0XHQgICAgTkVUREVWX0hXX0FERFJfVF9MQU4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzAzPXZvaWQgZGV2X2FkZHJfbW9kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTMtXHRtZW1jcHkoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRyX3NoYWRvd1tvZmZzZXRdLCBhZGRyLCBsZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3MTQ6XHRXQVJOX09OKF9faHdfYWRkcl9pbnNlcnQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgaGEsIGRldi1cdTAwM2VhZGRyX2xlbikpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTUtfVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzI5PWludCBkZXZfYWRkcl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTczOC1cdFx0cmV0dXJuIGVycjtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzM5Olx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sIGFkZHJfdHlwZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0MC1cdGlmICghZXJyKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzU3PWludCBkZXZfYWRkcl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc3NC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzc1Olx0ZXJyID0gX19od19hZGRyX2RlbChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc3Ni1cdFx0XHQgICAgYWRkcl90eXBlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODM3PWludCBkZXZfdWNfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04NDEtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODQyOlx0ZXJyID0gX19od19hZGRyX2RlbChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODQzLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODY0PWludCBkZXZfdWNfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODcxLVx0bmV0aWZfYWRkcl9sb2NrKHRvKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODcyOlx0ZXJyID0gX19od19hZGRyX3N5bmMoXHUwMDI2dG8tXHUwMDNldWMsIFx1MDAyNmZyb20tXHUwMDNldWMsIHRvLVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODczLVx0aWYgKCFlcnIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04OTQ9aW50IGRldl91Y19zeW5jX211bHRpcGxlKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05MDEtXHRuZXRpZl9hZGRyX2xvY2sodG8pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5MDI6XHRlcnIgPSBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShcdTAwMjZ0by1cdTAwM2V1YywgXHUwMDI2ZnJvbS1cdTAwM2V1YywgdG8tXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05MDMtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTkxOT12b2lkIGRldl91Y191bnN5bmMoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSlcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkzNC1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjkzNTpcdF9faHdfYWRkcl91bnN5bmMoXHUwMDI2dG8tXHUwMDNldWMsIFx1MDAyNmZyb20tXHUwMDNldWMsIHRvLVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTM2LVx0X19kZXZfc2V0X3J4X21vZGUodG8pO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTQ4PXZvaWQgZGV2X3VjX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NTAtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTUxOlx0X19od19hZGRyX2ZsdXNoKFx1MDAyNmRldi1cdTAwM2V1Yyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk1Mi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05NjI9dm9pZCBkZXZfdWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NjMte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5NjQ6XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZkZXYtXHUwMDNldWMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NjUtfVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMDMzPXN0YXRpYyBpbnQgX19kZXZfbWNfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDM4LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEwMzk6XHRlcnIgPSBfX2h3X2FkZHJfZGVsX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDQwLVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgZ2xvYmFsLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMDg3PWludCBkZXZfbWNfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTA5NC1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEwOTU6XHRlcnIgPSBfX2h3X2FkZHJfc3luYyhcdTAwMjZ0by1cdTAwM2VtYywgXHUwMDI2ZnJvbS1cdTAwM2VtYywgdG8tXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDk2LVx0aWYgKCFlcnIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTE3PWludCBkZXZfbWNfc3luY19tdWx0aXBsZShzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTEyNC1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExMjU6XHRlcnIgPSBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShcdTAwMjZ0by1cdTAwM2VtYywgXHUwMDI2ZnJvbS1cdTAwM2VtYywgdG8tXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTI2LVx0aWYgKCFlcnIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTQyPXZvaWQgZGV2X21jX3Vuc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE0OS1cdG5ldGlmX2FkZHJfbG9jayh0byk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNTA6XHRfX2h3X2FkZHJfdW5zeW5jKFx1MDAyNnRvLVx1MDAzZW1jLCBcdTAwMjZmcm9tLVx1MDAzZW1jLCB0by1cdTAwM2VhZGRyX2xlbik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExNTEtXHRfX2Rldl9zZXRfcnhfbW9kZSh0byk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTYzPXZvaWQgZGV2X21jX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTY1LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNjY6XHRfX2h3X2FkZHJfZmx1c2goXHUwMDI2ZGV2LVx1MDAzZW1jKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE2Ny1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTc3PXZvaWQgZGV2X21jX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE3OC17XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNzk6XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZkZXYtXHUwMDNlbWMpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTgwLX1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTExODM9c3RhdGljIGludCBuZXRpZl9hZGRyX2xpc3RzX3NuYXBzaG90KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTkwLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTkxOlx0ZXJyID0gX19od19hZGRyX2xpc3Rfc25hcHNob3QodWNfc25hcCwgXHUwMDI2ZGV2LVx1MDAzZXVjLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTItXHRcdFx0XHQgICAgICBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5My1cdGlmICghZXJyKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTk0Olx0XHRlcnIgPSBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdCh1Y19yZWYsIFx1MDAyNmRldi1cdTAwM2V1YywgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTk1LVx0XHRcdFx0XHQgICAgICBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5Ni1cdGlmICghZXJyKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTk3Olx0XHRlcnIgPSBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdChtY19zbmFwLCBcdTAwMjZkZXYtXHUwMDNlbWMsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTgtXHRcdFx0XHRcdCAgICAgIGRldi1cdTAwM2VhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMDAtXHRpZiAoIWVycilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwMTpcdFx0ZXJyID0gX19od19hZGRyX2xpc3Rfc25hcHNob3QobWNfcmVmLCBcdTAwMjZkZXYtXHUwMDNlbWMsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIwMi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjA0LVx0aWYgKGVycikge1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjA1Olx0XHRfX2h3X2FkZHJfZmx1c2godWNfc25hcCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMDY6XHRcdF9faHdfYWRkcl9mbHVzaCh1Y19yZWYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjA3Olx0XHRfX2h3X2FkZHJfZmx1c2gobWNfc25hcCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMDgtXHR9XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjEzPXN0YXRpYyB2b2lkIG5ldGlmX2FkZHJfbGlzdHNfcmVjb25jaWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjE4LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIxOTpcdF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShcdTAwMjZkZXYtXHUwMDNldWMsIHVjX3NuYXAsIHVjX3JlZiwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjIwLVx0XHRcdFx0IFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjIxOlx0X19od19hZGRyX2xpc3RfcmVjb25jaWxlKFx1MDAyNmRldi1cdTAwM2VtYywgbWNfc25hcCwgbWNfcmVmLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyMjItXHRcdFx0XHQgXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjc3PXZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyODYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyODc6XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZ1Y19zbmFwKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI4ODpcdF9faHdfYWRkcl9pbml0KFx1MDAyNm1jX3NuYXApO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjg5Olx0X19od19hZGRyX2luaXQoXHUwMDI2dWNfcmVmKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5MDpcdF9faHdfYWRkcl9pbml0KFx1MDAyNm1jX3JlZik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTEtXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMzQ4PXZvaWQgbmV0aWZfcnhfbW9kZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNDkte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzUwOlx0X19od19hZGRyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNTEtXHR0aW1lcl9zZXR1cChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9yZXRyeV90aW1lciwgbmV0aWZfcnhfbW9kZV9yZXRyeSwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYF9faHdfYWRkcl9jcmVhdGVgIGluIGBkZXZfYWRkcl9saXN0cy5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9faHdfYWRkcl9jcmVhdGVgIHdpdGhpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuICBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHNvIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGxpbmVzIDUwLTc1IG9mIHRoZSBzb3VyY2UgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gZG9lcyB3aXRoaW4gdGhpcyBmaWxlLCBhcyBgZGV2X2FkZHJfbGlzdHMuY2AgaXMgaW1wb3J0YW50IGZvciBoYW5kbGluZyBuZXR3b3JrIGRldmljZSBhZGRyZXNzIGxpc3RzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIGxpbmVzIGJlY2F1c2UgdGhleSBsaWtlbHkgY29udGFpbiB0aGUgY29yZSBsb2dpYyBvciBpbml0aWFsIHNldHVwIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzLCBhbmQgSSBjYW4gcXVpY2tseSBncm9rIHRoZSBkZXRhaWxzIHRvIHN0YXJ0IG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0fVxuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG4gIDUzOlx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4gIDU0Olx0XHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuICA1NzpcdFx0aW50IGFsbG9jX3NpemU7XG4gIDU4Olx0XG4gIDU5Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XG4gIDYwOlx0XHRpZiAoYWxsb2Nfc2l6ZSBcdTAwM2MgTDFfQ0FDSEVfQllURVMpXG4gIDYxOlx0XHRcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcbiAgNjI6XHRcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcbiAgNjM6XHRcdGlmICghaGEpXG4gIDY0Olx0XHRcdHJldHVybiBOVUxMO1xuICA2NTpcdFx0bWVtY3B5KGhhLVx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcbiAgNjY6XHRcdGhhLVx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XG4gIDY3Olx0XHRoYS1cdTAwM2VyZWZjb3VudCA9IDE7XG4gIDY4Olx0XHRoYS1cdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xuICA2OTpcdFx0aGEtXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xuICA3MDpcdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIGhhO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE11bHRpY2FzdCBBZGRyZXNzIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvcHlpbmcgdGhlIGFkZHJlc3MgZGF0YSBhbmQgaG93IGl0JiMzOTtzIHRoZW4gcGxhY2VkIGludG8gYSBuZXRsaW5rIG1lc3NhZ2UuIFRoZSBjb3JlIG9mIG15IGNvbmNlcm4gYm9pbHMgZG93biB0byB0aGlzOiBgX19od19hZGRyX2NyZWF0ZWAgdXNlcyBgbWVtY3B5YCB0byBjb3B5IGBhZGRyX2xlbmAgYnl0ZXMgaW50byBgaGEtJmd0O2FkZHJgLCBhbmQgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZW4sIGluIGBydG5sX2ZpbGxfbWNhZGRyYCwgd2UgdXNlIGBubGFfcHV0YCB0byBwbGFjZSB0aGUgZGF0YSBpbnRvIGEgbmV0bGluayBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgSUZBX01VTFRJQ0FTVGAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBubGFfcHV0YCB0YWtlcyBgZGV2LSZndDthZGRyX2xlbmAgYXMgdGhlIGxlbmd0aCwgYW5kLCBzaW5jZSBgYWRkcl9sZW5gIGVxdWFscyBgZGV2LSZndDthZGRyX2xlbmAsIGFsbCBzaG91bGQgYmUgd2VsbC4gQnV0IHdhaXQsIEkgcmVjYWxsIGBubGFfcHV0YCYjMzk7cyBiZWhhdmlvciBpcyB0byB6ZXJvLXBhZCBhbnkgYWxpZ25tZW50IGJ5dGVzLiBTbyB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGJ5dGVzIGlzIHdyaXR0ZW4sIHdpdGggdGhlIHJlc3QgcGFkZGVkIHdpdGggMC4KCk5vdywgSSYjMzk7bSBjaGVja2luZyBgcnRubF9kdW1wX21jYWRkcmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHVtcGluZyBwcm9jZXNzIHdvcmtzIHRvIGFzc2VzcyBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkaXNjcmVwYW5jaWVzLiBJIHNlZSB0aGF0IGBydG5sX2R1bXBfbWNhZGRyYCB1c2VzIGEgYG5ldGxpbmtfY2FsbGJhY2tgIHN0cnVjdHVyZSwgYGNiYCwgd2hpY2ggY29udGFpbnMgY29udGV4dCBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29udGV4dCBpcyB1c2VkIGFuZCBpZiBhbnkgaW5pdGlhbGl6YXRpb24gZXJyb3JzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLgoKQWhhISBgY2ItJmd0O2N0eGAgaXMgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBkdW1wLCBhbmQgYGN0eC0mZ3Q7aWZpbmRleGAgYW5kIGBjdHgtJmd0O2FkZHJfaWR4YCBhcmUgdXNlZCB0byB0cmFjayB0aGUgcHJvZ3Jlc3MuIFNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBpdGVyYXRpb24gdGVjaG5pcXVlIGZvciBkdW1wcyBhbmQgZG9lc24mIzM5O3QgZGlyZWN0bHkgcmFpc2UgcmVkIGZsYWdzIHJlZ2FyZGluZyB0aGUgbWVtb3J5IGNvcHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYGZvcl9lYWNoX25ldGRldl9kdW1wYCBsb29wIHdvcmtzIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9yX2VhY2hfbmV0ZGV2X2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXByb2Nmcy5jPTEwPXN0YXRpYyB2b2lkICpkZXZfc2VxX2Zyb21faW5kZXgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNC1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYzoxNTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHNlcV9maWxlX25ldChzZXEpLCBkZXYsIGlmaW5kZXgpIHtcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNi1cdFx0KnBvcyA9IGRldi1cdTAwM2VpZmluZGV4O1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM9ODE9bmV0ZGV2X25sX3BhZ2VfcG9vbF9nZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYy05OC1cdG11dGV4X2xvY2soXHUwMDI2cGFnZV9wb29sc19sb2NrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM6OTk6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIG5ldGRldiwgc3RhdGUtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYy0xMDAtXHRcdC8qIEVpdGhlciB0aGUgcHJvdmlkZWQgaWZpbmRleCBkb2VzbiYjMzk7dCBleGlzdCBvciBkb25lIGR1bXBpbmcgKi9cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTQ0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxNi1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MTc6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjE4LVx0XHRpZiAobGlua19kdW1wX2ZpbHRlcmVkKGRldiwgbWFzdGVyX2lkeCwga2luZF9vcHMpKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ2ODU9c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzE4LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDcxOTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzIwLVx0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMwNz1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMzYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1MzM3Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzM4LVx0XHRpZiAoYnJwb3J0X2lkeCBcdTAwMjZcdTAwMjYgKGRldi1cdTAwM2VpZmluZGV4ICE9IGJycG9ydF9pZHgpKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTY2NDA9c3RhdGljIGludCBydG5sX3N0YXRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NzEtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo2NjcyOlx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy02NjczLVx0XHRlcnIgPSBydG5sX2ZpbGxfc3RhdHNpbmZvKHNrYiwgZGV2LCBSVE1fTkVXU1RBVFMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqRXhhbWluaW5nIHJ0bmV0bGluay5jJiMzOTtzIFVzYWdlIG9mICYjMzk7Y3R4JiMzOTsqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGFyZSB3ZSBzZWVpbmcgYGN0eGAgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBgcnRubF9kdW1wX2lmaW5mb2AgZnVuY3Rpb24gYW5kIG90aGVyIHJlbGF0ZWQgZHVtcHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBmbG93IG9mIGhvdyB0aGlzIGBjdHhgIGlzIGJlaW5nIGhhbmRsZWQgd2l0aGluIHRoZSBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aHJvdWdoIGBydG5sX2R1bXBfaWZpbmZvYCBzcGVjaWZpY2FsbHksIGFuZCB0aGVuIGV4cGFuZCBteSBzZWFyY2ggdG8gb3RoZXIgc2ltaWxhciBkdW1wcyBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgY3R4YCBpcyBpbml0aWFsaXplZCwgdXNlZCBmb3IgZGF0YSByZXRyaWV2YWwsIGFuZCB1bHRpbWF0ZWx5LCB3aGV0aGVyIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYW55IGlzc3VlcyBvciBpbXByb3ZlbWVudHMgSSYjMzk7bSB0aGlua2luZyBhYm91dC4gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU0NDpcdHN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTQ1Olx0e1xuMjU0NjpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2ItXHUwMDNlZXh0YWNrO1xuMjU0NzpcdFx0c3RydWN0IHJ0bmxfbGlua19vcHMgKmtpbmRfb3BzID0gTlVMTDtcbjI1NDg6XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuMjU0OTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjI1NTA6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuMjU1MTpcdFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVgmIzQzOzFdO1xuMjU1MjpcdFx0c3RydWN0IHtcbjI1NTM6XHRcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuMjU1NDpcdFx0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4yNTU1Olx0XHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0ID0gbmV0O1xuMjU1NjpcdFx0dTMyIGV4dF9maWx0ZXJfbWFzayA9IDA7XG4yNTU3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMjU1ODpcdFx0aW50IG9wc19zcmN1X2luZGV4O1xuMjU1OTpcdFx0aW50IG1hc3Rlcl9pZHggPSAwO1xuMjU2MDpcdFx0aW50IG5ldG5zaWQgPSAtMTtcbjI1NjE6XHRcdGJvb2wgbmVlZF9ydG5sO1xuMjU2MjpcdFx0aW50IGVyciwgaTtcbjI1NjM6XHRcbjI1NjQ6XHRcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9pZmluZm9fcmVxKG5saCwgY2ItXHUwMDNlc3RyaWN0X2NoZWNrLCB0YiwgZXh0YWNrKTtcbjI1NjU6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI1NjY6XHRcdFx0aWYgKGNiLVx1MDAzZXN0cmljdF9jaGVjaylcbjI1Njc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjU2ODpcdFxuMjU2OTpcdFx0XHRnb3RvIHdhbGtfZW50cmllcztcbjI1NzA6XHRcdH1cbjI1NzE6XHRcbjI1NzI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBJRkxBX01BWDsgJiM0MzsmIzQzO2kpIHtcbjI1NzM6XHRcdFx0aWYgKCF0YltpXSlcbjI1NzQ6XHRcdFx0XHRjb250aW51ZTtcbjI1NzU6XHRcbjI1NzY6XHRcdFx0LyogbmV3IGF0dHJpYnV0ZXMgc2hvdWxkIG9ubHkgYmUgYWRkZWQgd2l0aCBzdHJpY3QgY2hlY2tpbmcgKi9cbjI1Nzc6XHRcdFx0c3dpdGNoIChpKSB7XG4yNTc4Olx0XHRcdGNhc2UgSUZMQV9UQVJHRVRfTkVUTlNJRDpcbjI1Nzk6XHRcdFx0XHRuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbaV0pO1xuMjU4MDpcdFx0XHRcdHRndF9uZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShza2ItXHUwMDNlc2ssIG5ldG5zaWQpO1xuMjU4MTpcdFx0XHRcdGlmIChJU19FUlIodGd0X25ldCkpIHtcbjI1ODI6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2UgaWRcJiMzNDspO1xuMjU4MzpcdFx0XHRcdFx0ZXJyID0gUFRSX0VSUih0Z3RfbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NjAKCQkJCQkJCW91dHB1dDogMzE2CgkJCQkJCQl0aG91Z2h0czogMjQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIFJUTkwgTXVsdGljYXN0IER1bXAgSGFuZGxlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLiBJJiMzOTt2ZSB3YWxrZWQgdGhyb3VnaCB0aGUgY29kZSwgbWV0aWN1bG91c2x5IHRyYWNpbmcgZGF0YSBmbG93LiBGaXJzdCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCB2YWxpZGF0ZXMgdGhlIHJlcXVlc3Q7IEkmIzM5O3ZlIGNoZWNrZWQgdGhhdCB0aGUgYGZpbHRlcmAgc3RydWN0dXJlIGFuZCByZWxhdGVkIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhbmQgaGFuZGxlcyBhbnkgcG90ZW50aWFsIGVycm9ycyBjb3JyZWN0bHksIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZS4gVGhlIGB0Z3RfbmV0YCBtZW1iZXIgaW4gYGZpbHRlcmAgbG9va3MgbGlrZSBpdCYjMzk7cyBwcm9wZXJseSBoYW5kbGVkLCB3aXRoIGVycm9yIHJldHVybnMgcHJldmVudGluZyB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBhbmQgZW5zdXJpbmcgYHB1dF9uZXRgIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBuZXQgbmFtZXNwYWNlIGxvb2t1cCBzdWNjZWVkcyBhbmQgdGhlIGBuZXRuc2lkYCBpcyBub24tbmVnYXRpdmUuCgpUaGVuIEkgZXhhbWluZWQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBgc3RydWN0IGlmYWRkcm1zZ2Agd2hpY2ggaXMgc2VudCB0byB1c2VyIHNwYWNlLiBJIGNvbmZpcm1lZCB0aGF0IGFsbCBpdHMgbWVtYmVycyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSB3cml0dGVuIHRvIGJlZm9yZSB0aGUgc3RydWN0dXJlIGlzIHNlbnQgYWNyb3NzLiAgVGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYElGQV9UQVJHRVRfTkVUTlNJRGAsIGBJRkFfTVVMVElDQVNUYCwgYElGQV9NQ19VU0VSU2AsIGBJRkFfRkxBR1NgKSBhbHNvIGxvb2sgc2FmZTsgdGhleSBhcmUgZWl0aGVyIHByaW1pdGl2ZSB0eXBlcyBwYXNzZWQgYnkgdmFsdWUgb3IgaGFyZHdhcmUgYWRkcmVzc2VzIGNvcGllZCBpbiBjaHVua3MgZGV0ZXJtaW5lZCBieSBgZGV2LSZndDthZGRyX2xlbmAsIHdpdGggYG5sYV9wdXRfKmAgdGFraW5nIGNhcmUgb2YgcGFkZGluZy4gSSBjYXJlZnVsbHkgYXNzZXNzZWQgZXZlcnkgZnVuY3Rpb24gKGUuZy4sIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgZXRjLikgdG8gbWFrZSBzdXJlIG5vIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBBbGwgcmVsZXZhbnQgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgSSYjMzk7dmUgY2hlY2tlZCBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhbHNvIGZvciBwYWRkaW5nIGluIGRhdGEgc3RydWN0dXJlcyBvciBuZXRsaW5rIGF0dHJpYnV0ZXMuIEkgZG9uJiMzOTt0IHNlZSBhbnkuIFRoZSBjb2RlIGFwcGVhcnMgY2xlYW4gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuCgpGaW5hbGx5LCBJIHJldmlld2VkIHRoZSBLTVNBTiBndWlkZWxpbmVzIGFuZCBjb25jbHVkZWQgdGhhdCBub25lIG9mIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gdHJ1ZSBhcHBseSBoZXJlLiAgVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgc2VudCB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBhbmQgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAsIGJlY2F1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkgY292ZXIgYW55IGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIG9yIGRldmljZSBsb29rdXAgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIFJUTV9HRVRNVUxUSUNBU1QgZHVtcCBoYW5kbGVyIGZvciBQRl9QQUNLRVQgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIG5ldC9jb3JlL3J0bmV0bGluay5jLlxuXG4xLiBOZXRsaW5rIE1lc3NhZ2UgSW5pdGlhbGl6YXRpb246IFRoZSBmaXhlZCBoZWFkZXIgYHN0cnVjdCBpZmFkZHJtc2dgIGNvbnRhaW5zIG5vIHN0cnVjdHVyZSBwYWRkaW5nICg0IHU4IGZpZWxkcyBmb2xsb3dlZCBieSBhIHUzMiBmaWVsZCwgOCBieXRlcyB0b3RhbCkgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHJ0bmxfZmlsbF9tY2FkZHIoKWAuXG4yLiBOZXRsaW5rIEF0dHJpYnV0ZXM6IEFsbCBhcHBlbmRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgdXNlIHN0YW5kYXJkIG5ldGxpbmsgaGVscGVycyAoYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfczMyYCwgYG5sYV9wdXRgKSB0aGF0IHBhc3Mgc2NhbGFyIHZhbHVlcyBvciBleGFjdGx5IGBkZXYtXHUwMDNlYWRkcl9sZW5gIGJ5dGVzIGZyb20gYGhhLVx1MDAzZWFkZHJgICh3aGljaCBpcyBpbml0aWFsaXplZCB0byBgZGV2LVx1MDAzZWFkZHJfbGVuYCB1cG9uIGNyZWF0aW9uKS4gUGFkZGluZyBhbGlnbm1lbnQgYnl0ZXMgYXJlIHplcm9lZCBieSBuZXRsaW5rIGhlbHBlcnMuXG4zLiBWYXJpYWJsZXMgXHUwMDI2IEZpbHRlcnM6IFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBhbmQgZHVtcCBjb250ZXh0IHN0YXRlIChgY3R4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiBLQVNBTi9TdGFuZGFyZCBTYW5pdGl6ZXJzOiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIFJDVS9sb2NrZGVwIHRyYXZlcnNhbCBvZiBkZXZpY2UgbGlzdHMsIG5ldHdvcmsgbmFtZXNwYWNlIHJlZmNvdW50cywgb3IgYnVmZmVyIGJvdW5kcyBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cblxuMS4gTmV0bGluayBNZXNzYWdlIEluaXRpYWxpemF0aW9uOiBUaGUgZml4ZWQgaGVhZGVyIGBzdHJ1Y3QgaWZhZGRybXNnYCBjb250YWlucyBubyBzdHJ1Y3R1cmUgcGFkZGluZyAoNCB1OCBmaWVsZHMgZm9sbG93ZWQgYnkgYSB1MzIgZmllbGQsIDggYnl0ZXMgdG90YWwpIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBydG5sX2ZpbGxfbWNhZGRyKClgLlxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVx1MDAzZWFkZHJfbGVuYCBieXRlcyBmcm9tIGBoYS1cdTAwM2VhZGRyYCAod2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxuMy4gVmFyaWFibGVzIFx1MDAyNiBGaWx0ZXJzOiBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgYW5kIGR1bXAgY29udGV4dCBzdGF0ZSAoYGN0eGApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6MjguNjQxMTYyNzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTY5NjYwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJUTV9HRVRNVUxUSUNBU1QgZHVtcCBoYW5kbGVyIGZvciBQRl9QQUNLRVQgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIG5ldC9jb3JlL3J0bmV0bGluay5jLlxcblxcbjEuIE5ldGxpbmsgTWVzc2FnZSBJbml0aWFsaXphdGlvbjogVGhlIGZpeGVkIGhlYWRlciBgc3RydWN0IGlmYWRkcm1zZ2AgY29udGFpbnMgbm8gc3RydWN0dXJlIHBhZGRpbmcgKDQgdTggZmllbGRzIGZvbGxvd2VkIGJ5IGEgdTMyIGZpZWxkLCA4IGJ5dGVzIHRvdGFsKSBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgcnRubF9maWxsX21jYWRkcigpYC5cXG4yLiBOZXRsaW5rIEF0dHJpYnV0ZXM6IEFsbCBhcHBlbmRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMgdXNlIHN0YW5kYXJkIG5ldGxpbmsgaGVscGVycyAoYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfczMyYCwgYG5sYV9wdXRgKSB0aGF0IHBhc3Mgc2NhbGFyIHZhbHVlcyBvciBleGFjdGx5IGBkZXYtXFx1MDAzZWFkZHJfbGVuYCBieXRlcyBmcm9tIGBoYS1cXHUwMDNlYWRkcmAgKHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIGBkZXYtXFx1MDAzZWFkZHJfbGVuYCB1cG9uIGNyZWF0aW9uKS4gUGFkZGluZyBhbGlnbm1lbnQgYnl0ZXMgYXJlIHplcm9lZCBieSBuZXRsaW5rIGhlbHBlcnMuXFxuMy4gVmFyaWFibGVzIFxcdTAwMjYgRmlsdGVyczogU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXJgIGFuZCBkdW1wIGNvbnRleHQgc3RhdGUgKGBjdHhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyByZWFkcyB1bmluaXRpYWxpemVkIGZpZWxkcy5cXG40LiBLQVNBTi9TdGFuZGFyZCBTYW5pdGl6ZXJzOiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIFJDVS9sb2NrZGVwIHRyYXZlcnNhbCBvZiBkZXZpY2UgbGlzdHMsIG5ldHdvcmsgbmFtZXNwYWNlIHJlZmNvdW50cywgb3IgYnVmZmVyIGJvdW5kcyBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzIGR1bXAgc3VwcG9ydCBmb3IgUEZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QgcmVxdWVzdHMgaW4gcnRuZXRsaW5rLiBUaGlzIGludHJvZHVjZXMgbmV3IHBhcnNpbmcgYW5kIGR1bXBpbmcgbG9naWMgKHJ0bmxfZHVtcF9tY2FkZHIsIHJ0bmxfZHVtcF9tY2FkZHJfZGV2LCBydG5sX2ZpbGxfbWNhZGRyLCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBORVRMSU5LX1JPVVRFIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjI4LjY0MTE2NzY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3NjUzNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWNiZDY1Mzg4MTg4NDM5ZDllZTJmNDhjMTQ4YTdkZjZiYzQzMWMzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuaW5kZXggMGVjYmQyNGM4OTBjNi4uYWRmODJiNjlhZGU3OCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxcbkBAIC03Nyw2ICs3Nyw4IEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHN0YWJsZS1wcml2YWN5XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBnbG9iYWxcXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTE5LDcgKzEyMSw3IEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogdGFyZ2V0LW5ldG5zaWRcXG4tICAgICAgICB0eXBlOiBiaW5hcnlcXG4rICAgICAgICB0eXBlOiBzMzJcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHByb3RvXFxuICAgICAgICAgdHlwZTogdThcXG5AQCAtMTY4LDcgKzE3MCwxMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcXG4gICAgIC1cXG4gICAgICAgbmFtZTogZ2V0bXVsdGljYXN0XFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cXG4rICAgICAgZG9jOiB8XFxuKyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IHNlbGVjdHMgdGhlIGFkZHJlc3NcXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxcbisgICAgICAgIGEgZGV2aWNlLCBBRl9QQUNLRVQgZm9yIHRoZSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gdGhlXFxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIGV4cGxpY2l0bHksIGUuZy4gd2l0aFxcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcXFwiYnJpZGdlIGZkYiBhZGQgLi4uIHNlbGZcXFwiLCByYXRoZXIgdGhhbiBieSBhXFxuKyAgICAgICAgcHJvdG9jb2wgam9pbiBhcmUgcmVwb3J0ZWQgd2l0aCB0aGUgZ2xvYmFsIGZsYWcgc2V0LlxcbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXFxuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXFxuICAgICAgIGRvOlxcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIG11bHRpY2FzdFxcbiAgICAgICAgICAgICAtIG1jLXVzZXJzXFxuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gZmxhZ3NcXG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIHRhcmdldC1uZXRuc2lkXFxuICAgICAgICAgcmVwbHk6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICptY2FkZHItYXR0cnNcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG5pbmRleCA3ZmI2MzBiN2ZlMzExLi4wYTFhZDllYmI0N2JlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuQEAgLTU3LDYgKzU3LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURVxcdDB4MjAwXFxuICNkZWZpbmUgSUZBX0ZfTUNBVVRPSk9JTlxcdDB4NDAwXFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcXHQweDgwMFxcbisjZGVmaW5lIElGQV9GX0dMT0JBTFxcdFxcdDB4MTAwMFxcbiBcXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xcbiBcXHRfX3UzMlxcdGlmYV9wcmVmZXJlZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmY1NGU5Y2IzYmYzMGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC00NTY2LDYgKzQ1NjYsMTY5IEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdHJldHVybiBza2ItXFx1MDAzZWxlbiA/IDogcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXFxuK1xcdFxcdFxcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxcbit7XFxuK1xcdHUzMiBpZmFfZmxhZ3MgPSBoYS1cXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX0dMT0JBTCA6IDA7XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFx0c3RydWN0IG5sbXNnaGRyICpubGg7XFxuK1xcbitcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxcbitcXHRcXHRcXHRmbGFncyk7XFxuK1xcdGlmICghbmxoKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XFxuK1xcdC8qIGlmbS1cXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXFxuK1xcdGlmbS1cXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XFxuK1xcdGlmbS1cXHUwMDNlaWZhX2luZGV4ID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbitcXG4rXFx0aWYgKChuZXRuc2lkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XFxuK1xcdCAgICBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcXG4rXFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4rXFx0aW50IGFkZHJfaWR4ID0gMDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xcbitcXHRcXHRpZiAoYWRkcl9pZHggXFx1MDAzYyAqc19hZGRyX2lkeCkge1xcbitcXHRcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2ZpbGxfbWNhZGRyKHNrYiwgZGV2LCBoYSwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLCBuZXRuc2lkKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRhZGRyX2lkeCsrO1xcbitcXHR9XFxuK1xcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XFxuK1xcbitcXHQqc19hZGRyX2lkeCA9IGVyciBcXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIge1xcbitcXHRzdHJ1Y3QgbmV0ICp0Z3RfbmV0O1xcbitcXHRpbnQgbmV0bnNpZDtcXG4rXFx0aW50IGlmaW5kZXg7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9tY2FkZHJfZHVtcF9wb2xpY3lbSUZBX01BWCArIDFdID0ge1xcbitcXHRbSUZBX1RBUkdFVF9ORVROU0lEXVxcdD0geyAudHlwZSA9IE5MQV9TMzIgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYICsgMV07XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xcbitcXHRpZiAoIWlmbSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpZm0tXFx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVxcdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVxcdTAwM2VpZmFfc2NvcGUpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLFxcbitcXHRcXHRcXHQgIHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5LCBleHRhY2spO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmICh0YltJRkFfVEFSR0VUX05FVE5TSURdKSB7XFxuK1xcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4rXFxuK1xcdFxcdGZpbHRlci1cXHUwMDNlbmV0bnNpZCA9IG5sYV9nZXRfczMyKHRiW0lGQV9UQVJHRVRfTkVUTlNJRF0pO1xcbitcXHRcXHRuZXQgPSBydG5sX2dldF9uZXRfbnNfY2FwYWJsZShzaywgZmlsdGVyLVxcdTAwM2VuZXRuc2lkKTtcXG4rXFx0XFx0aWYgKElTX0VSUihuZXQpKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuZXQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGZpbHRlci1cXHUwMDNldGd0X25ldCA9IG5ldDtcXG4rXFx0fVxcbitcXG4rXFx0ZmlsdGVyLVxcdTAwM2VpZmluZGV4ID0gaWZtLVxcdTAwM2VpZmFfaW5kZXg7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xcbitcXHRcXHQudGd0X25ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLFxcbitcXHRcXHQubmV0bnNpZCA9IC0xLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbitcXHRcXHRpbnQgYWRkcl9pZHg7XFxuK1xcdH0gKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLVxcdTAwM2VubGgsIHNrYi1cXHUwMDNlc2ssIFxcdTAwMjZmaWx0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcbitcXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcXG4rXFx0XFx0Y2ItXFx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShmaWx0ZXIudGd0X25ldCwgZmlsdGVyLmlmaW5kZXgpO1xcbitcXHRcXHRpZiAoIWRldikge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFxcdTAwMjZjdHgtXFx1MDAzZWFkZHJfaWR4LCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLm5ldG5zaWQpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAoZmlsdGVyLnRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpZiAoZmlsdGVyLm5ldG5zaWQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cHV0X25ldChmaWx0ZXIudGd0X25ldCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXFxuQEAgLTcyNTEsNiArNzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XFxuIFxcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXFxuIFxcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcXG4gXFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxcbitcXHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXFxuK1xcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxcbiBcXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtMSwxNyArMSwyMSBAQFxcbiAjIS91c3IvYmluL2VudiBweXRob24zXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuK2ltcG9ydCBlcnJub1xcbiBpbXBvcnQgc29ja2V0XFxuIGltcG9ydCBzdHJ1Y3RcXG4gaW1wb3J0IHRpbWVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcXG4gXFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFxcXHhlMFxcXFx4MDBcXFxceDAwXFxcXHgwMSdcXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFxcXHhlZlxcXFx4MDFcXFxceDAxXFxcXHgwMSdcXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcXG4rRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCcwMTAwNWUwMDAwMDEnKVxcbitFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJzAxOjAwOjVlOjAxOjAxOjAxJ1xcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcXG4gXFxuIFxcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XFxuQEAgLTEwNSw2ICsxMDksNjYgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXFxuIFxcbiBcXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxcbisgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzLCB0aGUgZ2xvYmFsIGZsYWcgYW5kXFxuKyAgICB0YXJnZXQtbmV0bnNpZC5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcXFwiZHVtbXkxXFxcIiwgXFxcImR1bW15MlxcXCIpOlxcbisgICAgICAgICAgICBpcChmXFxcImxpbmsgYWRkIG5hbWUge2lmbmFtZX0gdHlwZSBkdW1teVxcXCIpXFxuKyAgICAgICAgICAgIGlwKGZcXFwibGluayBzZXQge2lmbmFtZX0gdXBcXFwiKVxcbisgICAgICAgIGRldl9pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoXFxcImR1bW15MVxcXCIpXFxuKyAgICAgICAgaXAoZlxcXCJtYWRkciBhZGQge0VUSF9URVNUX01VTFRJQ0FTVF9TVFJ9IGRldiBkdW1teTFcXFwiKVxcbitcXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXFxuKyAgICAgICAgICAgICAgICB7XFxcImlmYS1mYW1pbHlcXFwiOiBzb2NrZXQuQUZfUEFDS0VULCBcXFwiaWZhLWluZGV4XFxcIjogZGV2X2lkeH0sXFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXFxuKyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcXG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXG4rICAgICAgICAgICAgICAgICAgICBcXFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXFxcIilcXG4rICAgICAgICAgICAgcmFpc2VcXG4rXFxuKyAgICAgICAgIyBkdW1teTIgaGFzIGVudHJpZXMgYXMgd2VsbCwgb25seSBkdW1teTEgbWF5IGJlIGxpc3RlZFxcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcXG4rICAgICAgICAgICAgICAgIFxcXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXFxcIilcXG4rXFxuKyAgICAgICAgZW50cmllcyA9IHthZGRyWydtdWx0aWNhc3QnXTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XFxuK1xcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xcbisgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cXG4rICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxcbisgICAgICAgICAgICAgICAgXFxcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzXFxcIilcXG4rICAgICAgICBrc2Z0X25vdF9pbignZ2xvYmFsJywgZW50cmllc1tFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcInByb3RvY29sIGVudHJ5IGlzIGdsb2JhbFxcXCIpXFxuK1xcbisgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxcbisgICAgICAgICAgICAgICAgXFxcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAga3NmdF9lcShlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ21jLXVzZXJzJ10sIDEsXFxuKyAgICAgICAgICAgICAgICBcXFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXFxcIilcXG4rICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXFxuKyAgICAgICAgICAgICAgICBcXFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcXFwiKVxcbitcXG4rICAgICAgICAjIHRhcmdldC1uZXRuc2lkIGR1bXBzIGFub3RoZXIgbmV0bnMsIGlmYS1pbmRleCBpcyByZWxhdGl2ZSB0byBpdFxcbisgICAgICAgIHdpdGggTmV0TlMoKSBhcyBwZWVyOlxcbisgICAgICAgICAgICBpcChmXFxcIm5ldG5zIHNldCB7cGVlcn0gNVxcXCIpXFxuKyAgICAgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MyB0eXBlIGR1bW15XFxcIiwgbnM9cGVlcilcXG4rICAgICAgICAgICAgaXAoXFxcImxpbmsgc2V0IGR1bW15MyB1cFxcXCIsIG5zPXBlZXIpXFxuKyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXFxcImxpbmsgc2hvdyBkdW1teTNcXFwiLCBqc29uPVRydWUsIG5zPXBlZXIpWzBdWydpZmluZGV4J11cXG4rXFxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxcbisgICAgICAgICAgICAgICAge1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX1BBQ0tFVCwgXFxcInRhcmdldC1uZXRuc2lkXFxcIjogNX0sXFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXFxuKyAgICAgICAgICAgIGtzZnRfZXEoeyhhZGRyWydpZmEtaW5kZXgnXSwgYWRkclsndGFyZ2V0LW5ldG5zaWQnXSlcXG4rICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJ0YXJnZXQtbmV0bnNpZCBkaWQgbm90IGR1bXAgdGhlIHBlZXIgbmV0bnNcXFwiKVxcbitcXG4rXFxuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIFxcXCJcXFwiXFxcIlxcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXFxuQEAgLTMxNSw3ICszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cXHUwMDNlIE5vbmU6XFxuIFxcbiBcXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXFxuKyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXFxuKyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODoyOS4yOTk1NTIyNTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTAxOTcyOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJcIixcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJfZGV2XCIsXG4gICAgXCJydG5sX2ZpbGxfbWNhZGRyXCIsXG4gICAgXCJydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wIHN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUIHJlcXVlc3RzIGluIHJ0bmV0bGluay4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBwYXJzaW5nIGFuZCBkdW1waW5nIGxvZ2ljIChydG5sX2R1bXBfbWNhZGRyLCBydG5sX2R1bXBfbWNhZGRyX2RldiwgcnRubF9maWxsX21jYWRkciwgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEpIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgTkVUTElOS19ST1VURSBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLmFkZjgyYjY5YWRlNzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiArNzcsOCBAQCBkZWZpbml0aW9uczpcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkXG4tICAgICAgICB0eXBlOiBiaW5hcnlcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHByb3RvXG4gICAgICAgICB0eXBlOiB1OFxuQEAgLTE2OCw3ICsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcbisgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCBleHBsaWNpdGx5LCBlLmcuIHdpdGhcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcImJyaWRnZSBmZGIgYWRkIC4uLiBzZWxmXCIsIHJhdGhlciB0aGFuIGJ5IGFcbisgICAgICAgIHByb3RvY29sIGpvaW4gYXJlIHJlcG9ydGVkIHdpdGggdGhlIGdsb2JhbCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gbXVsdGljYXN0XG4gICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSBmbGFnc1xuKyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgICAgcmVwbHk6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IDdmYjYzMGI3ZmUzMTEuLjBhMWFkOWViYjQ3YmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5AQCAtNTcsNiArNTcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEVcdDB4MjAwXG4gI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOXHQweDQwMFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcdDB4ODAwXG4rI2RlZmluZSBJRkFfRl9HTE9CQUxcdFx0MHgxMDAwXG4gXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xuIFx0X191MzJcdGlmYV9wcmVmZXJlZDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCA4MWM1YTYxMDRkZWExLi5mNTRlOWNiM2JmMzBjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtNDU2Niw2ICs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXG4rXHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4re1xuK1x0dTMyIGlmYV9mbGFncyA9IGhhLVx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0c3RydWN0IG5sbXNnaGRyICpubGg7XG4rXG4rXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuK1x0XHRcdGZsYWdzKTtcbitcdGlmICghbmxoKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0aWZtID0gbmxtc2dfZGF0YShubGgpO1xuK1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4rXHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG4rXHQvKiBpZm0tXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXG4rXHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xuK1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4rXHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXG4rXHRpZiAoKG5ldG5zaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XG4rXHQgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcbitcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdH1cbitcbitcdG5sbXNnX2VuZChza2IsIG5saCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRpbnQgYWRkcl9pZHggPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbitcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbitcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuK1x0XHRcdGFkZHJfaWR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRhZGRyX2lkeCsrO1xuK1x0fVxuK1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbitcbitcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHtcbitcdHN0cnVjdCBuZXQgKnRndF9uZXQ7XG4rXHRpbnQgbmV0bnNpZDtcbitcdGludCBpZmluZGV4O1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5W0lGQV9NQVggKyAxXSA9IHtcbitcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCArIDFdO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0aW50IGVycjtcbitcbitcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuK1x0aWYgKCFpZm0pIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXG4rXHRcdFx0ICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xuK1x0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4rXG4rXHRcdGZpbHRlci1cdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XG4rXHRcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXHUwMDNlbmV0bnNpZCk7XG4rXHRcdGlmIChJU19FUlIobmV0KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXCIpO1xuK1x0XHRcdHJldHVybiBQVFJfRVJSKG5ldCk7XG4rXHRcdH1cbitcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4rXHR9XG4rXG4rXHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xuK1x0XHQudGd0X25ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4rXHRcdC5uZXRuc2lkID0gLTEsXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG4rXHRcdGludCBhZGRyX2lkeDtcbitcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuK1x0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdGlmIChmaWx0ZXIubmV0bnNpZCBcdTAwM2U9IDApXG4rXHRcdHB1dF9uZXQoZmlsdGVyLnRndF9uZXQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw2NiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcbisgICAgdGFyZ2V0LW5ldG5zaWQuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9ub3RfaW4oJ2dsb2JhbCcsIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgXCJwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcIilcbitcbisgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuKyAgICAgICAgICAgICAgICBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9lcShlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ21jLXVzZXJzJ10sIDEsXG4rICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgIFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcIilcbitcbisgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XG4rICAgICAgICB3aXRoIE5ldE5TKCkgYXMgcGVlcjpcbisgICAgICAgICAgICBpcChmXCJuZXRucyBzZXQge3BlZXJ9IDVcIilcbisgICAgICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcIiwgbnM9cGVlcilcbisgICAgICAgICAgICBpcChcImxpbmsgc2V0IGR1bW15MyB1cFwiLCBucz1wZWVyKVxuKyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXCJsaW5rIHNob3cgZHVtbXkzXCIsIGpzb249VHJ1ZSwgbnM9cGVlcilbMF1bJ2lmaW5kZXgnXVxuK1xuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwidGFyZ2V0LW5ldG5zaWRcIjogNX0sXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbisgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsnaWZhLWluZGV4J10sIGFkZHJbJ3RhcmdldC1uZXRuc2lkJ10pXG4rICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxuKyAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXQtbmV0bnNpZCBkaWQgbm90IGR1bXAgdGhlIHBlZXIgbmV0bnNcIilcbitcbitcbiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiXG4gICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGlua1xuQEAgLTMxNSw3ICszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbisgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjI5LjI5OTU1NDY4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3MDAxODQ1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgRmVhdHVyZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYWJpbGl0eSB0byBkdW1wIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyB1c2luZyBydG5ldGxpbmssIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYFBGX1BBQ0tFVGAgYW5kIHRoZSBgUlRNX0dFVE1VTFRJQ0FTVGAgbWVzc2FnZSB0eXBlLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXM6IGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHdoaWNoIGNvbnRhaW5zIHRoZSBuZXcgY29yZSBmdW5jdGlvbnMgZm9yIGR1bXBpbmcsIGluY2x1ZGluZyBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGFuZCB0aGUgcG9saWNpZXMgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXJlJ3MgYSBuZXcgYElGQV9GX0dMT0JBTGAgZmxhZyBpbiBgaWZfYWRkci5oYCwgcHJlc3VtYWJseSBmb3IgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGZsYWdzLiBXZSBhbHNvIHNlZSB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBhIHNlbGZ0ZXN0IGZvciB2ZXJpZmljYXRpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBldmFsdWF0ZSB0aGUgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGU6IHRoZSBjb3JlIHN1YnN5c3RlbSBpcyBOZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgYHJ0bmV0bGlua2AuIFRoZSBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpbXBsZW1lbnRzIHRoZSByZWxldmFudCBgcnRubF9kdW1wX21jYWRkcmAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gSXQncyB0cml2aWFsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBzaWduaWZpY2FudC4gV2UgaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIHN0YW5kYXJkIG5ldGxpbmsgc29ja2V0cyAoYEFGX05FVExJTktgLCBgTkVUTElOS19ST1VURWApLCBzZW5kaW5nIGBSVE1fR0VUTVVMVElDQVNUYCBtZXNzYWdlcywgYW5kIHNwZWNpZnlpbmcgdGhlIGBQRl9QQUNLRVRgIGZhbWlseS4gVGhpcyBzaG91bGQgYmUgZWFzaWx5IHRyaWdnZXJhYmxlIGluIHN5emthbGxlci5cblxuVGhlcmVmb3JlLCAqeWVzKiwgaXQncyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgbmV3IGZ1bmN0aW9ucy4gSSBzaG91bGQgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBpbnRlcm5hbHMgb2YgaG93IHRoZSBkdW1wIGlzIGltcGxlbWVudGVkLiBJdCdzIHRpbWUgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6MzcuOTk5NzQzMDI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTA2MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZHVtcF9tY2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NjAyLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2MDM6c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2MDQtXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjQwPXN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00Njg0LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2ODU6c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00Njg2LXtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTMtXFx0XFx0fVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MTQ6XFx0XFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcXHUwMDI2Y3R4LVxcdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDcxNS1cXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzE5LVxcdGZvcl9lYWNoX25ldGRldl9kdW1wKGZpbHRlci50Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ3MjA6XFx0XFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcXHUwMDI2Y3R4LVxcdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDcyMS1cXHRcXHRcXHRcXHRcXHQgICBmaWx0ZXIubmV0bnNpZCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTc0MTctXFx0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjc0MTg6XFx0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzQxOS1cXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODozOC4wNjQ2NzUyNzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTcxMzI1MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFJUTkVUTElOSyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIGBuZXQvY29yZS9NYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeS4gSSBuZWVkIHRvIHNlZSB3aGF0IGRlcGVuZGVuY2llcyBhcmUgZGVjbGFyZWQgdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgY29uZmlnIHN5bWJvbHMgdGhhdCBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiBgcnRuZXRsaW5rLmNgIGFuZCBpdHMgc3VwcG9ydGluZyBjb21wb25lbnRzLiBJdOKAmXMgaW1wb3J0YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBuZXR3b3JrIGZlYXR1cmVzLiBUaGF0IHdheSwgSSBjYW4gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGVuYWJsZWQgYW5kIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYW5kIGhvcGVmdWxseSBJIHdvbid0IG5lZWQgdG8gdHJhY2UgdGhyb3VnaCAqdG9vKiBtYW55IGxldmVscyBvZiBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0MC4yMzYwMDQwOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNTIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRuZXRsaW5rXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0MC4yODUxNjIyMDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDc2OTU3MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSVE5ldGxpbmsgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgbW9kdWxlIChgbmV0L2NvcmUvYCkgd2hlbiB0aGUgbmV0d29ya2luZyBzdGFjayBpcyBlbmFibGVkLiBUaGF0J3MgYSBnaXZlbiwgYENPTkZJR19ORVRgIGlzIHRoZSBiYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgaGFuZGxpbmcgd2l0aGluIFJUTmV0bGluay5cblxuTGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBtdWx0aWNhc3QgYWRkcmVzcyBkdW1waW5nPyBJIGhhdmUgdGhlc2UgZm91cjogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGFuZCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gYW55IG90aGVyIHJlbGV2YW50IGZpbGVzLlxuXG5SaWdodCwgSSBzZWUgYSBmZXcgb3RoZXIgcGxhY2VzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZDogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCB0aGUgYGlmX2FkZHIuaGAgaW5jbHVkZSBmaWxlLCBgcnRuZXRsaW5rLmNgIG9mIGNvdXJzZSwgYW5kIGEgc2VsZnRlc3Qgc2NyaXB0LiBUaGVzZSBzdXBwb3J0IG15IHdvcmsgb24gdGhpcyBhcmVhLlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHRoZSBzeW1ib2xzOiBgcnRubF9kdW1wX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX2ZpbGxfbWNhZGRyYCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYC4gR29vZCwgZ29vZC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIG11bHRpY2FzdCBhZGRyZXNzIGR1bXBzLCBiZXlvbmQgdGhlIGJhc2ljIGBORVRgIGNvbmZpZz8gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIHNvbWV0aGluZyBsaWtlIGBQRl9QQUNLRVRgIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgY29uZmlnLCBsaWtlIGBDT05GSUdfUEFDS0VUYC4gSSdsbCBoYXZlIHRvIGxvb2sgaW50byBgcnRuZXRsaW5rLmNgIGNvZGUgdG8gc2VlIGlmIHRoZSBwYWNrZXQgZmFtaWx5IGlzIGludm9sdmVkIGluIHRoaXMgcGFydC4gSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0My43NjIxMjE3MTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MTMzODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEZfUEFDS0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1MjI9c3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1MzYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDUzNzpcXHRcXHRpZiAoaWR4IFxcdTAwM2Mgc19pZHggfHwgaWR4ID09IFBGX1BBQ0tFVClcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTM4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NzM5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE2LVxcdHsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3NDE3OlxcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDE4LVxcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxODo0My44MTA1NDIyMTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODk5ODc2MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEknbSBzZWVpbmc6IHRoZSBoYW5kbGVyIGZvciB0aGlzIG11bHRpY2FzdCBhZGRyZXNzIHJldHJpZXZhbCB2aWEgcnRuZXRsaW5rIChgUlRNX0dFVE1VTFRJQ0FTVGApIGlzIHJlZ2lzdGVyZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gKGAjaWZkZWZgKSBoZXJlLCB3aGljaCBtZWFucyBpdCdzIGFsd2F5cyBhdmFpbGFibGUuIFRoZSBtZXNzYWdlIGlzIGJlaW5nIHJlY2VpdmVkIG92ZXIgdGhlIHN0YW5kYXJkIGBORVRMSU5LX1JPVVRFYCBzb2NrZXQsIHdoaWNoIHVzZXMgdGhlIGBBRl9ORVRMSU5LYCBhZGRyZXNzIGZhbWlseS4gQW5kLCBjcnVjaWFsbHksIHRoZSBgaWZtLVx1MDAzZWlmYV9mYW1pbHlgIGlzIGBBRl9QQUNLRVRgLlxuXG5UaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCB0aGUgY29yZSByZXF1aXJlbWVudCBpcyBqdXN0IHN0YW5kYXJkIG5ldHdvcmtpbmcgKGBDT05GSUdfTkVUYCksIGFuZCBieSBleHRlbnNpb24sIGBDT05GSUdfTkVUTElOS2AuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBzdHVmZiBoZXJlLlxuXG5MZXQgbWUganVzdCBzb2xpZGlmeSB0aGlzIGZ1cnRoZXI6XG5cbjEuICBgV29ydGhGdXp6aW5nYCBpcyBtYXJrZWQgYXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCB0byBrbm93LlxuMi4gIFRoZSBcIlJlYXNvbmluZ1wiIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmc6IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzICh1c2luZyBgUEZfUEFDS0VUYCB3aXRoIGBSVE1fR0VUTVVMVElDQVNUYCkgdGhyb3VnaCBydG5ldGxpbmsuIFRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGFuZCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGlzIGFjY2VzcyBpcyBhdmFpbGFibGUgdGhyb3VnaCB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCBuZXRsaW5rIHJvdXRlIHNvY2tldHMuXG4zLiAgVGhlIGNyaXRpY2FsIFwiRm9jdXNTeW1ib2xzXCIg4oCTIHRoZSBmdW5jdGlvbnMgdGhleSd2ZSBoaWdobGlnaHRlZDogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF9maWxsX21jYWRkcmAsIGFuZCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGUgc2NvcGUuXG40LiAgVGhlIFwiRW5hYmxlQ29uZmlnc1wiIGV4cGxpY2l0bHkgbGlzdHMgYFtcIk5FVFwiXWAuIFByZWNpc2VseSB3aGF0IEkgaGFkIGluIG1pbmQhXG5cblJpZ2h0LCBJJ20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTAsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjQ3LjcxMDQyMTAzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDk4OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3MgZHVtcCBzdXBwb3J0IGZvciBQRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCByZXF1ZXN0cyBpbiBydG5ldGxpbmsuIFRoaXMgaW50cm9kdWNlcyBuZXcgcGFyc2luZyBhbmQgZHVtcGluZyBsb2dpYyAocnRubF9kdW1wX21jYWRkciwgcnRubF9kdW1wX21jYWRkcl9kZXYsIHJ0bmxfZmlsbF9tY2FkZHIsIHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIE5FVExJTktfUk9VVEUgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6NDcuODAxNTI5OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjM2NTg5MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTg6NDcuODAyMTU4MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MzIzNTk1NzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cXG5cXG4xLiBOZXRsaW5rIE1lc3NhZ2UgSW5pdGlhbGl6YXRpb246IFRoZSBmaXhlZCBoZWFkZXIgYHN0cnVjdCBpZmFkZHJtc2dgIGNvbnRhaW5zIG5vIHN0cnVjdHVyZSBwYWRkaW5nICg0IHU4IGZpZWxkcyBmb2xsb3dlZCBieSBhIHUzMiBmaWVsZCwgOCBieXRlcyB0b3RhbCkgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHJ0bmxfZmlsbF9tY2FkZHIoKWAuXFxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgYnl0ZXMgZnJvbSBgaGEtXFx1MDAzZWFkZHJgICh3aGljaCBpcyBpbml0aWFsaXplZCB0byBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxcbjMuIFZhcmlhYmxlcyBcXHUwMDI2IEZpbHRlcnM6IFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBhbmQgZHVtcCBjb250ZXh0IHN0YXRlIChgY3R4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBmaWVsZHMuXFxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVjYmQ2NTM4ODE4ODQzOWQ5ZWUyZjQ4YzE0OGE3ZGY2YmM0MzFjM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjE4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLmFkZjgyYjY5YWRlNzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtNzcsNiArNzcsOCBAQCBkZWZpbml0aW9uczpcbiAgICAgICAgIG5hbWU6IG1jYXV0b2pvaW5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGFibGUtcHJpdmFjeVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGdsb2JhbFxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTExOSw3ICsxMjEsNyBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHRhcmdldC1uZXRuc2lkXG4tICAgICAgICB0eXBlOiBiaW5hcnlcbisgICAgICAgIHR5cGU6IHMzMlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHByb3RvXG4gICAgICAgICB0eXBlOiB1OFxuQEAgLTE2OCw3ICsxNzAsMTMgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcbisgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCBleHBsaWNpdGx5LCBlLmcuIHdpdGhcbisgICAgICAgIFNJT0NBRERNVUxUSSBvciBcImJyaWRnZSBmZGIgYWRkIC4uLiBzZWxmXCIsIHJhdGhlciB0aGFuIGJ5IGFcbisgICAgICAgIHByb3RvY29sIGpvaW4gYXJlIHJlcG9ydGVkIHdpdGggdGhlIGdsb2JhbCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbkBAIC0xODEsMTAgKzE4OSwxMyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gbXVsdGljYXN0XG4gICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4rICAgICAgICAgICAgLSBmbGFnc1xuKyAgICAgICAgICAgIC0gdGFyZ2V0LW5ldG5zaWRcbiAgICAgICBkdW1wOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSB0YXJnZXQtbmV0bnNpZFxuICAgICAgICAgcmVwbHk6XG4gICAgICAgICAgIHZhbHVlOiA1OFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqbWNhZGRyLWF0dHJzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IDdmYjYzMGI3ZmUzMTEuLjBhMWFkOWViYjQ3YmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXG5AQCAtNTcsNiArNTcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEVcdDB4MjAwXG4gI2RlZmluZSBJRkFfRl9NQ0FVVE9KT0lOXHQweDQwMFxuICNkZWZpbmUgSUZBX0ZfU1RBQkxFX1BSSVZBQ1lcdDB4ODAwXG4rI2RlZmluZSBJRkFfRl9HTE9CQUxcdFx0MHgxMDAwXG4gXG4gc3RydWN0IGlmYV9jYWNoZWluZm8ge1xuIFx0X191MzJcdGlmYV9wcmVmZXJlZDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCA4MWM1YTYxMDRkZWExLi5mNTRlOWNiM2JmMzBjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtNDU2Niw2ICs0NTY2LDE2OSBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXG4rXHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG5ldG5zaWQpXG4re1xuK1x0dTMyIGlmYV9mbGFncyA9IGhhLVx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9HTE9CQUwgOiAwO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0c3RydWN0IG5sbXNnaGRyICpubGg7XG4rXG4rXHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuK1x0XHRcdGZsYWdzKTtcbitcdGlmICghbmxoKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0aWZtID0gbmxtc2dfZGF0YShubGgpO1xuK1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4rXHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG4rXHQvKiBpZm0tXHUwMDNlaWZhX2ZsYWdzIGhvbGRzIDggYml0cywgdGhlIGZ1bGwgdmFsdWUgaXMgaW4gSUZBX0ZMQUdTICovXG4rXHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gKF9fdTgpaWZhX2ZsYWdzO1xuK1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4rXHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXG4rXHRpZiAoKG5ldG5zaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBubGFfcHV0X3MzMihza2IsIElGQV9UQVJHRVRfTkVUTlNJRCwgbmV0bnNpZCkpIHx8XG4rXHQgICAgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfRkxBR1MsIGlmYV9mbGFncykpIHtcbitcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcdH1cbitcbitcdG5sbXNnX2VuZChza2IsIG5saCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuZXRuc2lkKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRpbnQgYWRkcl9pZHggPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbitcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbitcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuK1x0XHRcdGFkZHJfaWR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MsIG5ldG5zaWQpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRhZGRyX2lkeCsrO1xuK1x0fVxuK1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbitcbitcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyIHtcbitcdHN0cnVjdCBuZXQgKnRndF9uZXQ7XG4rXHRpbnQgbmV0bnNpZDtcbitcdGludCBpZmluZGV4O1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bmxfbWNhZGRyX2R1bXBfcG9saWN5W0lGQV9NQVggKyAxXSA9IHtcbitcdFtJRkFfVEFSR0VUX05FVE5TSURdXHQ9IHsgLnR5cGUgPSBOTEFfUzMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyICpmaWx0ZXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCArIDFdO1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1x0aW50IGVycjtcbitcbitcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuK1x0aWYgKCFpZm0pIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRlcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsXG4rXHRcdFx0ICBydG5sX21jYWRkcl9kdW1wX3BvbGljeSwgZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAodGJbSUZBX1RBUkdFVF9ORVROU0lEXSkge1xuK1x0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4rXG4rXHRcdGZpbHRlci1cdTAwM2VuZXRuc2lkID0gbmxhX2dldF9zMzIodGJbSUZBX1RBUkdFVF9ORVROU0lEXSk7XG4rXHRcdG5ldCA9IHJ0bmxfZ2V0X25ldF9uc19jYXBhYmxlKHNrLCBmaWx0ZXItXHUwMDNlbmV0bnNpZCk7XG4rXHRcdGlmIChJU19FUlIobmV0KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkludmFsaWQgdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlIGlkXCIpO1xuK1x0XHRcdHJldHVybiBQVFJfRVJSKG5ldCk7XG4rXHRcdH1cbitcdFx0ZmlsdGVyLVx1MDAzZXRndF9uZXQgPSBuZXQ7XG4rXHR9XG4rXG4rXHRmaWx0ZXItXHUwMDNlaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcnRubF9tY2FkZHJfZHVtcF9maWx0ZXIgZmlsdGVyID0ge1xuK1x0XHQudGd0X25ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4rXHRcdC5uZXRuc2lkID0gLTEsXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG4rXHRcdGludCBhZGRyX2lkeDtcbitcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIHNrYi1cdTAwM2VzaywgXHUwMDI2ZmlsdGVyLFxuK1x0XHRcdFx0XHQgY2ItXHUwMDNlZXh0YWNrKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRpZiAoZmlsdGVyLmlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGZpbHRlci50Z3RfbmV0LCBmaWx0ZXIuaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgIGZpbHRlci5uZXRuc2lkKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdGlmIChmaWx0ZXIubmV0bnNpZCBcdTAwM2U9IDApXG4rXHRcdHB1dF9uZXQoZmlsdGVyLnRndF9uZXQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzQxNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLjQxZGEyNTljM2EwOTUgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw2NiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMsIHRoZSBnbG9iYWwgZmxhZyBhbmRcbisgICAgdGFyZ2V0LW5ldG5zaWQuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9ub3RfaW4oJ2dsb2JhbCcsIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWydmbGFncyddLFxuKyAgICAgICAgICAgICAgICAgICAgXCJwcm90b2NvbCBlbnRyeSBpcyBnbG9iYWxcIilcbitcbisgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuKyAgICAgICAgICAgICAgICBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9lcShlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ21jLXVzZXJzJ10sIDEsXG4rICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X2luKCdnbG9iYWwnLCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJ2ZsYWdzJ10sXG4rICAgICAgICAgICAgICAgIFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBnbG9iYWxcIilcbitcbisgICAgICAgICMgdGFyZ2V0LW5ldG5zaWQgZHVtcHMgYW5vdGhlciBuZXRucywgaWZhLWluZGV4IGlzIHJlbGF0aXZlIHRvIGl0XG4rICAgICAgICB3aXRoIE5ldE5TKCkgYXMgcGVlcjpcbisgICAgICAgICAgICBpcChmXCJuZXRucyBzZXQge3BlZXJ9IDVcIilcbisgICAgICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkzIHR5cGUgZHVtbXlcIiwgbnM9cGVlcilcbisgICAgICAgICAgICBpcChcImxpbmsgc2V0IGR1bW15MyB1cFwiLCBucz1wZWVyKVxuKyAgICAgICAgICAgIHBlZXJfaWR4ID0gaXAoXCJsaW5rIHNob3cgZHVtbXkzXCIsIGpzb249VHJ1ZSwgbnM9cGVlcilbMF1bJ2lmaW5kZXgnXVxuK1xuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwidGFyZ2V0LW5ldG5zaWRcIjogNX0sXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbisgICAgICAgICAgICBrc2Z0X2VxKHsoYWRkclsnaWZhLWluZGV4J10sIGFkZHJbJ3RhcmdldC1uZXRuc2lkJ10pXG4rICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwgeyhwZWVyX2lkeCwgNSl9LFxuKyAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXQtbmV0bnNpZCBkaWQgbm90IGR1bXAgdGhlIHBlZXIgbmV0bnNcIilcbitcbitcbiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiXG4gICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGlua1xuQEAgLTMxNSw3ICszNzksOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbisgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjQ3LjgwMjE1OTY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzUyMjg0MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBydW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybi5cblxuTG9va2luZyBhdCB0aGUgZmlsZSBjaGFuZ2VzLCBJIHNlZSB1cGRhdGVzIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCBjb25jZXJuaW5nIG5ldGxpbmsgc3BlY3MsIGFkZGluZyBgQUZfUEFDS0VUYCwgYSBnbG9iYWwgZmxhZywgYW5kIGB0YXJnZXQtbmV0bnNpZGAgZm9yIGBnZXRtdWx0aWNhc3RgLiBBIG5ldyBkZWZpbmUsIGAjZGVmaW5lIElGQV9GX0dMT0JBTCAweDEwMDBgLCBpcyBhZGRlZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIFRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2ggaW1wbGVtZW50cyBhIGR1bXAgZnVuY3Rpb24gZm9yIGBQRl9QQUNLRVRgIGBnZXRtdWx0aWNhc3RgLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbiBgcnRubF9maWxsX21jYWRkcmAgaXMgd2hlcmUgSSdsbCBmb2N1cy4gSXQgY29uc3RydWN0cyBhIE5ldGxpbmsgbWVzc2FnZSwgYW5kIHRoZXJlIHNlZW1zIHRvIGJlIGEgc3VidGxlIGlzc3VlIGhlcmU6XG5cbkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIGBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLCBmbGFncylgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYG5sbXNnX3B1dGAgaW5pdGlhbGl6ZXMgdGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBoZWFkZXIgYW5kIHBheWxvYWQsIG9yIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubG1zZ19kYXRhYCBpcyB1bmluaXRpYWxpemVkLiBJZiBpdCdzIHRoZSBsYXR0ZXIsIHRoaXMgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG5sbXNnX3B1dGAgemVyb2VzIHRoZSBtZW1vcnkgb3IgaWYgYG5sbXNnX2RhdGFgIGNvbnRhaW5zIGp1bmssIG9yIGlmIHRoZSBjb2RlIGluaXRpYWxpemVzIGl0LiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIGJlY2F1c2UgdGhhdCBgaWZtYCBpcyBiZWluZyB1c2VkLCBhbmQgaWYgdW5pbml0aWFsaXplZCwgdGhhdCdzIGEgcHJvYmxlbS5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG11c3QgYWxzbyByZWNhbGwgd2hhdCBhIGBzdHJ1Y3QgaWZhZGRybXNnYCBpcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uIGFuZCBtZW1iZXJzIHRvIGdldCBhIG1vcmUgaG9saXN0aWMgdmlldyBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYGNvZGVzZWFyY2hgIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ2NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjU5LjE1NDQ0NjMxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwODczMjI3LCJFcnJvciI6ImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxceyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpZmFkZHJtc2cge1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxcXFx7XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE4OjU5LjM2NTMyODg4NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTc5NzM4MzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBJbnRlcmZhY2UgU3RydWN0dXJlIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBzb21lIGRldGFpbHMgYWJvdXQgbmV0d29yayBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgZGlnZ2luZyBpbnRvIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBvZiB0aGUgZGF0YS4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBkZWZpbml0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGp1bXBpbmctb2ZmIHBvaW50LiBMZXQncyBnZXQgdGhhdCBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCBpbmZvcm1hdGlvbiBpdCBob2xkcy4gSSdtIGV4cGVjdGluZyB0aGlzIHN0cnVjdHVyZSB0byBjb250YWluIHRoZSBiYXNpYyBhdHRyaWJ1dGVzIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gZHJpbGwgZG93biB0byBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgaWYgbmVlZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MTEuMTYyNzE0NjE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI3MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaWZhZGRybXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXFx0X191OFxcdFxcdGlmYV9mYW1pbHk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTIzLSAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDoyNDogKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTI1LSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaD02Mj1zdHJ1Y3QgaWZhX2NhY2hlaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTcwLSNpZm5kZWYgX19LRVJORUxfX1xcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6NzE6I2RlZmluZSBJRkFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpKSlcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjcyOiNkZWZpbmUgSUZBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSlcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTczLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxOToxMS4yMjQ5OTI5MDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1MTEzNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBpZl9hZGRyLmgqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA4LiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbGlrZWx5IHN0YXJ0cyBkZWZpbmluZyB0aGUgc3RydWN0dXJlcyBvciBjb25zdGFudHMgcmVsYXRlZCB0byBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzIGluZm9ybWF0aW9uLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGlmYWRkcm1zZ2AsIG9yIHBlcmhhcHMgc29tZSBrZXkgZmxhZyBkZWZpbml0aW9ucyB0aGF0IGdvdmVybiBob3cgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBJJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCByZWxhdGUgdG8gYWRkcmVzcyBmYW1pbGllcywgYWRkcmVzcyBsZW5ndGhzLCBhbmQgYXR0cmlidXRlIGNvZGVzLiBJJ20gYW50aWNpcGF0aW5nIHBvc3NpYmx5IHNlZWluZyBzb21lIGVudW1zLiBBbnl0aGluZyB0aGF0IGRpY3RhdGVzIHRoZSBmb3JtYXQgb3IgcHJvcGVydGllcyBvZiBuZXR3b3JrIGFkZHJlc3NlcyBpcyB3aGF0IEknbSBsb29raW5nIGZvciBpbml0aWFsbHkuIEknbSBrZWVuIHRvIGVuc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0IHN0YW5kYXJkcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MTMuMzc2MTMxNjg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cXG4gICAyOlxcdCNpZm5kZWYgX1VBUElfX0xJTlVYX0lGX0FERFJfSFxcbiAgIDM6XFx0I2RlZmluZSBfVUFQSV9fTElOVVhfSUZfQUREUl9IXFxuICAgNDpcXHRcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gICA3OlxcdFxcbiAgIDg6XFx0c3RydWN0IGlmYWRkcm1zZyB7XFxuICAgOTpcXHRcXHRfX3U4XFx0XFx0aWZhX2ZhbWlseTtcXG4gIDEwOlxcdFxcdF9fdThcXHRcXHRpZmFfcHJlZml4bGVuO1xcdC8qIFRoZSBwcmVmaXggbGVuZ3RoXFx0XFx0Ki9cXG4gIDExOlxcdFxcdF9fdThcXHRcXHRpZmFfZmxhZ3M7XFx0LyogRmxhZ3NcXHRcXHRcXHQqL1xcbiAgMTI6XFx0XFx0X191OFxcdFxcdGlmYV9zY29wZTtcXHQvKiBBZGRyZXNzIHNjb3BlXFx0XFx0Ki9cXG4gIDEzOlxcdFxcdF9fdTMyXFx0XFx0aWZhX2luZGV4O1xcdC8qIExpbmsgaW5kZXhcXHRcXHRcXHQqL1xcbiAgMTQ6XFx0fTtcXG4gIDE1OlxcdFxcbiAgMTY6XFx0LypcXG4gIDE3OlxcdCAqIEltcG9ydGFudCBjb21tZW50OlxcbiAgMTg6XFx0ICogSUZBX0FERFJFU1MgaXMgcHJlZml4IGFkZHJlc3MsIHJhdGhlciB0aGFuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzLlxcbiAgMTk6XFx0ICogSXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBmb3Igbm9ybWFsbHkgY29uZmlndXJlZCBicm9hZGNhc3QgaW50ZXJmYWNlcyxcXG4gIDIwOlxcdCAqIGJ1dCBmb3IgcG9pbnQtdG8tcG9pbnQgSUZBX0FERFJFU1MgaXMgREVTVElOQVRJT04gYWRkcmVzcyxcXG4gIDIxOlxcdCAqIGxvY2FsIGFkZHJlc3MgaXMgc3VwcGxpZWQgaW4gSUZBX0xPQ0FMIGF0dHJpYnV0ZS5cXG4gIDIyOlxcdCAqXFxuICAyMzpcXHQgKiBJRkFfRkxBR1MgaXMgYSB1MzIgYXR0cmlidXRlIHRoYXQgZXh0ZW5kcyB0aGUgdTggZmllbGQgaWZhX2ZsYWdzLlxcbiAgMjQ6XFx0ICogSWYgcHJlc2VudCwgdGhlIHZhbHVlIGZyb20gc3RydWN0IGlmYWRkcm1zZyB3aWxsIGJlIGlnbm9yZWQuXFxuICAyNTpcXHQgKi9cXG4gIDI2OlxcdGVudW0ge1xcbiAgMjc6XFx0XFx0SUZBX1VOU1BFQyxcXG4gIDI4OlxcdFxcdElGQV9BRERSRVNTLFxcbiAgMjk6XFx0XFx0SUZBX0xPQ0FMLFxcbiAgMzA6XFx0XFx0SUZBX0xBQkVMLFxcbiAgMzE6XFx0XFx0SUZBX0JST0FEQ0FTVCxcXG4gIDMyOlxcdFxcdElGQV9BTllDQVNULFxcbiAgMzM6XFx0XFx0SUZBX0NBQ0hFSU5GTyxcXG4gIDM0OlxcdFxcdElGQV9NVUxUSUNBU1QsXFxuICAzNTpcXHRcXHRJRkFfRkxBR1MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjEzLjM3NjIzNjY3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI2MjA4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaWZhZGRybXNnIFN0cnVjdHVyZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkgc2VlIGl0J3MgZ290IHRoZSBzdGFuZGFyZCBuZXR3b3JrIGFkZHJlc3MgZmFtaWx5IChgaWZhX2ZhbWlseWApLCBwcmVmaXggbGVuZ3RoIChgaWZhX3ByZWZpeGxlbmApLCBmbGFncyAoYGlmYV9mbGFnc2ApLCBzY29wZSAoYGlmYV9zY29wZWApLCBhbmQgaW50ZXJmYWNlIGluZGV4IChgaWZhX2luZGV4YCkuIEdvb2QsIGdvb2QuIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIHRvdGFsIHNpemUgaXMgOCBieXRlcyDigJMgbmljZSBhbmQgY2xlYW4sIG5vIHBhZGRpbmcgdG8gd29ycnkgYWJvdXQuIEFuZCBpdCBsb29rcyBsaWtlIGFsbCB0aGUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIGBpZmFfZmFtaWx5YCB0byBgQUZfUEFDS0VUYCwgcHJlZml4IGxlbmd0aCBzZXQgdG8gMCwgYGlmYV9mbGFnc2AgZ2V0cyB0aGUgcmF3IGlucHV0LiBTY29wZSBpcyBzZXQgdG8gYFJUX1NDT1BFX0xJTktgLCBhbmQgdGhlIGluZGV4IGlzIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UncyBpbmRleCB2YWx1ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGFkZHJlc3MgcGxheXMgaW50byB0aGlzLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBgaGEtXHUwMDNlYWRkcmAgYW5kIGBkZXYtXHUwMDNlYWRkcl9sZW5gLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmcmFtaW5nIHRoaXMgZGF0YS4gQnV0IHdoZXJlIGV4YWN0bHkgZG9lcyBgaGEtXHUwMDNlYWRkcmAgZ2V0IGl0cyB2YWx1ZXM/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExvb2tzIGxpa2UgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGRlZmluaXRpb24uIFRoYXQgc2hvdWxkIGhvbGQgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjE2LjAwMjQ0ODc1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4MzI1MjAsIkVycm9yIjoiYmFkIGV4cHJlc3Npb246IGZhdGFsOiAtZSBvcHRpb24sICdzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgeyc6IFVubWF0Y2hlZCBcXHsiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IG5ldGRldl9od19hZGRyIHsnOiBVbm1hdGNoZWQgXFxcXHtcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MTYuMDMyMzA5Nzk3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMzE3NTU1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEZXZpY2UgU3RydWN0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGRlZmluaXRpb24uIFRoYXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpbmZyYXN0cnVjdHVyZSwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGtlcm5lbCBoZWFkZXJzLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IG5ldHdvcmtpbmctcmVsYXRlZCBkZWZpbml0aW9ucyBhcmUgdXN1YWxseSB0dWNrZWQgYXdheSBpbiB0aGUgYGluY2x1ZGUvbGludXhgIGRpcmVjdG9yeS4gTm93LCB3aGVyZSB3b3VsZCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBzdHJ1Y3R1cmUgcmVzaWRlPyBMb2dpY2FsbHksIGl04oCZbGwgYmUgaW4gYG5ldGRldmljZS5oYC4gSSdsbCBydW4gYSBxdWljayBzZWFyY2ggZm9yIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzIGFib3V0IGl0cyB1c2FnZSB3aXRoaW4gdGhlIGtlcm5lbCBuZXR3b3JraW5nIGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdHJ1Y3R1cmUncyBtZW1iZXJzLCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zLCBhbmQgcGVyaGFwcyBzb21lIGluc2lnaHRmdWwgY29tbWVudHMgb24gaG93IGl0J3MgdXNlZCB0byBtYW5hZ2UgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciBuZXR3b3JrIGludGVyZmFjZXMuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjE5LjM2NDA2OTUxOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODA2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGRldl9od19hZGRyXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIzNT1zdHJ1Y3Qgc2tfYnVmZjtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzNzpzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxOToxOS40MTE4NTQ3NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NjY3ODM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEZXZpY2UgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMjM3LiBJJ20gaG9waW5nIHRoYXQgcGFydGljdWxhciBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgSSdtIGxvb2tpbmcgZm9yIHJlZ2FyZGluZyB0aGUgYmFzaWMgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIG9yIHBlcmhhcHMgdGhlIGluaXRpYWwgc2V0dXAgcm91dGluZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZWxlbWVudHMgbGlrZSBkYXRhIHN0cnVjdHVyZXMgZm9yIHF1ZXVlcywgaW50ZXJydXB0IG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbGx5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHBvaW50ZXJzLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToxOToyMS43MDg1Mzc0ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdHN0cnVjdCBza19idWZmO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xcbiAyMzg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDIzOTpcXHRcXHRzdHJ1Y3QgcmJfbm9kZVxcdFxcdG5vZGU7XFxuIDI0MDpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0YWRkcltNQVhfQUREUl9MRU5dO1xcbiAyNDE6XFx0XFx0dW5zaWduZWQgY2hhclxcdFxcdHR5cGU7XFxuIDI0MjpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXFx0XFx0MVxcbiAyNDM6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1NBTlxcdFxcdDJcXG4gMjQ0OlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9VTklDQVNUXFx0M1xcbiAyNDU6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVFxcdDRcXG4gMjQ2OlxcdFxcdGJvb2xcXHRcXHRcXHRnbG9iYWxfdXNlO1xcbiAyNDc6XFx0XFx0aW50XFx0XFx0XFx0c3luY19jbnQ7XFxuIDI0ODpcXHRcXHRpbnRcXHRcXHRcXHRyZWZjb3VudDtcXG4gMjQ5OlxcdFxcdGludFxcdFxcdFxcdHN5bmNlZDtcXG4gMjUwOlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdV9oZWFkO1xcbiAyNTE6XFx0fTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3Qge1xcbiAyNTQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDI1NTpcXHRcXHRpbnRcXHRcXHRcXHRjb3VudDtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0LyogQXV4aWxpYXJ5IHRyZWUgZm9yIGZhc3RlciBsb29rdXAgb24gYWRkaXRpb24gYW5kIGRlbGV0aW9uICovXFxuIDI1ODpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdHRyZWU7XFxuIDI1OTpcXHR9O1xcbiAyNjA6XFx0XFxuIDI2MTpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgKChsKS1cXHUwMDNlY291bnQpXFxuIDI2MjpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkobCkgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgPT0gMClcXG4gMjYzOlxcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcXFxcbiAyNjQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgXFx1MDAyNihsKS1cXHUwMDNlbGlzdCwgbGlzdClcXG4gMjY1OlxcdFxcbiAyNjY6XFx0I2RlZmluZSBuZXRkZXZfdWNfY291bnQoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI2NzpcXHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG4gMjY4OlxcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXFxcXFxcbiAyNjk6XFx0XFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MjEuNzA4ODY2OTA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODkyMzA2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUMgQWRkcmVzcyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhZGRpdGlvbiBvZiBgaGFgIOKAkyBsaWtlbHkgYSBoYXJkd2FyZSBhZGRyZXNzIOKAkyBpbnRvIGBkZXYtXHUwMDNlbWNgLCB3aGljaCBJJ20gYXNzdW1pbmcgcmVmZXJzIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0IGZvciBhIG5ldHdvcmsgZGV2aWNlIChgZGV2YCkuIExldCdzIGdldCBjcmFja2luZy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHdoZXJlIGRldmljZSBhZGRyZXNzIG1hbmFnZW1lbnQgaXMgaGFuZGxlZC4gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiB0aGlzIGxvZ2ljIGJlZm9yZSwgcHJvYmFibHkgc29tZXdoZXJlIGluIGBuZXQvY29yZS9gLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSBpbnRvIGBkZXZfYWRkcl9saXN0cy5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nLiBXaXRoaW4gdGhhdCBmaWxlLCBJJ2xsIHN0YXJ0IHdpdGggYSBmZXcgc2VhcmNoIHF1ZXJpZXMsIGFpbWluZyBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGlzIHByb2Nlc3MuIEknbSB0aGlua2luZyBJJ2xsIHRyeSBzZWFyY2hpbmcgZm9yIGBkZXZfbWNfYWRkYCBmaXJzdCwgYnV0IEkgbWlnaHQgYWxzbyBjYXN0IGEgd2lkZXIgbmV0IHdpdGggc29tZXRoaW5nIGxpa2UgYF9faHdfYWRkcl9hZGRgIG9yIGFueXRoaW5nIHRoYXQgc3VnZ2VzdHMgaGFyZHdhcmUgYWRkcmVzcyBhZGRpdGlvbi4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3cgbGV2ZWwgbWFuYWdlbWVudC4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGZhaXJseSBzdHJhaWdodCBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MjQuMTk4MTAwNzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mzg2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjM6c3RhdGljIGludCBfX2h3X2FkZHJfaW5zZXJ0KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqbmV3LCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUyPXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MzpfX2h3X2FkZHJfY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU0LVxcdFxcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3NTpzdGF0aWMgaW50IF9faHdfYWRkcl9hZGRfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03Ni1cXHRcXHRcXHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTktXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjA6XFx0aGEgPSBfX2h3X2FkZHJfY3JlYXRlKGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGdsb2JhbCwgc3luYyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjEtXFx0aWYgKCFoYSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3OlxcdHJldHVybiBfX2h3X2FkZHJfYWRkX2V4KGxpc3QsIGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGZhbHNlLCBmYWxzZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cXHRcXHRcXHRcXHQwLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0MC1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE0MTpzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZW50cnkoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIGJvb2wgZ2xvYmFsLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNjctXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNjg6c3RhdGljIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqX19od19hZGRyX2xvb2t1cChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE2OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xOTMtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxOTQ6c3RhdGljIGludCBfX2h3X2FkZHJfZGVsX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTk1LVxcdFxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE5Ny17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxOTg6XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYSA9IF9faHdfYWRkcl9sb29rdXAobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xOTktXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwMS1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIwMjpcXHRyZXR1cm4gX19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZ2xvYmFsLCBzeW5jKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwMy19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMDQtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMDU6c3RhdGljIGludCBfX2h3X2FkZHJfZGVsKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjA2LVxcdFxcdFxcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIwOC17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMDk6XFx0cmV0dXJuIF9faHdfYWRkcl9kZWxfZXgobGlzdCwgYWRkciwgYWRkcl9sZW4sIGFkZHJfdHlwZSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxMC19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTEtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMTI6c3RhdGljIGludCBfX2h3X2FkZHJfc3luY19vbmUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnRvX2xpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIxODpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KHRvX2xpc3QsIGhhLVxcdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXFx1MDAzZXR5cGUsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTktXFx0XFx0XFx0ICAgICAgIGZhbHNlLCB0cnVlLCBoYS1cXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjMwLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjMxOnN0YXRpYyB2b2lkIF9faHdfYWRkcl91bnN5bmNfb25lKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjMyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMzctXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyMzg6XFx0ZXJyID0gX19od19hZGRyX2RlbF9leCh0b19saXN0LCBoYS1cXHUwMDNlYWRkciwgYWRkcl9sZW4sIGhhLVxcdTAwM2V0eXBlLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjM5LVxcdFxcdFxcdCAgICAgICBmYWxzZSwgdHJ1ZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0My1cXHQvKiBhZGRyZXNzIG9uIGZyb20gbGlzdCBpcyBub3QgbWFya2VkIHN5bmNlZCAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjQ0OlxcdF9faHdfYWRkcl9kZWxfZW50cnkoZnJvbV9saXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI0NS19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNDYtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNDc6aW50IF9faHdfYWRkcl9zeW5jX211bHRpcGxlKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjQ4LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZnJvbV9saXN0LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNTUtXFx0XFx0aWYgKGhhLVxcdTAwM2VzeW5jX2NudCA9PSBoYS1cXHUwMDNlcmVmY291bnQpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjI1NjpcXHRcXHRcXHRfX2h3X2FkZHJfdW5zeW5jX29uZSh0b19saXN0LCBmcm9tX2xpc3QsIGhhLCBhZGRyX2xlbik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNTctXFx0XFx0fSBlbHNlIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjI1ODpcXHRcXHRcXHRlcnIgPSBfX2h3X2FkZHJfc3luY19vbmUodG9fbGlzdCwgaGEsIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI1OS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjQtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjY1OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3N5bmNfbXVsdGlwbGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjY2LVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNjktICogc3luYyBhZGRyZXNzZXMgdG8gbW9yZSB0aGVuIDEgZGVzdGluYXRpb24sIHlvdSBuZWVkIHRvIHVzZVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjcwOiAqIF9faHdfYWRkcl9zeW5jX211bHRpcGxlKCkuXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yNzEtICovXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyNzI6aW50IF9faHdfYWRkcl9zeW5jKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjczLVxcdFxcdCAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpmcm9tX2xpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4MC1cXHRcXHRpZiAoIWhhLVxcdTAwM2VzeW5jX2NudCkge1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjgxOlxcdFxcdFxcdGVyciA9IF9faHdfYWRkcl9zeW5jX29uZSh0b19saXN0LCBoYSwgYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjgyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4NC1cXHRcXHR9IGVsc2UgaWYgKGhhLVxcdTAwM2VyZWZjb3VudCA9PSAxKVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Mjg1OlxcdFxcdFxcdF9faHdfYWRkcl91bnN5bmNfb25lKHRvX2xpc3QsIGZyb21fbGlzdCwgaGEsIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4Ni1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI4OC19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyODk6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfc3luYyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yOTAtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoyOTE6dm9pZCBfX2h3X2FkZHJfdW5zeW5jKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp0b19saXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjkyLVxcdFxcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpmcm9tX2xpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTI5OC1cXHRcXHRpZiAoaGEtXFx1MDAzZXN5bmNfY250KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Mjk5OlxcdFxcdFxcdF9faHdfYWRkcl91bnN5bmNfb25lKHRvX2xpc3QsIGZyb21fbGlzdCwgaGEsIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMwMC1cXHR9XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDEtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzAyOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luYyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDMtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDQtLyoqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMDU6ICogIF9faHdfYWRkcl9zeW5jX2RldiAtIFN5bmNocm9uaXplIGRldmljZSdzIG11bHRpY2FzdCBsaXN0XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMDYtICogIEBsaXN0OiBhZGRyZXNzIGxpc3QgdG8gc3luY2hyb25pemVcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzE2LSAqKi9cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjMxNzppbnQgX19od19hZGRyX3N5bmNfZGV2KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzE4LVxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zMzUtXFx0XFx0aGEtXFx1MDAzZXN5bmNfY250LS07XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozMzY6XFx0XFx0X19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTMzNy1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1My19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzozNTQ6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfc3luY19kZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU1LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzU2LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MzU3OiAqICBfX2h3X2FkZHJfcmVmX3N5bmNfZGV2IC0gU3luY2hyb25pemUgZGV2aWNlJ3MgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCB0YWtpbmdcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM1OC0gKiAgaW50byBhY2NvdW50IHJlZmVyZW5jZXNcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzcxLSAqKi9cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjM3MjppbnQgX19od19hZGRyX3JlZl9zeW5jX2RldihzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTM3My1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0zOTQtXFx0XFx0aGEtXFx1MDAzZXN5bmNfY250ID0gcmVmX2NudDtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjM5NTpcXHRcXHRfX2h3X2FkZHJfZGVsX2VudHJ5KGxpc3QsIGhhLCBmYWxzZSwgZmFsc2UpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMzk2LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE0LX1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQxNTpFWFBPUlRfU1lNQk9MKF9faHdfYWRkcl9yZWZfc3luY19kZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE2LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE3LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDE4OiAqICBfX2h3X2FkZHJfcmVmX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBhbmQgcmVmZXJlbmNlcyBvblxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDE5LSAqICBpdCBmcm9tIGRldmljZVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MjQtICogIFJlbW92ZSBhbGwgYWRkcmVzc2VzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGJ5XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0MjU6ICogIF9faHdfYWRkcl9yZWZfc3luY19kZXYoKS4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGVcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQyNi0gKiAgbmRvX3N0b3Agb3IgbmRvX29wZW4gZnVuY3Rpb25zIG9uIGRldmljZXMgdGhhdCByZXF1aXJlIGV4cGxpY2l0IGFkZHJlc3MgKG9yXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQzMC0gKiovXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0MzE6dm9pZCBfX2h3X2FkZHJfcmVmX3Vuc3luY19kZXYoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00MzItXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDQ3LVxcdFxcdGhhLVxcdTAwM2VzeW5jX2NudCA9IDA7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0NDg6XFx0XFx0X19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ0OS1cXHR9XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NTAtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDUxOkVYUE9SVF9TWU1CT0woX19od19hZGRyX3JlZl91bnN5bmNfZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ1Mi1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ1My0vKipcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ1NDogKiAgX19od19hZGRyX3Vuc3luY19kZXYgLSBSZW1vdmUgc3luY2hyb25pemVkIGFkZHJlc3NlcyBmcm9tIGRldmljZVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDU1LSAqICBAbGlzdDogYWRkcmVzcyBsaXN0IHRvIHJlbW92ZSBzeW5jaHJvbml6ZWQgYWRkcmVzc2VzIGZyb21cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDU4LSAqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0NTk6ICogIFJlbW92ZSBhbGwgYWRkcmVzc2VzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGJ5IF9faHdfYWRkcl9zeW5jX2RldigpLlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDYwLSAqICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBuZG9fc3RvcCBvciBuZG9fb3Blblxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NjQtICoqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDY1OnZvaWQgX19od19hZGRyX3Vuc3luY19kZXYoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00NjYtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00ODAtXFx0XFx0aGEtXFx1MDAzZXN5bmNfY250LS07XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0ODE6XFx0XFx0X19od19hZGRyX2RlbF9lbnRyeShsaXN0LCBoYSwgZmFsc2UsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTQ4Mi1cXHR9XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00ODMtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDg0OkVYUE9SVF9TWU1CT0woX19od19hZGRyX3Vuc3luY19kZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDg1LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NDg2OnZvaWQgX19od19hZGRyX2ZsdXNoKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDg3LXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNDk2LX1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjQ5NzpFWFBPUlRfU1lNQk9MX0lGX0tVTklUKF9faHdfYWRkcl9mbHVzaCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy00OTgtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo0OTk6dm9pZCBfX2h3X2FkZHJfaW5pdChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdClcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwMC17XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUwNC19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MDU6RVhQT1JUX1NZTUJPTChfX2h3X2FkZHJfaW5pdCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01MDYtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MDc6c3RhdGljIHZvaWQgX19od19hZGRyX3NwbGljZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqZHN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTA4LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnNyYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTE2LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTE3OiAqICBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdCAtIGNyZWF0ZSBhIHNuYXBzaG90IGNvcHkgb2YgYW4gYWRkcmVzcyBsaXN0XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo1MTg6ICogIEBzbmFwOiBkZXN0aW5hdGlvbiBzbmFwc2hvdCBsaXN0IChuZWVkcyB0byBiZSBfX2h3X2FkZHJfaW5pdC1pbml0aWFsaXplZClcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUxOS0gKiAgQGxpc3Q6IHNvdXJjZSBhZGRyZXNzIGxpc3QgdG8gc25hcHNob3RcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTI3LSAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTI4OmludCBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqc25hcCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTUyOS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU0NC1cXHRcXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTQ1OlxcdFxcdFxcdGVudHJ5ID0gX19od19hZGRyX2NyZWF0ZShoYS1cXHUwMDNlYWRkciwgYWRkcl9sZW4sIGhhLVxcdTAwM2V0eXBlLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTQ2LVxcdFxcdFxcdFxcdFxcdFxcdCBmYWxzZSwgZmFsc2UpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTQ3LVxcdFxcdFxcdGlmICghZW50cnkpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU0ODpcXHRcXHRcXHRcXHRfX2h3X2FkZHJfZmx1c2goc25hcCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NDktXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU1NS1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNuYXAtXFx1MDAzZWxpc3QpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTU2OlxcdFxcdF9faHdfYWRkcl9pbnNlcnQoc25hcCwgZW50cnksIGFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU1Ny1cXHRcXHRzbmFwLVxcdTAwM2Vjb3VudCsrO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NjEtfVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTYyOkVYUE9SVF9TWU1CT0xfSUZfS1VOSVQoX19od19hZGRyX2xpc3Rfc25hcHNob3QpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTYzLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTY0LS8qKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTY1OiAqICBfX2h3X2FkZHJfbGlzdF9yZWNvbmNpbGUgLSBzeW5jIHNuYXBzaG90IGNoYW5nZXMgYmFjayBhbmQgZnJlZSBzbmFwc2hvdHNcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU2Ni0gKiAgQHJlYWxfbGlzdDogdGhlIHJlYWwgYWRkcmVzcyBsaXN0IHRvIHVwZGF0ZVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTY3OiAqICBAd29yazogdGhlIHdvcmtpbmcgc25hcHNob3QgKG1vZGlmaWVkIGJ5IGRyaXZlciB2aWEgX19od19hZGRyX3N5bmNfZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTY4LSAqICBAcmVmOiB0aGUgcmVmZXJlbmNlIHNuYXBzaG90ICh1bnRvdWNoZWQgY29weSBvZiBvcmlnaW5hbCBzdGF0ZSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTc2LSAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NTc3OnZvaWQgX19od19hZGRyX2xpc3RfcmVjb25jaWxlKHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpyZWFsX2xpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01NzgtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKndvcmssXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU4NS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmX2hhLCB0bXAsIFxcdTAwMjZyZWYtXFx1MDAzZWxpc3QsIGxpc3QpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU4NjpcXHRcXHR3b3JrX2hhID0gX19od19hZGRyX2xvb2t1cCh3b3JrLCByZWZfaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNTg3LVxcdFxcdFxcdFxcdFxcdCAgIHJlZl9oYS1cXHUwMDNldHlwZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTU5NS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjU5NjpcXHRcXHRyZWFsX2hhID0gX19od19hZGRyX2xvb2t1cChyZWFsX2xpc3QsIHJlZl9oYS1cXHUwMDNlYWRkciwgYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy01OTctXFx0XFx0XFx0XFx0XFx0ICAgcmVmX2hhLVxcdTAwM2V0eXBlKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjExLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnJlYWxfbGlzdC1cXHUwMDNlbGlzdCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2MTI6XFx0XFx0XFx0XFx0X19od19hZGRyX2luc2VydChyZWFsX2xpc3QsIHJlZl9oYSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTYxMy1cXHRcXHRcXHRcXHRcXHRcXHQgYWRkcl9sZW4pO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02MjgtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Mjk6XFx0X19od19hZGRyX3NwbGljZShjYWNoZSwgd29yayk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2MzA6XFx0X19od19hZGRyX3NwbGljZShjYWNoZSwgcmVmKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTYzMS19XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2MzI6RVhQT1JUX1NZTUJPTF9JRl9LVU5JVChfX2h3X2FkZHJfbGlzdF9yZWNvbmNpbGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjMzLVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02NjE9dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjUtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2NjY6XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjctXFx0ZGV2LVxcdTAwM2VkZXZfYWRkciA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODYtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2ODc6XFx0X19od19hZGRyX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY4OC1cXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjkwLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcwMz12b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTMtXFx0bWVtY3B5KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRyX3NoYWRvd1tvZmZzZXRdLCBhZGRyLCBsZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzE0OlxcdFdBUk5fT04oX19od19hZGRyX2luc2VydChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGhhLCBkZXYtXFx1MDAzZWFkZHJfbGVuKSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MTUtfVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz03Mjk9aW50IGRldl9hZGRyX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXFx0XFx0cmV0dXJuIGVycjtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgYWRkcl90eXBlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0MC1cXHRpZiAoIWVycilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzU3PWludCBkZXZfYWRkcl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzc0LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzc1OlxcdGVyciA9IF9faHdfYWRkcl9kZWwoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzc2LVxcdFxcdFxcdCAgICBhZGRyX3R5cGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz03OTI9aW50IGRldl91Y19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3OTc6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2V1YywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5OC1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9VTklDQVNULCB0cnVlLCBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTgxOS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjgyMDpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04Mzc9aW50IGRldl91Y19kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODQxLVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODQyOlxcdGVyciA9IF9faHdfYWRkcl9kZWwoXFx1MDAyNmRldi1cXHUwMDNldWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04NDMtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTg2ND1pbnQgZGV2X3VjX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODcxLVxcdG5ldGlmX2FkZHJfbG9jayh0byk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo4NzI6XFx0ZXJyID0gX19od19hZGRyX3N5bmMoXFx1MDAyNnRvLVxcdTAwM2V1YywgXFx1MDAyNmZyb20tXFx1MDAzZXVjLCB0by1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODczLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04OTQ9aW50IGRldl91Y19zeW5jX211bHRpcGxlKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkwMS1cXHRuZXRpZl9hZGRyX2xvY2sodG8pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTAyOlxcdGVyciA9IF9faHdfYWRkcl9zeW5jX211bHRpcGxlKFxcdTAwMjZ0by1cXHUwMDNldWMsIFxcdTAwMjZmcm9tLVxcdTAwM2V1YywgdG8tXFx1MDAzZWFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkwMy1cXHRpZiAoIWVycilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTE5PXZvaWQgZGV2X3VjX3Vuc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05MzQtXFx0bmV0aWZfYWRkcl9sb2NrKHRvKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjkzNTpcXHRfX2h3X2FkZHJfdW5zeW5jKFxcdTAwMjZ0by1cXHUwMDNldWMsIFxcdTAwMjZmcm9tLVxcdTAwM2V1YywgdG8tXFx1MDAzZWFkZHJfbGVuKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTkzNi1cXHRfX2Rldl9zZXRfcnhfbW9kZSh0byk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk0OD12b2lkIGRldl91Y19mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NTAtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5NTE6XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZXVjKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk1Mi1cXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05NjI9dm9pZCBkZXZfdWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTYzLXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk2NDpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V1Yyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05NjUtfVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05Nzc9aW50IGRldl9tY19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODEtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4My1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05OTI9c3RhdGljIGludCBfX2Rldl9tY19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTk4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXFx1MDAyNmRldi1cXHUwMDNlbWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTktXFx0XFx0XFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCBnbG9iYWwsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMDMzPXN0YXRpYyBpbnQgX19kZXZfbWNfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEwMzgtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMDM5OlxcdGVyciA9IF9faHdfYWRkcl9kZWxfZXgoXFx1MDAyNmRldi1cXHUwMDNlbWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMDQwLVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgZ2xvYmFsLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEwODc9aW50IGRldl9tY19zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICp0bywgc3RydWN0IG5ldF9kZXZpY2UgKmZyb20pXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEwOTQtXFx0bmV0aWZfYWRkcl9sb2NrKHRvKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEwOTU6XFx0ZXJyID0gX19od19hZGRyX3N5bmMoXFx1MDAyNnRvLVxcdTAwM2VtYywgXFx1MDAyNmZyb20tXFx1MDAzZW1jLCB0by1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTA5Ni1cXHRpZiAoIWVycilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTExNz1pbnQgZGV2X21jX3N5bmNfbXVsdGlwbGUoc3RydWN0IG5ldF9kZXZpY2UgKnRvLCBzdHJ1Y3QgbmV0X2RldmljZSAqZnJvbSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTEyNC1cXHRuZXRpZl9hZGRyX2xvY2sodG8pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTEyNTpcXHRlcnIgPSBfX2h3X2FkZHJfc3luY19tdWx0aXBsZShcXHUwMDI2dG8tXFx1MDAzZW1jLCBcXHUwMDI2ZnJvbS1cXHUwMDNlbWMsIHRvLVxcdTAwM2VhZGRyX2xlbik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTI2LVxcdGlmICghZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMTQyPXZvaWQgZGV2X21jX3Vuc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqdG8sIHN0cnVjdCBuZXRfZGV2aWNlICpmcm9tKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTQ5LVxcdG5ldGlmX2FkZHJfbG9jayh0byk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTUwOlxcdF9faHdfYWRkcl91bnN5bmMoXFx1MDAyNnRvLVxcdTAwM2VtYywgXFx1MDAyNmZyb20tXFx1MDAzZW1jLCB0by1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE1MS1cXHRfX2Rldl9zZXRfcnhfbW9kZSh0byk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTExNjM9dm9pZCBkZXZfbWNfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE2NS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNjY6XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZW1jKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExNjctXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTE3Nz12b2lkIGRldl9tY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMTc4LXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExNzk6XFx0X19od19hZGRyX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlbWMpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE4MC19XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTExODM9c3RhdGljIGludCBuZXRpZl9hZGRyX2xpc3RzX3NuYXBzaG90KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTAtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTkxOlxcdGVyciA9IF9faHdfYWRkcl9saXN0X3NuYXBzaG90KHVjX3NuYXAsIFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5Mi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5My1cXHRpZiAoIWVycilcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjExOTQ6XFx0XFx0ZXJyID0gX19od19hZGRyX2xpc3Rfc25hcHNob3QodWNfcmVmLCBcXHUwMDI2ZGV2LVxcdTAwM2V1YywgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTExOTYtXFx0aWYgKCFlcnIpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMTk3OlxcdFxcdGVyciA9IF9faHdfYWRkcl9saXN0X3NuYXBzaG90KG1jX3NuYXAsIFxcdTAwMjZkZXYtXFx1MDAzZW1jLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTE5OC1cXHRcXHRcXHRcXHRcXHQgICAgICBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjAwLVxcdGlmICghZXJyKVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwMTpcXHRcXHRlcnIgPSBfX2h3X2FkZHJfbGlzdF9zbmFwc2hvdChtY19yZWYsIFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIwMi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjA0LVxcdGlmIChlcnIpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMDU6XFx0XFx0X19od19hZGRyX2ZsdXNoKHVjX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTIwNjpcXHRcXHRfX2h3X2FkZHJfZmx1c2godWNfcmVmKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMDc6XFx0XFx0X19od19hZGRyX2ZsdXNoKG1jX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIwOC1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEyMTM9c3RhdGljIHZvaWQgbmV0aWZfYWRkcl9saXN0c19yZWNvbmNpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIxOC17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjE5OlxcdF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShcXHUwMDI2ZGV2LVxcdTAwM2V1YywgdWNfc25hcCwgdWNfcmVmLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTIyMC1cXHRcXHRcXHRcXHQgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9hZGRyX2NhY2hlKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyMjE6XFx0X19od19hZGRyX2xpc3RfcmVjb25jaWxlKFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBtY19zbmFwLCBtY19yZWYsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjIyLVxcdFxcdFxcdFxcdCBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjc3PXZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI4Ni1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyODc6XFx0X19od19hZGRyX2luaXQoXFx1MDAyNnVjX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI4ODpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2bWNfc25hcCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjg5OlxcdF9faHdfYWRkcl9pbml0KFxcdTAwMjZ1Y19yZWYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5MDpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2bWNfcmVmKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTEtXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNDg9dm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNDkte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM1MDpcXHRfX2h3X2FkZHJfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM1MS1cXHR0aW1lcl9zZXR1cChcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX3JldHJ5X3RpbWVyLCBuZXRpZl9yeF9tb2RlX3JldHJ5LCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MjQuMjQ1NDkyNDE5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODg5OTk1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBfX2h3X2FkZHJfY3JlYXRlYCBpbiBgZGV2X2FkZHJfbGlzdHMuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX19od19hZGRyX2NyZWF0ZWAgd2l0aGluIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYC4gIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcywgc28gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBsaW5lcyA1MC03NSBvZiB0aGUgc291cmNlIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGRvZXMgd2l0aGluIHRoaXMgZmlsZSwgYXMgYGRldl9hZGRyX2xpc3RzLmNgIGlzIGltcG9ydGFudCBmb3IgaGFuZGxpbmcgbmV0d29yayBkZXZpY2UgYWRkcmVzcyBsaXN0cy4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIHNwZWNpZmljIGxpbmVzIGJlY2F1c2UgdGhleSBsaWtlbHkgY29udGFpbiB0aGUgY29yZSBsb2dpYyBvciBpbml0aWFsIHNldHVwIHJlbGF0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzLCBhbmQgSSBjYW4gcXVpY2tseSBncm9rIHRoZSBkZXRhaWxzIHRvIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjI2LjQzNDQ5ODYwOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHR9XFxuICA1MTpcXHRcXG4gIDUyOlxcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXFxuICA1MzpcXHRfX2h3X2FkZHJfY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4gIDU0OlxcdFxcdFxcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcXG4gIDU1OlxcdHtcXG4gIDU2OlxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuICA1NzpcXHRcXHRpbnQgYWxsb2Nfc2l6ZTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0YWxsb2Nfc2l6ZSA9IHNpemVvZigqaGEpO1xcbiAgNjA6XFx0XFx0aWYgKGFsbG9jX3NpemUgXFx1MDAzYyBMMV9DQUNIRV9CWVRFUylcXG4gIDYxOlxcdFxcdFxcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcXG4gIDYyOlxcdFxcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcXG4gIDYzOlxcdFxcdGlmICghaGEpXFxuICA2NDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDY1OlxcdFxcdG1lbWNweShoYS1cXHUwMDNlYWRkciwgYWRkciwgYWRkcl9sZW4pO1xcbiAgNjY6XFx0XFx0aGEtXFx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XFxuICA2NzpcXHRcXHRoYS1cXHUwMDNlcmVmY291bnQgPSAxO1xcbiAgNjg6XFx0XFx0aGEtXFx1MDAzZWdsb2JhbF91c2UgPSBnbG9iYWw7XFxuICA2OTpcXHRcXHRoYS1cXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xcbiAgNzA6XFx0XFx0aGEtXFx1MDAzZXN5bmNfY250ID0gMDtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cmV0dXJuIGhhO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjI2LjQzNDYyODA1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTc0MTUxOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY29weWluZyB0aGUgYWRkcmVzcyBkYXRhIGFuZCBob3cgaXQncyB0aGVuIHBsYWNlZCBpbnRvIGEgbmV0bGluayBtZXNzYWdlLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGJvaWxzIGRvd24gdG8gdGhpczogYF9faHdfYWRkcl9jcmVhdGVgIHVzZXMgYG1lbWNweWAgdG8gY29weSBgYWRkcl9sZW5gIGJ5dGVzIGludG8gYGhhLVx1MDAzZWFkZHJgLCBhbmQgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZW4sIGluIGBydG5sX2ZpbGxfbWNhZGRyYCwgd2UgdXNlIGBubGFfcHV0YCB0byBwbGFjZSB0aGUgZGF0YSBpbnRvIGEgbmV0bGluayBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSBgSUZBX01VTFRJQ0FTVGAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBubGFfcHV0YCB0YWtlcyBgZGV2LVx1MDAzZWFkZHJfbGVuYCBhcyB0aGUgbGVuZ3RoLCBhbmQsIHNpbmNlIGBhZGRyX2xlbmAgZXF1YWxzIGBkZXYtXHUwMDNlYWRkcl9sZW5gLCBhbGwgc2hvdWxkIGJlIHdlbGwuIEJ1dCB3YWl0LCBJIHJlY2FsbCBgbmxhX3B1dGAncyBiZWhhdmlvciBpcyB0byB6ZXJvLXBhZCBhbnkgYWxpZ25tZW50IGJ5dGVzLiBTbyB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGJ5dGVzIGlzIHdyaXR0ZW4sIHdpdGggdGhlIHJlc3QgcGFkZGVkIHdpdGggMC5cblxuTm93LCBJJ20gY2hlY2tpbmcgYHJ0bmxfZHVtcF9tY2FkZHJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGR1bXBpbmcgcHJvY2VzcyB3b3JrcyB0byBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGlzY3JlcGFuY2llcy4gSSBzZWUgdGhhdCBgcnRubF9kdW1wX21jYWRkcmAgdXNlcyBhIGBuZXRsaW5rX2NhbGxiYWNrYCBzdHJ1Y3R1cmUsIGBjYmAsIHdoaWNoIGNvbnRhaW5zIGNvbnRleHQgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbnRleHQgaXMgdXNlZCBhbmQgaWYgYW55IGluaXRpYWxpemF0aW9uIGVycm9ycyBhcmUgYmVpbmcgaW50cm9kdWNlZC5cblxuQWhhISBgY2ItXHUwMDNlY3R4YCBpcyB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgY29yZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGR1bXAsIGFuZCBgY3R4LVx1MDAzZWlmaW5kZXhgIGFuZCBgY3R4LVx1MDAzZWFkZHJfaWR4YCBhcmUgdXNlZCB0byB0cmFjayB0aGUgcHJvZ3Jlc3MuIFNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBpdGVyYXRpb24gdGVjaG5pcXVlIGZvciBkdW1wcyBhbmQgZG9lc24ndCBkaXJlY3RseSByYWlzZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHRoZSBtZW1vcnkgY29weS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgZm9yX2VhY2hfbmV0ZGV2X2R1bXBgIGxvb3Agd29ya3Mgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk4MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjMwLjQwODc4MjIyMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3ODU0MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvcl9lYWNoX25ldGRldl9kdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXQtcHJvY2ZzLmM9MTA9c3RhdGljIHZvaWQgKmRldl9zZXFfZnJvbV9pbmRleChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTQtXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjE1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHNlcV9maWxlX25ldChzZXEpLCBkZXYsIGlmaW5kZXgpIHtcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTYtXFx0XFx0KnBvcyA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmM9ODE9bmV0ZGV2X25sX3BhZ2VfcG9vbF9nZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jLTk4LVxcdG11dGV4X2xvY2soXFx1MDAyNnBhZ2VfcG9vbHNfbG9jayk7XFxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYzo5OTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIG5ldGRldiwgc3RhdGUtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jLTEwMC1cXHRcXHQvKiBFaXRoZXIgdGhlIHByb3ZpZGVkIGlmaW5kZXggZG9lc24ndCBleGlzdCBvciBkb25lIGR1bXBpbmcgKi9cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1NDQ9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MTYtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjYxNzpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MTgtXFx0XFx0aWYgKGxpbmtfZHVtcF9maWx0ZXJlZChkZXYsIG1hc3Rlcl9pZHgsIGtpbmRfb3BzKSlcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ2ODU9c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ3MTgtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDcxOTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChmaWx0ZXIudGd0X25ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NzIwLVxcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NTMwNz1zdGF0aWMgaW50IHJ0bmxfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMzNi1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo1MzM3OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzM4LVxcdFxcdGlmIChicnBvcnRfaWR4IFxcdTAwMjZcXHUwMDI2IChkZXYtXFx1MDAzZWlmaW5kZXggIT0gYnJwb3J0X2lkeCkpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz02NjQwPXN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTY2NzEtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjY3MjpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjY3My1cXHRcXHRlcnIgPSBydG5sX2ZpbGxfc3RhdHNpbmZvKHNrYiwgZGV2LCBSVE1fTkVXU1RBVFMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjMwLjczNjY0MDk0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mjg1OTY2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkV4YW1pbmluZyBydG5ldGxpbmsuYydzIFVzYWdlIG9mICdjdHgnKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZywgd2hlcmUgYXJlIHdlIHNlZWluZyBgY3R4YCBhY3R1YWxseSBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIGBydG5sX2R1bXBfaWZpbmZvYCBmdW5jdGlvbiBhbmQgb3RoZXIgcmVsYXRlZCBkdW1wcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGZsb3cgb2YgaG93IHRoaXMgYGN0eGAgaXMgYmVpbmcgaGFuZGxlZCB3aXRoaW4gdGhlIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhyb3VnaCBgcnRubF9kdW1wX2lmaW5mb2Agc3BlY2lmaWNhbGx5LCBhbmQgdGhlbiBleHBhbmQgbXkgc2VhcmNoIHRvIG90aGVyIHNpbWlsYXIgZHVtcHMgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYGN0eGAgaXMgaW5pdGlhbGl6ZWQsIHVzZWQgZm9yIGRhdGEgcmV0cmlldmFsLCBhbmQgdWx0aW1hdGVseSwgd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gYW55IGlzc3VlcyBvciBpbXByb3ZlbWVudHMgSSdtIHRoaW5raW5nIGFib3V0LiBVbmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjM3LjAyMjYwOTc4NloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDYzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0NDpcXHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjI1NDU6XFx0e1xcbjI1NDY6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2ItXFx1MDAzZWV4dGFjaztcXG4yNTQ3OlxcdFxcdHN0cnVjdCBydG5sX2xpbmtfb3BzICpraW5kX29wcyA9IE5VTEw7XFxuMjU0ODpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuMjU0OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4yNTUwOlxcdFxcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xcbjI1NTE6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVgrMV07XFxuMjU1MjpcXHRcXHRzdHJ1Y3Qge1xcbjI1NTM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbjI1NTQ6XFx0XFx0fSAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjI1NTU6XFx0XFx0c3RydWN0IG5ldCAqdGd0X25ldCA9IG5ldDtcXG4yNTU2OlxcdFxcdHUzMiBleHRfZmlsdGVyX21hc2sgPSAwO1xcbjI1NTc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yNTU4OlxcdFxcdGludCBvcHNfc3JjdV9pbmRleDtcXG4yNTU5OlxcdFxcdGludCBtYXN0ZXJfaWR4ID0gMDtcXG4yNTYwOlxcdFxcdGludCBuZXRuc2lkID0gLTE7XFxuMjU2MTpcXHRcXHRib29sIG5lZWRfcnRubDtcXG4yNTYyOlxcdFxcdGludCBlcnIsIGk7XFxuMjU2MzpcXHRcXG4yNTY0OlxcdFxcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9pZmluZm9fcmVxKG5saCwgY2ItXFx1MDAzZXN0cmljdF9jaGVjaywgdGIsIGV4dGFjayk7XFxuMjU2NTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjI1NjY6XFx0XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spXFxuMjU2NzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI1Njg6XFx0XFxuMjU2OTpcXHRcXHRcXHRnb3RvIHdhbGtfZW50cmllcztcXG4yNTcwOlxcdFxcdH1cXG4yNTcxOlxcdFxcbjI1NzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBJRkxBX01BWDsgKytpKSB7XFxuMjU3MzpcXHRcXHRcXHRpZiAoIXRiW2ldKVxcbjI1NzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjU3NTpcXHRcXG4yNTc2OlxcdFxcdFxcdC8qIG5ldyBhdHRyaWJ1dGVzIHNob3VsZCBvbmx5IGJlIGFkZGVkIHdpdGggc3RyaWN0IGNoZWNraW5nICovXFxuMjU3NzpcXHRcXHRcXHRzd2l0Y2ggKGkpIHtcXG4yNTc4OlxcdFxcdFxcdGNhc2UgSUZMQV9UQVJHRVRfTkVUTlNJRDpcXG4yNTc5OlxcdFxcdFxcdFxcdG5ldG5zaWQgPSBubGFfZ2V0X3MzMih0YltpXSk7XFxuMjU4MDpcXHRcXHRcXHRcXHR0Z3RfbmV0ID0gcnRubF9nZXRfbmV0X25zX2NhcGFibGUoc2tiLVxcdTAwM2VzaywgbmV0bnNpZCk7XFxuMjU4MTpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHRndF9uZXQpKSB7XFxuMjU4MjpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHRhcmdldCBuZXR3b3JrIG5hbWVzcGFjZSBpZFxcXCIpO1xcbjI1ODM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUih0Z3RfbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MTk6MzcuMDIyODU3ODU3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MDE1MjM3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgUlROTCBNdWx0aWNhc3QgRHVtcCBIYW5kbGVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLiBJJ3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBjb2RlLCBtZXRpY3Vsb3VzbHkgdHJhY2luZyBkYXRhIGZsb3cuIEZpcnN0LCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgIHZhbGlkYXRlcyB0aGUgcmVxdWVzdDsgSSd2ZSBjaGVja2VkIHRoYXQgdGhlIGBmaWx0ZXJgIHN0cnVjdHVyZSBhbmQgcmVsYXRlZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYW5kIGhhbmRsZXMgYW55IHBvdGVudGlhbCBlcnJvcnMgY29ycmVjdGx5LCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UuIFRoZSBgdGd0X25ldGAgbWVtYmVyIGluIGBmaWx0ZXJgIGxvb2tzIGxpa2UgaXQncyBwcm9wZXJseSBoYW5kbGVkLCB3aXRoIGVycm9yIHJldHVybnMgcHJldmVudGluZyB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBhbmQgZW5zdXJpbmcgYHB1dF9uZXRgIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBuZXQgbmFtZXNwYWNlIGxvb2t1cCBzdWNjZWVkcyBhbmQgdGhlIGBuZXRuc2lkYCBpcyBub24tbmVnYXRpdmUuXG5cblRoZW4gSSBleGFtaW5lZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGBzdHJ1Y3QgaWZhZGRybXNnYCB3aGljaCBpcyBzZW50IHRvIHVzZXIgc3BhY2UuIEkgY29uZmlybWVkIHRoYXQgYWxsIGl0cyBtZW1iZXJzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIHdyaXR0ZW4gdG8gYmVmb3JlIHRoZSBzdHJ1Y3R1cmUgaXMgc2VudCBhY3Jvc3MuICBUaGUgbmV0bGluayBhdHRyaWJ1dGVzIChgSUZBX1RBUkdFVF9ORVROU0lEYCwgYElGQV9NVUxUSUNBU1RgLCBgSUZBX01DX1VTRVJTYCwgYElGQV9GTEFHU2ApIGFsc28gbG9vayBzYWZlOyB0aGV5IGFyZSBlaXRoZXIgcHJpbWl0aXZlIHR5cGVzIHBhc3NlZCBieSB2YWx1ZSBvciBoYXJkd2FyZSBhZGRyZXNzZXMgY29waWVkIGluIGNodW5rcyBkZXRlcm1pbmVkIGJ5IGBkZXYtXHUwMDNlYWRkcl9sZW5gLCB3aXRoIGBubGFfcHV0XypgIHRha2luZyBjYXJlIG9mIHBhZGRpbmcuIEkgY2FyZWZ1bGx5IGFzc2Vzc2VkIGV2ZXJ5IGZ1bmN0aW9uIChlLmcuLCBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGV0Yy4pIHRvIG1ha2Ugc3VyZSBubyBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gQWxsIHJlbGV2YW50IHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIHRoZXJlIGFyZSBubyBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gIEkndmUgY2hlY2tlZCBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhbHNvIGZvciBwYWRkaW5nIGluIGRhdGEgc3RydWN0dXJlcyBvciBuZXRsaW5rIGF0dHJpYnV0ZXMuIEkgZG9uJ3Qgc2VlIGFueS4gVGhlIGNvZGUgYXBwZWFycyBjbGVhbiBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgS01TQU4gZ3VpZGVsaW5lcyBhbmQgY29uY2x1ZGVkIHRoYXQgbm9uZSBvZiB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIHRydWUgYXBwbHkgaGVyZS4gIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgc2VudCB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBhbmQgdGhlcmUncyBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YWx1ZXMuICBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApIGNvdmVyIGFueSBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBvciBkZXZpY2UgbG9va3VwIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NjAsIk91dHB1dFRva2VucyI6MzE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjE5OjUxLjAzODA5ODg3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBSVE1fR0VUTVVMVElDQVNUIGR1bXAgaGFuZGxlciBmb3IgUEZfUEFDS0VUIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYy5cXG5cXG4xLiBOZXRsaW5rIE1lc3NhZ2UgSW5pdGlhbGl6YXRpb246IFRoZSBmaXhlZCBoZWFkZXIgYHN0cnVjdCBpZmFkZHJtc2dgIGNvbnRhaW5zIG5vIHN0cnVjdHVyZSBwYWRkaW5nICg0IHU4IGZpZWxkcyBmb2xsb3dlZCBieSBhIHUzMiBmaWVsZCwgOCBieXRlcyB0b3RhbCkgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHJ0bmxfZmlsbF9tY2FkZHIoKWAuXFxuMi4gTmV0bGluayBBdHRyaWJ1dGVzOiBBbGwgYXBwZW5kZWQgbmV0bGluayBhdHRyaWJ1dGVzIHVzZSBzdGFuZGFyZCBuZXRsaW5rIGhlbHBlcnMgKGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3MzMmAsIGBubGFfcHV0YCkgdGhhdCBwYXNzIHNjYWxhciB2YWx1ZXMgb3IgZXhhY3RseSBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgYnl0ZXMgZnJvbSBgaGEtXFx1MDAzZWFkZHJgICh3aGljaCBpcyBpbml0aWFsaXplZCB0byBgZGV2LVxcdTAwM2VhZGRyX2xlbmAgdXBvbiBjcmVhdGlvbikuIFBhZGRpbmcgYWxpZ25tZW50IGJ5dGVzIGFyZSB6ZXJvZWQgYnkgbmV0bGluayBoZWxwZXJzLlxcbjMuIFZhcmlhYmxlcyBcXHUwMDI2IEZpbHRlcnM6IFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgc3RydWN0IHJ0bmxfbWNhZGRyX2R1bXBfZmlsdGVyYCBhbmQgZHVtcCBjb250ZXh0IHN0YXRlIChgY3R4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgcmVhZHMgdW5pbml0aWFsaXplZCBmaWVsZHMuXFxuNC4gS0FTQU4vU3RhbmRhcmQgU2FuaXRpemVyczogUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5LCBSQ1UvbG9ja2RlcCB0cmF2ZXJzYWwgb2YgZGV2aWNlIGxpc3RzLCBuZXR3b3JrIG5hbWVzcGFjZSByZWZjb3VudHMsIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gUlRNX0dFVE1VTFRJQ0FTVCBkdW1wIGhhbmRsZXIgZm9yIFBGX1BBQ0tFVCBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gbmV0L2NvcmUvcnRuZXRsaW5rLmMuXFxuXFxuMS4gTmV0bGluayBNZXNzYWdlIEluaXRpYWxpemF0aW9uOiBUaGUgZml4ZWQgaGVhZGVyIGBzdHJ1Y3QgaWZhZGRybXNnYCBjb250YWlucyBubyBzdHJ1Y3R1cmUgcGFkZGluZyAoNCB1OCBmaWVsZHMgZm9sbG93ZWQgYnkgYSB1MzIgZmllbGQsIDggYnl0ZXMgdG90YWwpIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBydG5sX2ZpbGxfbWNhZGRyKClgLlxcbjIuIE5ldGxpbmsgQXR0cmlidXRlczogQWxsIGFwcGVuZGVkIG5ldGxpbmsgYXR0cmlidXRlcyB1c2Ugc3RhbmRhcmQgbmV0bGluayBoZWxwZXJzIChgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zMzJgLCBgbmxhX3B1dGApIHRoYXQgcGFzcyBzY2FsYXIgdmFsdWVzIG9yIGV4YWN0bHkgYGRldi1cXHUwMDNlYWRkcl9sZW5gIGJ5dGVzIGZyb20gYGhhLVxcdTAwM2VhZGRyYCAod2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGRldi1cXHUwMDNlYWRkcl9sZW5gIHVwb24gY3JlYXRpb24pLiBQYWRkaW5nIGFsaWdubWVudCBieXRlcyBhcmUgemVyb2VkIGJ5IG5ldGxpbmsgaGVscGVycy5cXG4zLiBWYXJpYWJsZXMgXFx1MDAyNiBGaWx0ZXJzOiBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYHN0cnVjdCBydG5sX21jYWRkcl9kdW1wX2ZpbHRlcmAgYW5kIGR1bXAgY29udGV4dCBzdGF0ZSAoYGN0eGApIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHJlYWRzIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxcbjQuIEtBU0FOL1N0YW5kYXJkIFNhbml0aXplcnM6IFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgUkNVL2xvY2tkZXAgdHJhdmVyc2FsIG9mIGRldmljZSBsaXN0cywgbmV0d29yayBuYW1lc3BhY2UgcmVmY291bnRzLCBvciBidWZmZXIgYm91bmRzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[1] Phase: Succeeded StartedAt: 2026-09-09 15:20:28 +0000 UTC FinishedAt: 2026-09-09 15:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 15:20:28 +0000 UTC FinishedAt: 2026-09-09 15:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2] Phase: Succeeded StartedAt: 2026-09-09 15:20:28 +0000 UTC FinishedAt: 2026-09-09 19:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 15:20:28 +0000 UTC FinishedAt: 2026-09-09 19:01:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 15:20:28 +0000 UTC FinishedAt: 2026-09-09 15:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 15:20:28 +0000 UTC FinishedAt: 2026-09-09 15:20:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowlfmmp/series-workflowlfmmp-convert-artifact-3683374138/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 15:20:38 +0000 UTC FinishedAt: 2026-09-09 15:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 15:20:38 +0000 UTC FinishedAt: 2026-09-09 15:37:49 +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:*fa17f22b-968a-4b2f-adee-dfa72f85aada,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-workflowlfmmp/series-workflowlfmmp-convert-artifact-3683374138/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": "a3008bba-1391-42f4-a8c9-96919f664374", "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-workflowlfmmp/series-workflowlfmmp-build-action-365496808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 15:20:38 +0000 UTC FinishedAt: 2026-09-09 15:37:39 +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:*fa17f22b-968a-4b2f-adee-dfa72f85aada,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-workflowlfmmp/series-workflowlfmmp-convert-artifact-3683374138/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": "a3008bba-1391-42f4-a8c9-96919f664374", "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-workflowlfmmp/series-workflowlfmmp-build-action-365496808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 15:37:49 +0000 UTC FinishedAt: 2026-09-09 15:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 15:37:49 +0000 UTC FinishedAt: 2026-09-09 15:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 15:37:49 +0000 UTC FinishedAt: 2026-09-09 15:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 15:37:49 +0000 UTC FinishedAt: 2026-09-09 15:37:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowlfmmp/series-workflowlfmmp-convert-artifact-2222771861/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 15:37:59 +0000 UTC FinishedAt: 2026-09-09 15:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 15:37:59 +0000 UTC FinishedAt: 2026-09-09 15:40:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3008bba-1391-42f4-a8c9-96919f664374,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-workflowlfmmp/series-workflowlfmmp-build-action-365496808/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-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 15:40:18 +0000 UTC FinishedAt: 2026-09-09 15:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 15:40:18 +0000 UTC FinishedAt: 2026-09-09 15:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 15:40:18 +0000 UTC FinishedAt: 2026-09-09 15:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 15:40:18 +0000 UTC FinishedAt: 2026-09-09 15:57:00 +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:*fa17f22b-968a-4b2f-adee-dfa72f85aada,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-workflowlfmmp/series-workflowlfmmp-convert-artifact-2222771861/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": "6934d513-d677-442e-b0f2-90b218027ca9", "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-workflowlfmmp/series-workflowlfmmp-build-action-2336978209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 15:40:18 +0000 UTC FinishedAt: 2026-09-09 15:56:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fa17f22b-968a-4b2f-adee-dfa72f85aada,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-workflowlfmmp/series-workflowlfmmp-convert-artifact-2222771861/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": "6934d513-d677-442e-b0f2-90b218027ca9", "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-workflowlfmmp/series-workflowlfmmp-build-action-2336978209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 15:57:00 +0000 UTC FinishedAt: 2026-09-09 15:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 15:57:00 +0000 UTC FinishedAt: 2026-09-09 15:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 15:57:00 +0000 UTC FinishedAt: 2026-09-09 15:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 15:57:00 +0000 UTC FinishedAt: 2026-09-09 15:58:54 +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:*6934d513-d677-442e-b0f2-90b218027ca9,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-workflowlfmmp/series-workflowlfmmp-build-action-2336978209/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-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 19:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 19:01:55 +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":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"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:*a3008bba-1391-42f4-a8c9-96919f664374,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6934d513-d677-442e-b0f2-90b218027ca9,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-workflowlfmmp/series-workflowlfmmp-build-action-365496808/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-workflowlfmmp/series-workflowlfmmp-build-action-2336978209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 15:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 15:59:09 +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":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"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-workflowlfmmp/series-workflowlfmmp-convert-artifact-30997882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 15:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 15:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 15:59:04 +0000 UTC FinishedAt: 2026-09-09 15:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 15:59:14 +0000 UTC FinishedAt: 2026-09-09 19:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfmmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_fill_mcaddr","rtnl_valid_dump_mcaddr_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"fb527853-2b10-4a3d-824a-fbb23da2b2bf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 15:59:14 +0000 UTC FinishedAt: 2026-09-09 19:01:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3008bba-1391-42f4-a8c9-96919f664374,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6934d513-d677-442e-b0f2-90b218027ca9,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-workflowlfmmp/series-workflowlfmmp-build-action-365496808/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-workflowlfmmp/series-workflowlfmmp-build-action-2336978209/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-workflowlfmmp/series-workflowlfmmp-convert-artifact-30997882/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,}