Name: series-workflowqc77t Phase: Succeeded StartedAt: 2026-09-03 11:43:41 +0000 UTC FinishedAt: 2026-09-03 15:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[0] Phase: Succeeded StartedAt: 2026-09-03 11:43:41 +0000 UTC FinishedAt: 2026-09-03 12:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 11:43:41 +0000 UTC FinishedAt: 2026-09-03 12:00:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED" ], "series_id": "e2016e69-2263-45ef-aa6f-6511797098c2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "qdisc_free_rcu", "qdisc_free_cb", "qdisc_create", "__qdisc_destroy", "tc_modify_qdisc" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O3FkaXNjX2ZyZWVfY2ImIzM0OywKICAgICYjMzQ7cWRpc2NfY3JlYXRlJiMzNDssCiAgICAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBjbGVhbnVwIHBhdGggaW4gYHFkaXNjX2NyZWF0ZSgpYCBhbmQgYF9fcWRpc2NfZGVzdHJveSgpYCB0byBmcmVlIHRoZSBgc3RydWN0IFFkaXNjYCBzdHJ1Y3R1cmUgYXN5bmNocm9ub3VzbHkgdmlhIFJDVSAoYGNhbGxfcmN1YCkgaW5zdGVhZCBvZiBzeW5jaHJvbm91c2x5LiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmFjZSBjb25kaXRpb25zIHdoZXJlIGNvbmN1cnJlbnQgUkNVIHJlYWRlcnMgbWlnaHQgYWNjZXNzIHRoZSBRZGlzYyB3aGlsZSBpdCBpcyBiZWluZyBmcmVlZC5cblxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBmcmVlaW5nIG9mIHN0cnVjdCBRZGlzYyBvbiB0aGUgZXJyb3IgdW53aW5kaW5nIHBhdGggb2YgcWRpc2NfY3JlYXRlKCkgZnJvbSBpbW1lZGlhdGUgc3luY2hyb25vdXMgZnJlZWluZyB0byBkZWZlcnJlZCBSQ1UgZnJlZWluZyB2aWEgY2FsbF9yY3UgKHFkaXNjX2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyBvYmplY3QgbGlmZXRpbWUgYW5kIGNsZWFudXAgc2VtYW50aWNzIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGVyIChuZXQvc2NoZWQpIHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgVEMgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcWRpc2MgY3JlYXRpb24gZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzZWE1MTVhNWYxN2UyMjhiYWI0ZGJhNWM4MjAxYzk1NDAwYmI3NzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDExOjU5OjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oXG5pbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcyxcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuJiM0Mzt2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IFFkaXNjX29wcyAqb3BzLCB1MzIgcGFyZW50aWQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTEzODIsNyAmIzQzOzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBlcnJfb3V0MzpcbiBcdHFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTtcbiBcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xuLVx0cWRpc2NfZnJlZShzY2gpO1xuJiM0MztcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XG4gZXJyX291dDI6XG4gXHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cdTAwM2Vvd25lcik7XG4gZXJyX291dDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5pbmRleCBlZjJiNGJmNTE1NjQxLi43MTYzMGI3OTVmOWQ2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5AQCAtMTA4NiwyMSAmIzQzOzEwODYsMjEgQEAgdm9pZCBxZGlzY19yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHFkaXNjX3Jlc2V0KTtcbiBcbi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYylcbiYjNDM7c3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0aWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxZGlzYykpIHtcbi1cdFx0ZnJlZV9wZXJjcHUocWRpc2MtXHUwMDNlY3B1X2JzdGF0cyk7XG4tXHRcdGZyZWVfcGVyY3B1KHFkaXNjLVx1MDAzZWNwdV9xc3RhdHMpO1xuJiM0MztcdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4mIzQzO1xuJiM0MztcdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocSkpIHtcbiYjNDM7XHRcdGZyZWVfcGVyY3B1KHEtXHUwMDNlY3B1X2JzdGF0cyk7XG4mIzQzO1x0XHRmcmVlX3BlcmNwdShxLVx1MDAzZWNwdV9xc3RhdHMpO1xuIFx0fVxuIFxuLVx0a2ZyZWUocWRpc2MpO1xuJiM0MztcdGtmcmVlKHEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiYjNDM7dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIHtcbi1cdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4tXG4tXHRxZGlzY19mcmVlKHEpO1xuJiM0MztcdGNhbGxfcmN1KFx1MDAyNnFkaXNjLVx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuQEAgLTExMjcsNyAmIzQzOzExMjcsNyBAQCBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbiBcbiBcdHRyYWNlX3FkaXNjX2Rlc3Ryb3kocWRpc2MpO1xuIFxuLVx0Y2FsbF9yY3UoXHUwMDI2cWRpc2MtXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcbiYjNDM7XHRxZGlzY19mcmVlX3JjdShxZGlzYyk7XG4gfVxuIFxuIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O3FkaXNjX2ZyZWVfY2ImIzM0OywKICAgICYjMzQ7cWRpc2NfY3JlYXRlJiMzNDssCiAgICAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGZyZWVpbmcgb2Ygc3RydWN0IFFkaXNjIG9uIHRoZSBlcnJvciB1bndpbmRpbmcgcGF0aCBvZiBxZGlzY19jcmVhdGUoKSBmcm9tIGltbWVkaWF0ZSBzeW5jaHJvbm91cyBmcmVlaW5nIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nIHZpYSBjYWxsX3JjdSAocWRpc2NfZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIG9iamVjdCBsaWZldGltZSBhbmQgY2xlYW51cCBzZW1hbnRpY3MgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsZXIgKG5ldC9zY2hlZCkgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBUQyBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGR1cmluZyBxZGlzYyBjcmVhdGlvbiBmYWlsdXJlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjNlYTUxNWE1ZjE3ZTIyOGJhYjRkYmE1YzgyMDFjOTU0MDBiYjc3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTE6NTk6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCiAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7CiYjNDM7dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJCWNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywgdTMyIHBhcmVudGlkLAogCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTEzODIsNyAmIzQzOzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIGVycl9vdXQzOgogCXFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTsKIAluZXRkZXZfcHV0KGRldiwgJmFtcDtzY2gtJmd0O2Rldl90cmFja2VyKTsKLQlxZGlzY19mcmVlKHNjaCk7CiYjNDM7CXFkaXNjX2ZyZWVfcmN1KHNjaCk7CiBlcnJfb3V0MjoKIAlicGZfbW9kdWxlX3B1dChvcHMsIG9wcy0mZ3Q7b3duZXIpOwogZXJyX291dDoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggZWYyYjRiZjUxNTY0MS4uNzE2MzBiNzk1ZjlkNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTEwODYsMjEgJiM0MzsxMDg2LDIxIEBAIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYykKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpOwogCi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYykKJiM0MztzdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKLQlpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHFkaXNjKSkgewotCQlmcmVlX3BlcmNwdShxZGlzYy0mZ3Q7Y3B1X2JzdGF0cyk7Ci0JCWZyZWVfcGVyY3B1KHFkaXNjLSZndDtjcHVfcXN0YXRzKTsKJiM0MzsJc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKJiM0MzsKJiM0MzsJaWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxKSkgewomIzQzOwkJZnJlZV9wZXJjcHUocS0mZ3Q7Y3B1X2JzdGF0cyk7CiYjNDM7CQlmcmVlX3BlcmNwdShxLSZndDtjcHVfcXN0YXRzKTsKIAl9CiAKLQlrZnJlZShxZGlzYyk7CiYjNDM7CWtmcmVlKHEpOwogfQogCi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKJiM0Mzt2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpCiB7Ci0Jc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKLQotCXFkaXNjX2ZyZWUocSk7CiYjNDM7CWNhbGxfcmN1KCZhbXA7cWRpc2MtJmd0O3JjdSwgcWRpc2NfZnJlZV9jYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQpAQCAtMTEyNyw3ICYjNDM7MTEyNyw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQogCiAJdHJhY2VfcWRpc2NfZGVzdHJveShxZGlzYyk7CiAKLQljYWxsX3JjdSgmYW1wO3FkaXNjLSZndDtyY3UsIHFkaXNjX2ZyZWVfY2IpOwomIzQzOwlxZGlzY19mcmVlX3JjdShxZGlzYyk7CiB9CiAKIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUXVldWVpbmcgRGlzY2lwbGluZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYsIGFuZCB0aGUgbWFpbiB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc2hpZnQgZnJvbSBgcWRpc2NfZnJlZWAgdG8gYHFkaXNjX2ZyZWVfcmN1YC4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgdXNpbmcgYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBjYWxsYmFjayBmb3IgZnJlZWluZyBxdWV1ZWluZyBkaXNjaXBsaW5lcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlcmUmIzM5O3MgYW4gZXJyb3IgZHVyaW5nIHRoZSBgcWRpc2NfY3JlYXRlYCBwcm9jZXNzLiBUaGlzIGlzIGdvb2QsIEkgYWx3YXlzIGxpa2UgdG8gc2VlIG1vcmUgUkNVIHVzYWdlIHdoZXJlIGl0IG1ha2VzIHNlbnNlLCByZWR1Y2VzIGxvY2sgY29udGVudGlvbiBhbmQgaW1wcm92ZXMgY29uY3VycmVuY3ksIGFuZCBpcyBjb21tb24gYmVzdCBwcmFjdGljZSBpbiB0aGlzIGFyZWEuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYWZmZWN0IGNvZGUgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCB3aGVyZSBgcWRpc2NfY3JlYXRlYCBpcywgc28gdGhlIGltcGFjdCBpcyBpbiB0aGUgY29yZSBBUEkuIFRoZSBvdGhlciBhcmVhIGFmZmVjdGVkIHNlZW1zIHRvIGJlIGBuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY2AsIHdoaWNoIGxpa2VseSBpbnZvbHZlcyByZWZhY3RvcmluZyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLCBzbyBgcWRpc2NfZnJlZV9jYmAgYW5kIGBxZGlzY19mcmVlX3JjdWAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBzb21lIG9mIG15IHRvb2xzIHRvIGRpZyBpbi4gSSBzaG91bGQgY2hlY2sgYm90aCBvZiB0aG9zZSBmaWxlcyBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWRpc2NfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEyNzE9c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg0LVx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnNjaC1cdTAwM2VkZXZfdHJhY2tlcik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzODU6XHRxZGlzY19mcmVlX3JjdShzY2gpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg2LWVycl9vdXQyOlxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEwODc9RVhQT1JUX1NZTUJPTChxZGlzY19yZXNldCk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDg4LVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTA4OTpzdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEwOTAte1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDAtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTAxOnZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYylcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDIte1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEwMzpcdGNhbGxfcmN1KFx1MDAyNnFkaXNjLVx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTA0LX1cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMTA2PXN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMjktXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTMwOlx0cWRpc2NfZnJlZV9yY3UocWRpc2MpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFFkaXNjIENyZWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBxZGlzY19jcmVhdGVgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGNyZWF0aW5nIHRyYWZmaWMgY29udHJvbCBkaXNjaXBsaW5lcyBsaXZlcywgb2J2aW91c2x5LiBJJiMzOTttIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gaG93IGEgbmV3IHFkaXNjIGlzIHJlZ2lzdGVyZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB3aG9sZSBpbnN0YW50aWF0aW9uIHByb2Nlc3MuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlcmUmIzM5O3MgYSB0YWJsZSBvZiByZWdpc3RlcmVkIHFkaXNjIHR5cGVzLCBtYXliZSB1c2luZyBzb21ldGhpbmcgbGlrZSBhIGBzdHJ1Y3QgbGlzdF9oZWFkYCwgYW5kIGBxZGlzY19jcmVhdGVgIGl0ZXJhdGVzIHRocm91Z2ggdGhhdCB0byBmaW5kIHRoZSByaWdodCBmYWN0b3J5IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4KCknigJltIGFsc28gYXNzdW1pbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBraW5kIG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBsb2NraW5nIGludm9sdmVkLCBlc3BlY2lhbGx5IGlmIHRoZSBxZGlzYyBjYW4gYmUgdXNlZCBieSBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMgb3IgdHJhZmZpYyBmbG93cyBzaW11bHRhbmVvdXNseS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBjYXVzZSBpc3N1ZXMgd2l0aCwgc2F5LCBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgcWRpc2MmIzM5O3MgcHJpdmF0ZSBkYXRhLgoKRnVydGhlcm1vcmUsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB0byBiZSBwcmVzZW50LiBJIGltYWdpbmUgaXQgc2hvdWxkIGRlYWwgd2l0aCBjYXNlcyBsaWtlIGEgbWlzc2luZyBvciBpbnZhbGlkIHFkaXNjIHR5cGUsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yIHByb2JsZW1zIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc3RhYmlsaXR5IGFuZCBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgd2hhdCB0aGUgdHlwaWNhbCBmYWlsdXJlIG1vZGVzIGFyZSwgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdXNlcyBvZiBga21hbGxvY2AsIGBrZnJlZWAsIG9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRpbmcuIEFueSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3b3VsZCBiZSBkaXNhc3Ryb3VzIGluIHRoaXMgYXJlYS4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGhvdyB0aGUgcWRpc2PigJlzIHByaXZhdGUgZGF0YSBpcyBtYW5hZ2VkLCBhbmQgaG93IGl0cyBsaWZldGltZSBpcyB0aWVkIHRvIHRoZSBuZXQgZGV2aWNlIG9yIHRyYWZmaWMgZmxvdy4gSSBob3BlIHRoZXJlJiMzOTtzIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBnZW5lcmljIHFkaXNjIGNvcmUgYW5kIHRoZSBzcGVjaWZpYyBxZGlzYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgSFRCLCBUQkYsIGV0Yy4pLCB3aGljaCBzaG91bGQgbWFrZSB0aGUgY29kZSBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gbWFpbnRhaW4uIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNTA6XHRcbjEzNTE6XHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG4xMzUyOlx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuMTM1MzpcdFx0XHRpZiAoc2NoLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ1FfRl9NUVJPT1QpIHtcbjEzNTQ6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBhdHRhY2ggcmF0ZSBlc3RpbWF0b3IgdG8gYSBtdWx0aS1xdWV1ZSByb290IHFkaXNjXCYjMzQ7KTtcbjEzNTU6XHRcdFx0XHRnb3RvIGVycl9vdXQ0O1xuMTM1NjpcdFx0XHR9XG4xMzU3Olx0XG4xMzU4Olx0XHRcdGVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKFx1MDAyNnNjaC1cdTAwM2Vic3RhdHMsXG4xMzU5Olx0XHRcdFx0XHRcdHNjaC1cdTAwM2VjcHVfYnN0YXRzLFxuMTM2MDpcdFx0XHRcdFx0XHRcdTAwMjZzY2gtXHUwMDNlcmF0ZV9lc3QsXG4xMzYxOlx0XHRcdFx0XHRcdE5VTEwsXG4xMzYyOlx0XHRcdFx0XHRcdHRydWUsXG4xMzYzOlx0XHRcdFx0XHRcdHRjYVtUQ0FfUkFURV0pO1xuMTM2NDpcdFx0XHRpZiAoZXJyKSB7XG4xMzY1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZ2VuZXJhdGUgbmV3IGVzdGltYXRvclwmIzM0Oyk7XG4xMzY2Olx0XHRcdFx0Z290byBlcnJfb3V0NDtcbjEzNjc6XHRcdFx0fVxuMTM2ODpcdFx0fVxuMTM2OTpcdFxuMTM3MDpcdFx0cWRpc2NfaGFzaF9hZGQoc2NoLCBmYWxzZSk7XG4xMzcxOlx0XHR0cmFjZV9xZGlzY19jcmVhdGUob3BzLCBkZXYsIHBhcmVudCk7XG4xMzcyOlx0XG4xMzczOlx0XHRyZXR1cm4gc2NoO1xuMTM3NDpcdFxuMTM3NTpcdGVycl9vdXQ0OlxuMTM3NjpcdFx0LyogRXZlbiBpZiBvcHMtXHUwMDNlaW5pdCgpIGZhaWxlZCwgd2UgY2FsbCBvcHMtXHUwMDNlZGVzdHJveSgpXG4xMzc3Olx0XHQgKiBsaWtlIHFkaXNjX2NyZWF0ZV9kZmx0KCkuXG4xMzc4Olx0XHQgKi9cbjEzNzk6XHRcdGlmIChvcHMtXHUwMDNlZGVzdHJveSlcbjEzODA6XHRcdFx0b3BzLVx1MDAzZWRlc3Ryb3koc2NoKTtcbjEzODE6XHRcdHFkaXNjX3B1dF9zdGFiKHJ0bmxfZGVyZWZlcmVuY2Uoc2NoLVx1MDAzZXN0YWIpKTtcbjEzODI6XHRlcnJfb3V0MzpcbjEzODM6XHRcdHFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTtcbjEzODQ6XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xuMTM4NTpcdFx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcbjEzODY6XHRlcnJfb3V0MjpcbjEzODc6XHRcdGJwZl9tb2R1bGVfcHV0KG9wcywgb3BzLVx1MDAzZW93bmVyKTtcbjEzODg6XHRlcnJfb3V0OlxuMTM4OTpcdFx0KmVycnAgPSBlcnI7XG4xMzkwOlx0XHRyZXR1cm4gTlVMTDtcbjEzOTE6XHR9XG4xMzkyOlx0XG4xMzkzOlx0c3RhdGljIGludCBxZGlzY19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Y2EsXG4xMzk0Olx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTM5NTpcdHtcbjEzOTY6XHRcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpvc3RhYiwgKnN0YWIgPSBOVUxMO1xuMTM5NzpcdFx0aW50IGVyciA9IDA7XG4xMzk4Olx0XG4xMzk5Olx0XHRpZiAodGNhW1RDQV9PUFRJT05TXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IG9mIGBxZGlzY19jcmVhdGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcWRpc2NfY3JlYXRlYCDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29yZSBwaWVjZSBvZiB0aGUgTGludXggbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wsIG9yIHFkaXNjLCBzdWJzeXN0ZW0uIEl0JiMzOTtzIGhhbmdpbmcgb3V0IGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBhbmQgYG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyByZWFjaGFibGUgdGhpcyBjb2RlIGlzLiBJIGtub3cgaXQmIzM5O3MgdHJpZ2dlcmVkIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2AgbWVzc2FnZXMsIHdoaWNoIHdvdWxkIGJlIGhvdyBgdGMgcWRpc2MgYWRkLi4uYCBjYWxscyBpbnRvIGl0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uOiBDYW4gSSBhY3R1YWxseSAqaGl0KiB0aGlzIGZ1bmN0aW9uYWxpdHk/IFRoZSBnb29kIG5ld3MgaXMgdGhhdCBuZXR3b3JraW5nIHNjaGVkdWxpbmcsIGFuZCBUcmFmZmljIENvbnRyb2wgaW4gZ2VuZXJhbCwgYXJlIHdlbGwtZXN0YWJsaXNoZWQsIHNvIHRoYXQgc2VlbXMgbGlrZWx5LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgZXhpc3RpbmcgZnV6emluZy4gQWhhISBTeXprYWxsZXIgaGFzIGJlZW4gaGl0dGluZyBuZXRsaW5rIHNvY2tldHMgaGFyZCwgYW5kIHRoYXQgaW5jbHVkZXMgdGhpcyBhcmVhLiBTbywgdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBuZXQvc2NoZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBhcHBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2hfYXBpLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBzY2hfZnJhZy5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byBjaGVja2luZyBgS2NvbmZpZ2AgZm9yIGBDT05GSUdfTkVUX1NDSEVEYDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgc2NoZWR1bGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBDT05GSUdfTkVUX1NDSEVEYCBvcHRpb24uIEl0JiMzOTtzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc3dpdGNoLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBuZXR3b3JrIHNjaGVkdWxpbmcgZmVhdHVyZSBzZXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBkZWZhdWx0IHZhbHVlIGlzIGFzc2lnbmVkLCBhbmQgYW55IHJlbGV2YW50IGhlbHAgdGV4dC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2Ugb2YgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkVUX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBTY2hlZHVsZXIgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgYXNzZXNzIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTkVUX1NDSEVEYC4gVGhpcyBpbXBsaWVzIGEgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0d29yayBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggb3RoZXIgY3J1Y2lhbCBjb21wb25lbnRzLiBXZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSBzY2hlZHVsaW5nIGNob2ljZXMgaGVhdmlseSBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUga2VybmVsIGludGVyZmFjZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZmVlZCBpbnRvIGFuZCByZWx5IHVwb24gdGhlIHNjaGVkdWxlci4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgUW9TLCB0cmFmZmljIHNoYXBpbmcsIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgc3BlY2lmaWMgY29udGV4dCB3aWxsIGRyaXZlIG15IGludmVzdGlnYXRpb24uIFRoZSBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHJldmlld2VkLCBhbmQgZWFjaCBpbXBhY3QgYXNzZXNzZWQgYW5kIHByaW9yaXRpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4gIDIxOlx0XHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxuICAyMjpcdFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxuICAyMzpcdFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXG4gIDI0Olx0XG4gIDI1Olx0XHQgIFRvIGFkbWluaXN0ZXIgdGhlc2Ugc2NoZWR1bGVycywgeW91JiMzOTtsbCBuZWVkIHRoZSB1c2VyLWxldmVsIHV0aWxpdGllc1xuICAyNjpcdFx0ICBmcm9tIHRoZSBwYWNrYWdlIGlwcm91dGUyJiM0Mzt0YyBhdFxuICAyNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvXHUwMDNlLiAgVGhhdCBwYWNrYWdlXG4gIDI4Olx0XHQgIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0XG4gIDI5Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcdTAwM2UuXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBCdWlsZCBBcnRpZmFjdHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIG9yaWdpbiBvZiBgc2NoX2dlbmVyaWMub2AuIEkmIzM5O20gc3RhcnRpbmcgdG8gc3VzcGVjdCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gc29tZXdoZXJlIGluIHRoZSBidWlsZCBwcm9jZXNzLiBCZXN0IHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGJ1aWxkIHBhdGggb2YgdGhpcyBvYmplY3QgZmlsZS4gSXMgaXQgcHVsbGluZyBmcm9tIHRoZSBjb3JyZWN0IHNvdXJjZXMsIG9yIGhhcyBzb21lIG1pc2NvbmZpZ3VyYXRpb24gb3Igc3RhbGUgZmlsZSBjcmVwdCBpbnRvIHRoZSBtaXg/IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIGlzIHByZXR0eSBjb21wbGV4LCBzbyBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBhbnl0aGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB3aGVyZSB0aGUgY29tcGlsZXIgaXMgc3BpdHRpbmcgb3V0IHRoaXMgb2JqZWN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBLbm93aW5nIHRoZSBidWlsZCBwYXRoIHdpbGwgbGV0IG1lIHRyYWNlIGl0IGJhY2sgdGhyb3VnaCB0aGUgTWFrZWZpbGVzIG9yIGJ1aWxkIHNjcmlwdHMsIGFuZCBxdWlja2x5IGlkZW50aWZ5IHRoZSBzb3VyY2UgY29kZSB0aGF0IGdlbmVyYXRlZCBpdC4gRnJvbSB0aGVyZSwgSSBjYW4gaW5zcGVjdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGludm9sdmVkLCBhbmQgaG9wZWZ1bGx5IGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBpc3N1ZS4gVGltZSB0byBnZXQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX2dlbmVyaWMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUtNS1cbm5ldC9zY2hlZC9NYWtlZmlsZTo2Om9iai15XHQ6PSBzY2hfZ2VuZXJpYy5vIHNjaF9tcS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgdHJhZmZpYyBjb250cm9sIHNldHVwLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYE5FVF9TQ0hFRGAgY29uZmlndXJhdGlvbiBvcHRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGJpZyBvbmUsIHJpZ2h0PyBUaGUgY29yZSBjb250cm9sIHN3aXRjaCBmb3IgdGhlIHFkaXNjIEFQSS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UgZGlyZWN0bHkgdGllZCBpbnRvIHFkaXNjIG1hbmlwdWxhdGlvbi4gSSBrbm93IEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQ6CgoqICAgYHFkaXNjX2ZyZWVfcmN1YAoqICAgYHFkaXNjX2NyZWF0ZWAKKiAgIGBfX3FkaXNjX2Rlc3Ryb3lgCiogICBgcWRpc2NfZnJlZV9jYmAKKiAgIEFuZCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucywgYHRjX21vZGlmeV9xZGlzY2AgYW5kIGB0Y19nZXRfcWRpc2NgLiBUaGV5JiMzOTtyZSB0aGUgZnJvbnQgZG9vcnMgaGVyZS4KCk5vdywgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYHRjX21vZGlmeV9xZGlzY2AuIFVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHFkaXNjJiMzOTtzIGFyZSBtb2RpZmllZCBpcyBrZXkgaGVyZS4gQW5kIHNpbmNlIGBxZGlzY19jcmVhdGVgIGlzIHRoZSBwb2ludCBvZiBpbml0aWFsaXphdGlvbiwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaXRzIGNhbGxlcnMgYXMgd2VsbCwgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gVGltZSB0byBzZWUgaG93IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FkaXNjX2NyZWF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEyMzE9c3RhdGljIGludCBxZGlzY19ibG9ja19pbmRleGVzX3NldChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzAtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEyNzE6c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzItXHRcdFx0XHQgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzAtXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM3MTpcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3Mi1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE2MDg9c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzYyLVx0XHRpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkge1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxNzYzOlx0XHRcdHEgPSBxZGlzY19jcmVhdGUoZGV2LCBkZXZfaW5ncmVzc19xdWV1ZShkZXYpLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzY0LVx0XHRcdFx0XHQgdGNtLVx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cdTAwM2V0Y21fcGFyZW50LFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc3OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc4MDpcdFx0cSA9IHFkaXNjX2NyZWF0ZShkZXYsIGRldl9xdWV1ZSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc4MS1cdFx0XHRcdCB0Y20tXHUwMDNldGNtX3BhcmVudCwgdGNtLVx1MDAzZXRjbV9oYW5kbGUsXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTA0MT1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDYwLVx0aWYgKCFvcHMtXHUwMDNlaW5pdCB8fCBvcHMtXHUwMDNlaW5pdChzY2gsIE5VTEwsIGV4dGFjaykgPT0gMCkge1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTA2MTpcdFx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2X3F1ZXVlLVx1MDAzZWRldiwgcGFyZW50aWQpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA2Mi1cdFx0cmV0dXJuIHNjaDtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwMzI9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQxLVx0LyogTm90ZSB0aGF0IHRhcHJpb19yZXNldCgpIG1pZ2h0IG5vdCBiZSBjYWxsZWQgaWYgYW4gZXJyb3Jcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA0MjpcdCAqIGhhcHBlbnMgaW4gcWRpc2NfY3JlYXRlKCksIGFmdGVyIHRhcHJpb19pbml0KCkgaGFzIGJlZW4gY2FsbGVkLlxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQzLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0ODcKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgVHJhZmZpYyBDb250cm9sIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRob3NlIGhhbmRsaW5nIHF1ZXVlIGRpc2NpcGxpbmUgKGBxZGlzY2ApIG1vZGlmaWNhdGlvbnMgYW5kIGNyZWF0aW9uLCBhbmQgZGVzdHJ1Y3Rpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGBxZGlzY2Agb2JqZWN0cyBhcmUgaGFuZGxlZCwgcGFydGljdWxhcmx5IGluIGVycm9yIHNjZW5hcmlvcy4gYHRjX21vZGlmeV9xZGlzY2AsIG9yIGZ1bmN0aW9ucyBsaWtlIGB0Y19uZXdfdGZpbHRlcmAsIHVsdGltYXRlbHkgY2FsbCBgX190Y19tb2RpZnlfcWRpc2NgLCB3aGljaCBpcyB0aGUgbWFpbiBjYWxsZXIgb2YgYHFkaXNjX2NyZWF0ZWAuIFRoZXJlZm9yZSwgSSYjMzk7bSBpZGVudGlmeWluZyB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIHRoaXMgcGF0Y2guCgpJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFzIGNydWNpYWw6IGBxZGlzY19mcmVlX3JjdWAsIGBxZGlzY19mcmVlX2NiYCwgYHFkaXNjX2NyZWF0ZWAsIGBfX3FkaXNjX2Rlc3Ryb3lgLCBhbmQgYHRjX21vZGlmeV9xZGlzY2AuIExldCYjMzk7cyBjb25maXJtIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQsIHdoaWNoIHNlZW1zIHRvIGJlIGBuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4KCk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBhcHBlYXJzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoYG5ldC9zY2hlZC9gKSBhbmQgbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBgc3RydWN0IFFkaXNjYCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UgKGBjYWxsX3JjdWApIHVwb24gZXJyb3IgaW4gYHFkaXNjX2NyZWF0ZWAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZWFzaWx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayAoc3BlY2lmaWNhbGx5IHJ0bmV0bGluayBUQyBjb21tYW5kcykgbWFrZXMgaXQgYSB2ZXJ5IGF0dHJhY3RpdmUgdGFyZ2V0LiBCYXNlZCBvbiB0aGVzZSBvYnNlcnZhdGlvbnMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZS4KCkkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGBORVRfU0NIRURgIGNvbmZpZ3VyYXRpb24gaXMgbmVjZXNzYXJ5LgoKRmluYWxseSwgSSYjMzk7bGwgZm9ybXVsYXRlIHRoZSByZXNwb25zZSBieSBzdW1tYXJpemluZyB0aGUga2V5IGZpbmRpbmdzLiBUaGlzIHBhdGNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gYHN0cnVjdCBRZGlzY2Agb2JqZWN0cywgY2hhbmdpbmcgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIGBxZGlzY19jcmVhdGVgIGZyb20gaW1tZWRpYXRlIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nLiBUaGlzIHNoaWZ0IGFmZmVjdHMgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGVycm9yIGNsZWFudXAgaW4gdGhlIGNvcmUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fTkVXUURJU0NgKS4gRnV6emluZyBpcyBlc3NlbnRpYWwgdG8gZGV0ZWN0IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMuCgpNeSBhbmFseXNpcyBkaWN0YXRlcyB0aGF0OgoKKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlCiogICBgRW5hYmxlQ29uZmlnc2A6IFsmIzM0O05FVF9TQ0hFRCYjMzQ7XQoqICAgYEZvY3VzU3ltYm9sc2A6IFsmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssICYjMzQ7cWRpc2NfZnJlZV9jYiYjMzQ7LCAmIzM0O3FkaXNjX2NyZWF0ZSYjMzQ7LCAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LCAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7XQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IFFkaXNjYCBtZW1vcnkgZnJlZWluZyB1cG9uIGVycm9yIGR1cmluZyBgcWRpc2NfY3JlYXRlKClgIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UsIGFmZmVjdGluZyBvYmplY3QgbGlmZWN5Y2xlIGFuZCBlcnJvciBjbGVhbnVwIGluIGBuZXQvc2NoZWRgLiBJdCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBhbmQgdGhlcmVmb3JlIHdvcnRoeSBvZiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cWRpc2NfZnJlZV9yY3UmIzM0OywKICAgICYjMzQ7cWRpc2NfZnJlZV9jYiYjMzQ7LAogICAgJiMzNDtxZGlzY19jcmVhdGUmIzM0OywKICAgICYjMzQ7X19xZGlzY19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgZnJlZWluZyBvZiBzdHJ1Y3QgUWRpc2Mgb24gdGhlIGVycm9yIHVud2luZGluZyBwYXRoIG9mIHFkaXNjX2NyZWF0ZSgpIGZyb20gaW1tZWRpYXRlIHN5bmNocm9ub3VzIGZyZWVpbmcgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcgdmlhIGNhbGxfcmN1IChxZGlzY19mcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCBjbGVhbnVwIHNlbWFudGljcyBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxlciAobmV0L3NjaGVkKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIFRDIGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgZHVyaW5nIHFkaXNjIGNyZWF0aW9uIGZhaWx1cmUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O3FkaXNjX2ZyZWVfY2ImIzM0OywKICAgICYjMzQ7cWRpc2NfY3JlYXRlJiMzNDssCiAgICAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGZyZWVpbmcgb2Ygc3RydWN0IFFkaXNjIG9uIHRoZSBlcnJvciB1bndpbmRpbmcgcGF0aCBvZiBxZGlzY19jcmVhdGUoKSBmcm9tIGltbWVkaWF0ZSBzeW5jaHJvbm91cyBmcmVlaW5nIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nIHZpYSBjYWxsX3JjdSAocWRpc2NfZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIG9iamVjdCBsaWZldGltZSBhbmQgY2xlYW51cCBzZW1hbnRpY3MgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsZXIgKG5ldC9zY2hlZCkgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBUQyBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGR1cmluZyBxZGlzYyBjcmVhdGlvbiBmYWlsdXJlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXG5cblRoZXNlIG1lbW9yeSBsaWZldGltZSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBmYWxsIGVudGlyZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gKHdoaWNoIGRldGVjdHMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIFJDVS9sb2NrIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCB1c2VyLXNwYWNlIGluZm8tbGVha3MsIG9yIGFsdGVyIGRhdGEgYnVmZmVyIHBhcnNpbmcvbGVuZ3Rocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjNlYTUxNWE1ZjE3ZTIyOGJhYjRkYmE1YzgyMDFjOTU0MDBiYjc3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTE6NTk6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCiAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7CiYjNDM7dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJCWNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywgdTMyIHBhcmVudGlkLAogCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTEzODIsNyAmIzQzOzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIGVycl9vdXQzOgogCXFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTsKIAluZXRkZXZfcHV0KGRldiwgJmFtcDtzY2gtJmd0O2Rldl90cmFja2VyKTsKLQlxZGlzY19mcmVlKHNjaCk7CiYjNDM7CXFkaXNjX2ZyZWVfcmN1KHNjaCk7CiBlcnJfb3V0MjoKIAlicGZfbW9kdWxlX3B1dChvcHMsIG9wcy0mZ3Q7b3duZXIpOwogZXJyX291dDoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggZWYyYjRiZjUxNTY0MS4uNzE2MzBiNzk1ZjlkNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTEwODYsMjEgJiM0MzsxMDg2LDIxIEBAIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYykKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpOwogCi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYykKJiM0MztzdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKLQlpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHFkaXNjKSkgewotCQlmcmVlX3BlcmNwdShxZGlzYy0mZ3Q7Y3B1X2JzdGF0cyk7Ci0JCWZyZWVfcGVyY3B1KHFkaXNjLSZndDtjcHVfcXN0YXRzKTsKJiM0MzsJc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKJiM0MzsKJiM0MzsJaWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxKSkgewomIzQzOwkJZnJlZV9wZXJjcHUocS0mZ3Q7Y3B1X2JzdGF0cyk7CiYjNDM7CQlmcmVlX3BlcmNwdShxLSZndDtjcHVfcXN0YXRzKTsKIAl9CiAKLQlrZnJlZShxZGlzYyk7CiYjNDM7CWtmcmVlKHEpOwogfQogCi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKJiM0Mzt2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpCiB7Ci0Jc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKLQotCXFkaXNjX2ZyZWUocSk7CiYjNDM7CWNhbGxfcmN1KCZhbXA7cWRpc2MtJmd0O3JjdSwgcWRpc2NfZnJlZV9jYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQpAQCAtMTEyNyw3ICYjNDM7MTEyNyw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQogCiAJdHJhY2VfcWRpc2NfZGVzdHJveShxZGlzYyk7CiAKLQljYWxsX3JjdSgmYW1wO3FkaXNjLSZndDtyY3UsIHFkaXNjX2ZyZWVfY2IpOwomIzQzOwlxZGlzY19mcmVlX3JjdShxZGlzYyk7CiB9CiAKIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBRdWV1ZWluZyBEaXNjaXBsaW5lIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3Rpb24gd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgKFFkaXNjKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgYSB0cmFuc2l0aW9uIGZyb20gZGlyZWN0IGBxZGlzY19mcmVlYCBjYWxscyB0byB1c2luZyBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHZpYSBgcWRpc2NfZnJlZV9yY3VgLgoKTG9va2luZyBhdCB0aGUgc3BlY2lmaWNzLCB0aGUgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogcmVwbGFjaW5nIHRoZSBvbGQgYHFkaXNjX2ZyZWVgIHdpdGggYSBuZXcgYHFkaXNjX2ZyZWVfcmN1YC4gVGhhdCYjMzk7cyB0aGUga2V5IHNpZ25hbC4gSXQgaW5kaWNhdGVzIGEgc2hpZnQgdG93YXJkcyBkZWxheWVkIGZyZWVpbmcsIHdoaWNoIFJDVSBwcm92aWRlcy4KClRoZSBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgbW9kaWZpY2F0aW9ucyBpbiBgcWRpc2NfY3JlYXRlYCBhdCB0aGUgYGVycl9vdXQzYCBlcnJvciBoYW5kbGluZyBzZWN0aW9uIGFyZSBhbHNvIHRlbGxpbmcuIEluc3RlYWQgb2YgYSBkaXJlY3QgYHFkaXNjX2ZyZWVgLCB3ZSYjMzk7cmUgbm93IGNhbGxpbmcgYHFkaXNjX2ZyZWVfcmN1YCB0aGVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgZHVyaW5nIFFkaXNjIGNyZWF0aW9uLCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgd2Ugbm93IG5lZWQgdG8gZW5zdXJlIHRoZSBRZGlzYyYjMzk7cyBtZW1vcnkgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGZyZWVkLCBidXQgaGFuZGVkIG9mZiB0byBSQ1UgZm9yIGRlbGF5ZWQgY2xlYW51cC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHJhY2VzIGR1cmluZyBlcnJvciBjbGVhbnVwLgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlLCB0aG91Z2gsIGxpZXMgaW4gYG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jYC4gV2UmIzM5O3ZlIGdvdCBgcWRpc2NfZnJlZWAgcmVmYWN0b3JlZCBpbnRvIGBxZGlzY19mcmVlX2NiYC4gVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBoYW5kbGVzIGZyZWVpbmcgcGVyY3B1IHN0YXRzIGFuZCB0aGUgUWRpc2Mgc3RydWN0IGl0c2VsZiB2aWEgYGtmcmVlYC4gVGhlIGBxZGlzY19mcmVlX3JjdWAgZnVuY3Rpb24gaW52b2tlcyBgY2FsbF9yY3VgLCBxdWV1aW5nIHVwIHRoZSBjYWxsYmFjay4gRmluYWxseSwgdGhlIGBfX3FkaXNjX2Rlc3Ryb3lgIGlzIG5vdyB1c2luZyBgcWRpc2NfZnJlZV9yY3VgLCByZWluZm9yY2luZyB0aGF0IFJDVSBpcyB0aGUgbWVjaGFuaXNtIG9mIGNob2ljZSBmb3IgUWRpc2MgZGVhbGxvY2F0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGV4YW1pbmluZyB0aGUgYHFkaXNjX2NyZWF0ZWAgZnVuY3Rpb24mIzM5O3Mgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGBlcnJfb3V0M2AgbGFiZWwuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHJlcG9zaXRvcnkgZm9yIHJlbGF0ZWQgY29udGV4dCB3b3VsZCBsaWtlbHkgYmUgaGVscGZ1bCBpbiB0cmFjaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgZXhwZWN0IHRvIGZpbmQgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9MTIzMT1zdGF0aWMgaW50IHFkaXNjX2Jsb2NrX2luZGV4ZXNfc2V0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3MC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTI3MTpzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3Mi1cdFx0XHRcdCAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3MC1cdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzcxOlx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzcyLVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3Ni1cdC8qIEV2ZW4gaWYgb3BzLVx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVx1MDAzZWRlc3Ryb3koKVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc3Olx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzc4LVx0ICovXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xNjA4PXN0YXRpYyBpbnQgX190Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Mi1cdFx0aWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2MzpcdFx0XHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2NC1cdFx0XHRcdFx0IHRjbS1cdTAwM2V0Y21fcGFyZW50LCB0Y20tXHUwMDNldGNtX3BhcmVudCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NzktXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3ODA6XHRcdHEgPSBxZGlzY19jcmVhdGUoZGV2LCBkZXZfcXVldWUsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODEtXHRcdFx0XHQgdGNtLVx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cdTAwM2V0Y21faGFuZGxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgLSBMaW5lcyAxMzUwLTE0MDAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMTM1MCB0byAxNDAwIHdpdGhpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoaXMgc2VjdGlvbi4uLiBBaCwgeWVzLCBJIHJlY29nbml6ZSB0aGlzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgQVBJIGdldHMgaGFtbWVyZWQgb3V0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2NoZWR1bGluZyBkaXNjaXBsaW5lcyAocWRpc2NzKSB0aGVtc2VsdmVzLCBvciBwZXJoYXBzIHRoZSByZWdpc3RyYXRpb24gb3IgdW5yZWdpc3RyYXRpb24gb2YgdGhlc2Ugc2NoZWR1bGVycy4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbnMgY2FsbGVkIHdoZW4gYSBuZXcgcWRpc2MgaXMgY3JlYXRlZCwgb3Igd2hlbiBvbmUgaXMgcmVtb3ZlZC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCB0aGUgbG9ja2luZyB0aGF0JiMzOTtzIGluIHBsYWNlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgaW5pdGlhbGl6YXRpb24sIGEgZnVsbC1ibG93biBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiwgb3Igc29tZSBzb3J0IG9mIGdyYWNlZnVsIHRlYXItZG93biBvZiBhbiBleGlzdGluZyBxZGlzYy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBpbnRlcmFjdGluZyB3aXRoIHRoZSBgcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUsIGFzIHRob3NlIGNvbnRhaW4gdGhlIG1ldGhvZHMgYWxsIHFkaXNjcyB1c2UuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIG15c2VsZiB1cCB0byBpZGVudGlmeSBob3cgdGhlIGtlcm5lbCBpbnRlcmZhY2VzIHdpdGggYW5kIG1hbmFnZXMgdGhlIGRpZmZlcmVudCBxdWV1ZWluZyBkaXNjaXBsaW5lcy4gSSYjMzk7bSBrZWVuIHRvIHNwb3QgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHN1YnRsZSBoaW50cyBhYm91dCBob3cgdGhlIEFQSSBoYW5kbGVzIGRpZmZlcmVudCBzY2hlZHVsaW5nIGNsYXNzZXMsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgcWRpc2Mgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgbGlmZWN5Y2xlIGNoYW5nZXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIHNoYXBlcyBuZXR3b3JrIHRyYWZmaWMsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XG4xMzUxOlx0XHRpZiAodGNhW1RDQV9SQVRFXSkge1xuMTM1MjpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjEzNTM6XHRcdFx0aWYgKHNjaC1cdTAwM2VmbGFncyBcdTAwMjYgVENRX0ZfTVFST09UKSB7XG4xMzU0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDYW5ub3QgYXR0YWNoIHJhdGUgZXN0aW1hdG9yIHRvIGEgbXVsdGktcXVldWUgcm9vdCBxZGlzY1wmIzM0Oyk7XG4xMzU1Olx0XHRcdFx0Z290byBlcnJfb3V0NDtcbjEzNTY6XHRcdFx0fVxuMTM1NzpcdFxuMTM1ODpcdFx0XHRlcnIgPSBnZW5fbmV3X2VzdGltYXRvcihcdTAwMjZzY2gtXHUwMDNlYnN0YXRzLFxuMTM1OTpcdFx0XHRcdFx0XHRzY2gtXHUwMDNlY3B1X2JzdGF0cyxcbjEzNjA6XHRcdFx0XHRcdFx0XHUwMDI2c2NoLVx1MDAzZXJhdGVfZXN0LFxuMTM2MTpcdFx0XHRcdFx0XHROVUxMLFxuMTM2MjpcdFx0XHRcdFx0XHR0cnVlLFxuMTM2MzpcdFx0XHRcdFx0XHR0Y2FbVENBX1JBVEVdKTtcbjEzNjQ6XHRcdFx0aWYgKGVycikge1xuMTM2NTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGdlbmVyYXRlIG5ldyBlc3RpbWF0b3JcJiMzNDspO1xuMTM2NjpcdFx0XHRcdGdvdG8gZXJyX291dDQ7XG4xMzY3Olx0XHRcdH1cbjEzNjg6XHRcdH1cbjEzNjk6XHRcbjEzNzA6XHRcdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xuMTM3MTpcdFx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xuMTM3MjpcdFxuMTM3MzpcdFx0cmV0dXJuIHNjaDtcbjEzNzQ6XHRcbjEzNzU6XHRlcnJfb3V0NDpcbjEzNzY6XHRcdC8qIEV2ZW4gaWYgb3BzLVx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVx1MDAzZWRlc3Ryb3koKVxuMTM3NzpcdFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxuMTM3ODpcdFx0ICovXG4xMzc5Olx0XHRpZiAob3BzLVx1MDAzZWRlc3Ryb3kpXG4xMzgwOlx0XHRcdG9wcy1cdTAwM2VkZXN0cm95KHNjaCk7XG4xMzgxOlx0XHRxZGlzY19wdXRfc3RhYihydG5sX2RlcmVmZXJlbmNlKHNjaC1cdTAwM2VzdGFiKSk7XG4xMzgyOlx0ZXJyX291dDM6XG4xMzgzOlx0XHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XG4xMzg0Olx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2c2NoLVx1MDAzZWRldl90cmFja2VyKTtcbjEzODU6XHRcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XG4xMzg2Olx0ZXJyX291dDI6XG4xMzg3Olx0XHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cdTAwM2Vvd25lcik7XG4xMzg4Olx0ZXJyX291dDpcbjEzODk6XHRcdCplcnJwID0gZXJyO1xuMTM5MDpcdFx0cmV0dXJuIE5VTEw7XG4xMzkxOlx0fVxuMTM5MjpcdFxuMTM5MzpcdHN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuMTM5NDpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEzOTU6XHR7XG4xMzk2Olx0XHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqb3N0YWIsICpzdGFiID0gTlVMTDtcbjEzOTc6XHRcdGludCBlcnIgPSAwO1xuMTM5ODpcdFxuMTM5OTpcdFx0aWYgKHRjYVtUQ0FfT1BUSU9OU10pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUWRpc2MgRnJlZWluZyBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBxZGlzY19jcmVhdGVgLCBhbmQgdGhlIHVzZSBvZiBgcWRpc2NfZnJlZV9yY3VgIGluc3RlYWQgb2YgdGhlIG1vcmUgc3RhbmRhcmQgYHFkaXNjX2ZyZWVgIHJhaXNlcyBhIGZsYWcuIFdoeSB0aGUgUkNVLWJhc2VkIGZyZWVpbmc/IFRoZSBrZXkgaXMgbGlrZWx5IHRoYXQgc29tZXRoaW5nLCBlaXRoZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uIChgb3BzLSZndDtpbml0KClgLCBgb3BzLSZndDtkZXN0cm95KClgLCBvciBzaW1pbGFyKSwgbWlnaHQgYmUgcHVibGlzaGluZyB0aGUgYHNjaGAgc3RydWN0dXJlLiBUaGlzIGNvdWxkIGJlIGRpcmVjdCBhY2Nlc3MsIFJDVSByZWFkIGFjY2VzcywgcGVyaGFwcyBldmVuIGlmIGFuIGBvcHMtJmd0O2Rlc3Ryb3lgIGNhbGxiYWNrIHVzZXMgUkNVIGl0c2VsZi4gVGhlIHByZXNlbmNlIG9mIGBtaW5pX3FkaXNjYCBvciBmaWx0ZXJzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoaXMgbGlrZWxpaG9vZC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHVzaW5nIFJDVSBmb3IgZnJlZWluZyBpcyBhIGRpcmVjdCBtZWFzdXJlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgcHJpbWFyeSBjb25jZXJucyBhcmUgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChLTVNBTikgb3IgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBLQVNBTi1kZXRlY3RhYmxlIHByb2JsZW1zIGxpa2UgVUFGLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrOgoKKiAgIERvZXMgdGhpcyBwYXRjaCB0b3VjaCBrZXJuZWwgc3RydWN0dXJlcyBjb21tdW5pY2F0ZWQgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB3aGVyZSBmaWVsZHMgb3IgcGFkZGluZyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLgoqICAgRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBhdCBhbGwuCiogICBEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkIHJlYWRzPyBObywgaXQgZG9lc24mIzM5O3Qgc2VlbSB0aGF0IHdheS4KKiAgIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcyBvciByZWxhdGVkIGxvZ2ljIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpbiBzdXJyb3VuZGluZyBjb2RlPyBOby4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSAqaXMqIGFib3V0IG1lbW9yeSBsaWZlY3ljbGUsIHNwZWNpZmljYWxseSBlbnN1cmluZyBhc3luY2hyb25vdXMgZnJlZWluZyB2aWEgUkNVIChgY2FsbF9yY3VgKSBpbnN0ZWFkIG9mIGEgc3luY2hyb25vdXMgYGtmcmVlYCwgd2hpY2ggZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBVQUYgcG90ZW50aWFsIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgoKU28sIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBhYm91dCBVQUYgcHJvdGVjdGlvbi4gS0FTQU4gaXMgdGhlIHJlbGV2YW50IHRvb2wgaGVyZSwgYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHdvdWxkIGFsc28gY2F0Y2ggc3VjaCBwcm9ibGVtcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gTXkgY29uY2x1c2lvbjogdGhpcyBhcHBlYXJzIHRvIGJlIGEgd2VsbC1jb25zaWRlcmVkIGFuZCBjb3JyZWN0IGFwcHJvYWNoLiBOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgYWxsIHRoZSBjYWxsIHNpdGVzIG9mICpib3RoKiBgcWRpc2NfZnJlZWAgYW5kIGBxZGlzY19mcmVlX3JjdWAgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmM9MzIwPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jOjMyMTpuZnBfYWJtX3FkaXNjX2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IG5mcF9hYm1fbGluayAqYWxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jLTMyMi1cdFx0ICAgc3RydWN0IG5mcF9xZGlzYyAqcWRpc2MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9hYm0vcWRpc2MuYz00MDQ9bmZwX2FibV9xZGlzY19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBuZnBfYWJtX2xpbmsgKmFsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmMtNDE3LVx0bmZwX2FibV9xZGlzY191bmxpbmtfY2hpbGRyZW4ocWRpc2MsIDAsIHFkaXNjLVx1MDAzZW51bV9jaGlsZHJlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jOjQxODpcdG5mcF9hYm1fcWRpc2NfZnJlZShuZXRkZXYsIGFsaW5rLCBxZGlzYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jLTQxOS1cbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTc5Mz1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5NS1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjc5Njp2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC03OTctc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMjcxPXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4NC1cdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzg1Olx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4Ni1lcnJfb3V0Mjpcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMDg3PUVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA4OC1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEwODk6c3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDkwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAwLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEwMTp2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAyLXtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMDM6XHRjYWxsX3JjdShcdTAwMjZxZGlzYy1cdTAwM2VyY3UsIHFkaXNjX2ZyZWVfY2IpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEwNC19XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTEwNj1zdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTI5LVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEzMDpcdHFkaXNjX2ZyZWVfcmN1KHFkaXNjKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDgyCgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFkaXNjIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IGNsZWFuLWN1dC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZXJyb3JzIGR1cmluZyBgcWRpc2NfY3JlYXRlYC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSBga2ZyZWVgJiMzOTtpbmcgdGhlIGBzdHJ1Y3QgUWRpc2NgIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcsIGl0JiMzOTtzIHN3aXRjaGluZyB0byBhIGRlbGF5ZWQsIFJDVS1iYXNlZCBmcmVlaW5nIHByb2Nlc3MgdXNpbmcgYGNhbGxfcmN1YC4gVGhpcyBjbGVhcmx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIHJhdGlvbmFsZSBpcyBzb2xpZCDigJMgUkNVIHJlYWRlcnMgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIFFkaXNjLCBzbyBzeW5jaHJvbm91cyBmcmVlaW5nIHdvdWxkIGJlIGEgYmFkIG1vdmUuCgpOb3csIGJlY2F1c2UgS0FTQU4gaXMgdGhlIG9uZSB0aGF0IGNhdWdodCB0aGUgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsaWZldGltZSBwcm9ibGVtLCBhbmQgZnJvbSB0aGUgc291bmRzIG9mIGl0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIEkmIzM5O20gdGhpbmtpbmcgd2UgY2FuIHNhZmVseSBtYXJrIGBOZWVkc0tNU0FOYCBhcyBmYWxzZSBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXG5cblRoZXNlIG1lbW9yeSBsaWZldGltZSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBmYWxsIGVudGlyZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gKHdoaWNoIGRldGVjdHMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIFJDVS9sb2NrIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCB1c2VyLXNwYWNlIGluZm8tbGVha3MsIG9yIGFsdGVyIGRhdGEgYnVmZmVyIHBhcnNpbmcvbGVuZ3Rocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXG5cblRoZXNlIG1lbW9yeSBsaWZldGltZSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBmYWxsIGVudGlyZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gKHdoaWNoIGRldGVjdHMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIFJDVS9sb2NrIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCB1c2VyLXNwYWNlIGluZm8tbGVha3MsIG9yIGFsdGVyIGRhdGEgYnVmZmVyIHBhcnNpbmcvbGVuZ3Rocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToxNi45NTcwMjY3MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQwNzQ1MDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxZGlzY19mcmVlX3JjdVwiLFxuICAgIFwicWRpc2NfZnJlZV9jYlwiLFxuICAgIFwicWRpc2NfY3JlYXRlXCIsXG4gICAgXCJfX3FkaXNjX2Rlc3Ryb3lcIixcbiAgICBcInRjX21vZGlmeV9xZGlzY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGZyZWVpbmcgb2Ygc3RydWN0IFFkaXNjIG9uIHRoZSBlcnJvciB1bndpbmRpbmcgcGF0aCBvZiBxZGlzY19jcmVhdGUoKSBmcm9tIGltbWVkaWF0ZSBzeW5jaHJvbm91cyBmcmVlaW5nIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nIHZpYSBjYWxsX3JjdSAocWRpc2NfZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIG9iamVjdCBsaWZldGltZSBhbmQgY2xlYW51cCBzZW1hbnRpY3MgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsZXIgKG5ldC9zY2hlZCkgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBUQyBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGR1cmluZyBxZGlzYyBjcmVhdGlvbiBmYWlsdXJlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToxNi45NTcwMzEwNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mzk0MTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYzZWE1MTVhNWYxN2UyMjhiYWI0ZGJhNWM4MjAxYzk1NDAwYmI3NzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxMTo1OToxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxcbmluZGV4IGNiYzI0ODc3NjUxMTguLmYzNWJkMDZhNmJhZDYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcXG5AQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgcWRpc2Nfb2ZmbG9hZF9xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7XFxuK3ZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYyk7XFxuIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbiBcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsIHUzMiBwYXJlbnRpZCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcXG5pbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXFxuQEAgLTEzODIsNyArMTM4Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBlcnJfb3V0MzpcXG4gXFx0cWRpc2NfbG9ja191bmluaXQoc2NoLCBvcHMpO1xcbiBcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbi1cXHRxZGlzY19mcmVlKHNjaCk7XFxuK1xcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XFxuIGVycl9vdXQyOlxcbiBcXHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cXHUwMDNlb3duZXIpO1xcbiBlcnJfb3V0OlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXFxuaW5kZXggZWYyYjRiZjUxNTY0MS4uNzE2MzBiNzk1ZjlkNiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXFxuQEAgLTEwODYsMjEgKzEwODYsMjEgQEAgdm9pZCBxZGlzY19yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpO1xcbiBcXG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuK3N0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuLVxcdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocWRpc2MpKSB7XFxuLVxcdFxcdGZyZWVfcGVyY3B1KHFkaXNjLVxcdTAwM2VjcHVfYnN0YXRzKTtcXG4tXFx0XFx0ZnJlZV9wZXJjcHUocWRpc2MtXFx1MDAzZWNwdV9xc3RhdHMpO1xcbitcXHRzdHJ1Y3QgUWRpc2MgKnEgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IFFkaXNjLCByY3UpO1xcbitcXG4rXFx0aWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxKSkge1xcbitcXHRcXHRmcmVlX3BlcmNwdShxLVxcdTAwM2VjcHVfYnN0YXRzKTtcXG4rXFx0XFx0ZnJlZV9wZXJjcHUocS1cXHUwMDNlY3B1X3FzdGF0cyk7XFxuIFxcdH1cXG4gXFxuLVxcdGtmcmVlKHFkaXNjKTtcXG4rXFx0a2ZyZWUocSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbit2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuIHtcXG4tXFx0c3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTtcXG4tXFxuLVxcdHFkaXNjX2ZyZWUocSk7XFxuK1xcdGNhbGxfcmN1KFxcdTAwMjZxZGlzYy1cXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuQEAgLTExMjcsNyArMTEyNyw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbiBcXG4gXFx0dHJhY2VfcWRpc2NfZGVzdHJveShxZGlzYyk7XFxuIFxcbi1cXHRjYWxsX3JjdShcXHUwMDI2cWRpc2MtXFx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XFxuK1xcdHFkaXNjX2ZyZWVfcmN1KHFkaXNjKTtcXG4gfVxcbiBcXG4gdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjE3LjQxMTYyMzM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA3MjQ0NjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxZGlzY19mcmVlX3JjdVwiLFxuICAgIFwicWRpc2NfZnJlZV9jYlwiLFxuICAgIFwicWRpc2NfY3JlYXRlXCIsXG4gICAgXCJfX3FkaXNjX2Rlc3Ryb3lcIixcbiAgICBcInRjX21vZGlmeV9xZGlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBmcmVlaW5nIG9mIHN0cnVjdCBRZGlzYyBvbiB0aGUgZXJyb3IgdW53aW5kaW5nIHBhdGggb2YgcWRpc2NfY3JlYXRlKCkgZnJvbSBpbW1lZGlhdGUgc3luY2hyb25vdXMgZnJlZWluZyB0byBkZWZlcnJlZCBSQ1UgZnJlZWluZyB2aWEgY2FsbF9yY3UgKHFkaXNjX2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyBvYmplY3QgbGlmZXRpbWUgYW5kIGNsZWFudXAgc2VtYW50aWNzIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGVyIChuZXQvc2NoZWQpIHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgVEMgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcWRpc2MgY3JlYXRpb24gZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2M2VhNTE1YTVmMTdlMjI4YmFiNGRiYTVjODIwMWM5NTQwMGJiNzc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMTo1OToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oXG5pbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuQEAgLTc5Myw3ICs3OTMsNyBAQCB2b2lkIHFkaXNjX29mZmxvYWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IFFkaXNjX29wcyAqb3BzLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7XG4rdm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTtcbiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywgdTMyIHBhcmVudGlkLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuaW5kZXggNjViMzU1MjhkMTI1Zi4uNzk1YWNjZDFiYjMzZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbkBAIC0xMzgyLDcgKzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBlcnJfb3V0MzpcbiBcdHFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTtcbiBcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xuLVx0cWRpc2NfZnJlZShzY2gpO1xuK1x0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcbiBlcnJfb3V0MjpcbiBcdGJwZl9tb2R1bGVfcHV0KG9wcywgb3BzLVx1MDAzZW93bmVyKTtcbiBlcnJfb3V0OlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbmluZGV4IGVmMmI0YmY1MTU2NDEuLjcxNjMwYjc5NWY5ZDYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbkBAIC0xMDg2LDIxICsxMDg2LDIxIEBAIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYylcbiB9XG4gRVhQT1JUX1NZTUJPTChxZGlzY19yZXNldCk7XG4gXG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4rc3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0aWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxZGlzYykpIHtcbi1cdFx0ZnJlZV9wZXJjcHUocWRpc2MtXHUwMDNlY3B1X2JzdGF0cyk7XG4tXHRcdGZyZWVfcGVyY3B1KHFkaXNjLVx1MDAzZWNwdV9xc3RhdHMpO1xuK1x0c3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTtcbitcbitcdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocSkpIHtcbitcdFx0ZnJlZV9wZXJjcHUocS1cdTAwM2VjcHVfYnN0YXRzKTtcbitcdFx0ZnJlZV9wZXJjcHUocS1cdTAwM2VjcHVfcXN0YXRzKTtcbiBcdH1cbiBcbi1cdGtmcmVlKHFkaXNjKTtcbitcdGtmcmVlKHEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbit2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4ge1xuLVx0c3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTtcbi1cbi1cdHFkaXNjX2ZyZWUocSk7XG4rXHRjYWxsX3JjdShcdTAwMjZxZGlzYy1cdTAwM2VyY3UsIHFkaXNjX2ZyZWVfY2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbkBAIC0xMTI3LDcgKzExMjcsNyBAQCBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbiBcbiBcdHRyYWNlX3FkaXNjX2Rlc3Ryb3kocWRpc2MpO1xuIFxuLVx0Y2FsbF9yY3UoXHUwMDI2cWRpc2MtXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcbitcdHFkaXNjX2ZyZWVfcmN1KHFkaXNjKTtcbiB9XG4gXG4gdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToxNy40MTE2MjQ2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjQzNjQ2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRdWV1ZWluZyBEaXNjaXBsaW5lIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYsIGFuZCB0aGUgbWFpbiB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc2hpZnQgZnJvbSBgcWRpc2NfZnJlZWAgdG8gYHFkaXNjX2ZyZWVfcmN1YC4gU2VlbXMgbGlrZSB3ZSdyZSBtb3ZpbmcgdG93YXJkcyB1c2luZyBhbiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGNhbGxiYWNrIGZvciBmcmVlaW5nIHF1ZXVlaW5nIGRpc2NpcGxpbmVzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGVyZSdzIGFuIGVycm9yIGR1cmluZyB0aGUgYHFkaXNjX2NyZWF0ZWAgcHJvY2Vzcy4gVGhpcyBpcyBnb29kLCBJIGFsd2F5cyBsaWtlIHRvIHNlZSBtb3JlIFJDVSB1c2FnZSB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcmVkdWNlcyBsb2NrIGNvbnRlbnRpb24gYW5kIGltcHJvdmVzIGNvbmN1cnJlbmN5LCBhbmQgaXMgY29tbW9uIGJlc3QgcHJhY3RpY2UgaW4gdGhpcyBhcmVhLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYWZmZWN0IGNvZGUgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCB3aGVyZSBgcWRpc2NfY3JlYXRlYCBpcywgc28gdGhlIGltcGFjdCBpcyBpbiB0aGUgY29yZSBBUEkuIFRoZSBvdGhlciBhcmVhIGFmZmVjdGVkIHNlZW1zIHRvIGJlIGBuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY2AsIHdoaWNoIGxpa2VseSBpbnZvbHZlcyByZWZhY3RvcmluZyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLCBzbyBgcWRpc2NfZnJlZV9jYmAgYW5kIGBxZGlzY19mcmVlX3JjdWAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBzb21lIG9mIG15IHRvb2xzIHRvIGRpZyBpbi4gSSBzaG91bGQgY2hlY2sgYm90aCBvZiB0aG9zZSBmaWxlcyBjYXJlZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToyNC43MzU5OTE1MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNzQxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz0xMjcxPXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg0LVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2c2NoLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzg1OlxcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg2LWVycl9vdXQyOlxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTA4Nz1FWFBPUlRfU1lNQk9MKHFkaXNjX3Jlc2V0KTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDg4LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEwODk6c3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA5MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAwLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMDE6dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDIte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMDM6XFx0Y2FsbF9yY3UoXFx1MDAyNnFkaXNjLVxcdTAwM2VyY3UsIHFkaXNjX2ZyZWVfY2IpO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDQtfVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTEwNj1zdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMjktXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEzMDpcXHRxZGlzY19mcmVlX3JjdShxZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEzMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjI0Ljc4NTI3MjE2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NjE5NDQyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFFkaXNjIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgcWRpc2NfY3JlYXRlYCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBjcmVhdGluZyB0cmFmZmljIGNvbnRyb2wgZGlzY2lwbGluZXMgbGl2ZXMsIG9idmlvdXNseS4gSSdtIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gaG93IGEgbmV3IHFkaXNjIGlzIHJlZ2lzdGVyZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB3aG9sZSBpbnN0YW50aWF0aW9uIHByb2Nlc3MuIEknbSBndWVzc2luZyB0aGVyZSdzIGEgdGFibGUgb2YgcmVnaXN0ZXJlZCBxZGlzYyB0eXBlcywgbWF5YmUgdXNpbmcgc29tZXRoaW5nIGxpa2UgYSBgc3RydWN0IGxpc3RfaGVhZGAsIGFuZCBgcWRpc2NfY3JlYXRlYCBpdGVyYXRlcyB0aHJvdWdoIHRoYXQgdG8gZmluZCB0aGUgcmlnaHQgZmFjdG9yeSBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuSeKAmW0gYWxzbyBhc3N1bWluZyB0aGVyZSBtaWdodCBiZSBzb21lIGtpbmQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhlIHFkaXNjIGNhbiBiZSB1c2VkIGJ5IG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcyBvciB0cmFmZmljIGZsb3dzIHNpbXVsdGFuZW91c2x5LiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBoYW5kbGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgY2F1c2UgaXNzdWVzIHdpdGgsIHNheSwgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHFkaXNjJ3MgcHJpdmF0ZSBkYXRhLlxuXG5GdXJ0aGVybW9yZSwgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgdG8gYmUgcHJlc2VudC4gSSBpbWFnaW5lIGl0IHNob3VsZCBkZWFsIHdpdGggY2FzZXMgbGlrZSBhIG1pc3Npbmcgb3IgaW52YWxpZCBxZGlzYyB0eXBlLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBwcm9ibGVtcyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN0YWJpbGl0eSBhbmQgSSdsbCBiZSBjaGVja2luZyB0byBzZWUgd2hhdCB0aGUgdHlwaWNhbCBmYWlsdXJlIG1vZGVzIGFyZSwgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdXNlcyBvZiBga21hbGxvY2AsIGBrZnJlZWAsIG9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRpbmcuIEFueSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3b3VsZCBiZSBkaXNhc3Ryb3VzIGluIHRoaXMgYXJlYS5cblxuRmluYWxseSwgSSdsbCBiZSBmb2N1c2luZyBvbiBob3cgdGhlIHFkaXNj4oCZcyBwcml2YXRlIGRhdGEgaXMgbWFuYWdlZCwgYW5kIGhvdyBpdHMgbGlmZXRpbWUgaXMgdGllZCB0byB0aGUgbmV0IGRldmljZSBvciB0cmFmZmljIGZsb3cuIEkgaG9wZSB0aGVyZSdzIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBnZW5lcmljIHFkaXNjIGNvcmUgYW5kIHRoZSBzcGVjaWZpYyBxZGlzYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgSFRCLCBUQkYsIGV0Yy4pLCB3aGljaCBzaG91bGQgbWFrZSB0aGUgY29kZSBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gbWFpbnRhaW4uIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjI4LjI0NzIyMDcyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRpZiAodGNhW1RDQV9SQVRFXSkge1xcbjEzNTI6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMTM1MzpcXHRcXHRcXHRpZiAoc2NoLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUV9GX01RUk9PVCkge1xcbjEzNTQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IGF0dGFjaCByYXRlIGVzdGltYXRvciB0byBhIG11bHRpLXF1ZXVlIHJvb3QgcWRpc2NcXFwiKTtcXG4xMzU1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDQ7XFxuMTM1NjpcXHRcXHRcXHR9XFxuMTM1NzpcXHRcXG4xMzU4OlxcdFxcdFxcdGVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKFxcdTAwMjZzY2gtXFx1MDAzZWJzdGF0cyxcXG4xMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlY3B1X2JzdGF0cyxcXG4xMzYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzY2gtXFx1MDAzZXJhdGVfZXN0LFxcbjEzNjE6XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCxcXG4xMzYyOlxcdFxcdFxcdFxcdFxcdFxcdHRydWUsXFxuMTM2MzpcXHRcXHRcXHRcXHRcXHRcXHR0Y2FbVENBX1JBVEVdKTtcXG4xMzY0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xMzY1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBnZW5lcmF0ZSBuZXcgZXN0aW1hdG9yXFxcIik7XFxuMTM2NjpcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ0O1xcbjEzNjc6XFx0XFx0XFx0fVxcbjEzNjg6XFx0XFx0fVxcbjEzNjk6XFx0XFxuMTM3MDpcXHRcXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcXG4xMzcxOlxcdFxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcXG4xMzcyOlxcdFxcbjEzNzM6XFx0XFx0cmV0dXJuIHNjaDtcXG4xMzc0OlxcdFxcbjEzNzU6XFx0ZXJyX291dDQ6XFxuMTM3NjpcXHRcXHQvKiBFdmVuIGlmIG9wcy1cXHUwMDNlaW5pdCgpIGZhaWxlZCwgd2UgY2FsbCBvcHMtXFx1MDAzZWRlc3Ryb3koKVxcbjEzNzc6XFx0XFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxcbjEzNzg6XFx0XFx0ICovXFxuMTM3OTpcXHRcXHRpZiAob3BzLVxcdTAwM2VkZXN0cm95KVxcbjEzODA6XFx0XFx0XFx0b3BzLVxcdTAwM2VkZXN0cm95KHNjaCk7XFxuMTM4MTpcXHRcXHRxZGlzY19wdXRfc3RhYihydG5sX2RlcmVmZXJlbmNlKHNjaC1cXHUwMDNlc3RhYikpO1xcbjEzODI6XFx0ZXJyX291dDM6XFxuMTM4MzpcXHRcXHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XFxuMTM4NDpcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbjEzODU6XFx0XFx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcXG4xMzg2OlxcdGVycl9vdXQyOlxcbjEzODc6XFx0XFx0YnBmX21vZHVsZV9wdXQob3BzLCBvcHMtXFx1MDAzZW93bmVyKTtcXG4xMzg4OlxcdGVycl9vdXQ6XFxuMTM4OTpcXHRcXHQqZXJycCA9IGVycjtcXG4xMzkwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4xMzk0OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpvc3RhYiwgKnN0YWIgPSBOVUxMO1xcbjEzOTc6XFx0XFx0aW50IGVyciA9IDA7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdGlmICh0Y2FbVENBX09QVElPTlNdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjI4LjI0NzM0NTE5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMDE4OTQ0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IG9mIGBxZGlzY19jcmVhdGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHFkaXNjX2NyZWF0ZWAg4oCTIHRoYXQncyBkZWZpbml0ZWx5IGEgY29yZSBwaWVjZSBvZiB0aGUgTGludXggbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wsIG9yIHFkaXNjLCBzdWJzeXN0ZW0uIEl0J3MgaGFuZ2luZyBvdXQgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGNvZGUgaXMuIEkga25vdyBpdCdzIHRyaWdnZXJlZCB2aWEgbmV0bGluaywgc3BlY2lmaWNhbGx5IGBSVE1fTkVXUURJU0NgIG1lc3NhZ2VzLCB3aGljaCB3b3VsZCBiZSBob3cgYHRjIHFkaXNjIGFkZC4uLmAgY2FsbHMgaW50byBpdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogQ2FuIEkgYWN0dWFsbHkgKmhpdCogdGhpcyBmdW5jdGlvbmFsaXR5PyBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgbmV0d29ya2luZyBzY2hlZHVsaW5nLCBhbmQgVHJhZmZpYyBDb250cm9sIGluIGdlbmVyYWwsIGFyZSB3ZWxsLWVzdGFibGlzaGVkLCBzbyB0aGF0IHNlZW1zIGxpa2VseS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUncyBleGlzdGluZyBmdXp6aW5nLiBBaGEhIFN5emthbGxlciBoYXMgYmVlbiBoaXR0aW5nIG5ldGxpbmsgc29ja2V0cyBoYXJkLCBhbmQgdGhhdCBpbmNsdWRlcyB0aGlzIGFyZWEuIFNvLCB0aGF0J3MgYSBnb29kIHNpZ24uIFRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBJJ2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBuZXQvc2NoZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBhcHBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjM0LjQ0OTI0MzIxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk5ODQxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX2FwaS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9TQ0hFRClcXHRcXHQrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTozNC43MjkyMzE5MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY1MTQ2NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBLY29uZmlnYCBmb3IgYENPTkZJR19ORVRfU0NIRURgOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgc2NoZWR1bGluZy4gTGV0J3MgZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBgQ09ORklHX05FVF9TQ0hFRGAgb3B0aW9uLiBJdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc3dpdGNoLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIG5ldHdvcmsgc2NoZWR1bGluZyBmZWF0dXJlIHNldC4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGl0cyBkZXBlbmRlbmNpZXMsIHdoYXQgZGVmYXVsdCB2YWx1ZSBpcyBhc3NpZ25lZCwgYW5kIGFueSByZWxldmFudCBoZWxwIHRleHQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIG9mIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6MzYuOTk0MzgxNTEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc3NDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjM3LjA0MDE2MjM3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU5MDI4MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIG1ldGljdWxvdXNseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBORVRfU0NIRURgLiBUaGlzIGltcGxpZXMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JrIHNjaGVkdWxlciBpbnRlcmFjdHMgd2l0aCBvdGhlciBjcnVjaWFsIGNvbXBvbmVudHMuIFdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gd2hlcmUgc2NoZWR1bGluZyBjaG9pY2VzIGhlYXZpbHkgaW1wYWN0IHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUga2VybmVsIGludGVyZmFjZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZmVlZCBpbnRvIGFuZCByZWx5IHVwb24gdGhlIHNjaGVkdWxlci4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgUW9TLCB0cmFmZmljIHNoYXBpbmcsIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgc3BlY2lmaWMgY29udGV4dCB3aWxsIGRyaXZlIG15IGludmVzdGlnYXRpb24uIFRoZSBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHJldmlld2VkLCBhbmQgZWFjaCBpbXBhY3QgYXNzZXNzZWQgYW5kIHByaW9yaXRpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6MzguNzk5MTkzMzA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xcbiAgMTE6XFx0XFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXFxuICAxMjpcXHRcXHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXFxuICAxMzpcXHRcXHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xcbiAgMTQ6XFx0XFx0ICBcXFwiZmFpcmx5XFxcIiBoYXZlIGJlZW4gcHJvcG9zZWQuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcXG4gIDE3OlxcdFxcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXFxuICAxOTpcXHRcXHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXFxuICAyMDpcXHRcXHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxcbiAgMjE6XFx0XFx0ICBuZWVkIGEgY2VydGFpbiBtaW5pbXVtIGRhdGEgZmxvdyByYXRlLCBvciBpZiB5b3UgbmVlZCB0byBsaW1pdCB0aGVcXG4gIDIyOlxcdFxcdCAgbWF4aW11bSBkYXRhIGZsb3cgcmF0ZSBmb3IgdHJhZmZpYyB3aGljaCBtYXRjaGVzIHNwZWNpZmllZCBjcml0ZXJpYS5cXG4gIDIzOlxcdFxcdCAgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZXhwZXJpbWVudGFsLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIFRvIGFkbWluaXN0ZXIgdGhlc2Ugc2NoZWR1bGVycywgeW91J2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXFxuICAyNjpcXHRcXHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTIrdGMgYXRcXG4gIDI3OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cXHUwMDNlLiAgVGhhdCBwYWNrYWdlXFxuICAyODpcXHRcXHQgIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0XFxuICAyOTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXFx1MDAzZS5cXG4gIDMwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTozOC43OTkyNzI5OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwMTQ2OTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgQnVpbGQgQXJ0aWZhY3RzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIG9yaWdpbiBvZiBgc2NoX2dlbmVyaWMub2AuIEknbSBzdGFydGluZyB0byBzdXNwZWN0IHRoZXJlJ3MgYSBwcm9ibGVtIHNvbWV3aGVyZSBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gQmVzdCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBidWlsZCBwYXRoIG9mIHRoaXMgb2JqZWN0IGZpbGUuIElzIGl0IHB1bGxpbmcgZnJvbSB0aGUgY29ycmVjdCBzb3VyY2VzLCBvciBoYXMgc29tZSBtaXNjb25maWd1cmF0aW9uIG9yIHN0YWxlIGZpbGUgY3JlcHQgaW50byB0aGUgbWl4PyBUaGUgZGVwZW5kZW5jeSBncmFwaCBmb3IgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBwcmV0dHkgY29tcGxleCwgc28gSSBjYW4ndCBqdXN0IGFzc3VtZSBhbnl0aGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB3aGVyZSB0aGUgY29tcGlsZXIgaXMgc3BpdHRpbmcgb3V0IHRoaXMgb2JqZWN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0J3MgZ29pbmcgb24uIEtub3dpbmcgdGhlIGJ1aWxkIHBhdGggd2lsbCBsZXQgbWUgdHJhY2UgaXQgYmFjayB0aHJvdWdoIHRoZSBNYWtlZmlsZXMgb3IgYnVpbGQgc2NyaXB0cywgYW5kIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNvdXJjZSBjb2RlIHRoYXQgZ2VuZXJhdGVkIGl0LiBGcm9tIHRoZXJlLCBJIGNhbiBpbnNwZWN0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaW52b2x2ZWQsIGFuZCBob3BlZnVsbHkgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGlzc3VlLiBUaW1lIHRvIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0MS4xMDA3NDQ4NTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjk4MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjaF9nZW5lcmljLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZS01LVxcbm5ldC9zY2hlZC9NYWtlZmlsZTo2Om9iai15XFx0Oj0gc2NoX2dlbmVyaWMubyBzY2hfbXEub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0MS4xNzI0NDc5MTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjYyNTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHRyYWZmaWMgY29udHJvbCBzZXR1cCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBORVRfU0NIRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyB0aGF0J3MgdGhlIGJpZyBvbmUsIHJpZ2h0PyBUaGUgY29yZSBjb250cm9sIHN3aXRjaCBmb3IgdGhlIHFkaXNjIEFQSS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aG9zZSBkaXJlY3RseSB0aWVkIGludG8gcWRpc2MgbWFuaXB1bGF0aW9uLiBJIGtub3cgSSdsbCBiZSBsb29raW5nIGF0OlxuXG4qICAgYHFkaXNjX2ZyZWVfcmN1YFxuKiAgIGBxZGlzY19jcmVhdGVgXG4qICAgYF9fcWRpc2NfZGVzdHJveWBcbiogICBgcWRpc2NfZnJlZV9jYmBcbiogICBBbmQgb2YgY291cnNlLCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMsIGB0Y19tb2RpZnlfcWRpc2NgIGFuZCBgdGNfZ2V0X3FkaXNjYC4gVGhleSdyZSB0aGUgZnJvbnQgZG9vcnMgaGVyZS5cblxuTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgdGNfbW9kaWZ5X3FkaXNjYC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgcWRpc2MncyBhcmUgbW9kaWZpZWQgaXMga2V5IGhlcmUuIEFuZCBzaW5jZSBgcWRpc2NfY3JlYXRlYCBpcyB0aGUgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24sIEknbGwgbmVlZCB0byBzZWUgaXRzIGNhbGxlcnMgYXMgd2VsbCwgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gVGltZSB0byBzZWUgaG93IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NDMuNTQ1MDc1NjMzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1MjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxZGlzY19jcmVhdGVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz0xMjMxPXN0YXRpYyBpbnQgcWRpc2NfYmxvY2tfaW5kZXhlc19zZXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Y2EsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzAtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMjcxOnN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3MC1cXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzNzE6XFx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3Mi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYwOD1zdGF0aWMgaW50IF9fdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Mi1cXHRcXHRpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2MzpcXHRcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NjQtXFx0XFx0XFx0XFx0XFx0IHRjbS1cXHUwMDNldGNtX3BhcmVudCwgdGNtLVxcdTAwM2V0Y21fcGFyZW50LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzc5LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc4MDpcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X3F1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc4MS1cXHRcXHRcXHRcXHQgdGNtLVxcdTAwM2V0Y21fcGFyZW50LCB0Y20tXFx1MDAzZXRjbV9oYW5kbGUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMDQxPXN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA2MC1cXHRpZiAoIW9wcy1cXHUwMDNlaW5pdCB8fCBvcHMtXFx1MDAzZWluaXQoc2NoLCBOVUxMLCBleHRhY2spID09IDApIHtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMDYxOlxcdFxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldl9xdWV1ZS1cXHUwMDNlZGV2LCBwYXJlbnRpZCk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA2Mi1cXHRcXHRyZXR1cm4gc2NoO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDMyPXN0YXRpYyB2b2lkIHRhcHJpb19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQxLVxcdC8qIE5vdGUgdGhhdCB0YXByaW9fcmVzZXQoKSBtaWdodCBub3QgYmUgY2FsbGVkIGlmIGFuIGVycm9yXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDQyOlxcdCAqIGhhcHBlbnMgaW4gcWRpc2NfY3JlYXRlKCksIGFmdGVyIHRhcHJpb19pbml0KCkgaGFzIGJlZW4gY2FsbGVkLlxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA0My1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NDMuNTkyMjM0MDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MTQ5MTQ1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBUcmFmZmljIENvbnRyb2wgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRob3NlIGhhbmRsaW5nIHF1ZXVlIGRpc2NpcGxpbmUgKGBxZGlzY2ApIG1vZGlmaWNhdGlvbnMgYW5kIGNyZWF0aW9uLCBhbmQgZGVzdHJ1Y3Rpb24uIEknbSBmb2N1c2luZyBvbiBob3cgYHFkaXNjYCBvYmplY3RzIGFyZSBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaW4gZXJyb3Igc2NlbmFyaW9zLiBgdGNfbW9kaWZ5X3FkaXNjYCwgb3IgZnVuY3Rpb25zIGxpa2UgYHRjX25ld190ZmlsdGVyYCwgdWx0aW1hdGVseSBjYWxsIGBfX3RjX21vZGlmeV9xZGlzY2AsIHdoaWNoIGlzIHRoZSBtYWluIGNhbGxlciBvZiBgcWRpc2NfY3JlYXRlYC4gVGhlcmVmb3JlLCBJJ20gaWRlbnRpZnlpbmcgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciB0aGlzIHBhdGNoLlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlc2UgY29yZSBmdW5jdGlvbnMgYXMgY3J1Y2lhbDogYHFkaXNjX2ZyZWVfcmN1YCwgYHFkaXNjX2ZyZWVfY2JgLCBgcWRpc2NfY3JlYXRlYCwgYF9fcWRpc2NfZGVzdHJveWAsIGFuZCBgdGNfbW9kaWZ5X3FkaXNjYC4gTGV0J3MgY29uZmlybSB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkLCB3aGljaCBzZWVtcyB0byBiZSBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuXG5cbk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBhcHBlYXJzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoYG5ldC9zY2hlZC9gKSBhbmQgbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBgc3RydWN0IFFkaXNjYCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UgKGBjYWxsX3JjdWApIHVwb24gZXJyb3IgaW4gYHFkaXNjX2NyZWF0ZWAuIFRoZSBmYWN0IHRoYXQgaXQncyBlYXNpbHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rIFRDIGNvbW1hbmRzKSBtYWtlcyBpdCBhIHZlcnkgYXR0cmFjdGl2ZSB0YXJnZXQuIEJhc2VkIG9uIHRoZXNlIG9ic2VydmF0aW9ucywgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byB0cnVlLlxuXG5JIGFsc28gbmVlZCB0byBpZGVudGlmeSB3aGljaCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIHRoZSBgTkVUX1NDSEVEYCBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeS5cblxuRmluYWxseSwgSSdsbCBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGJ5IHN1bW1hcml6aW5nIHRoZSBrZXkgZmluZGluZ3MuIFRoaXMgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBgc3RydWN0IFFkaXNjYCBvYmplY3RzLCBjaGFuZ2luZyBlcnJvciBoYW5kbGluZyBkdXJpbmcgYHFkaXNjX2NyZWF0ZWAgZnJvbSBpbW1lZGlhdGUgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcuIFRoaXMgc2hpZnQgYWZmZWN0cyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgZXJyb3IgY2xlYW51cCBpbiB0aGUgY29yZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIHJ0bmV0bGluayAoYFJUTV9ORVdRRElTQ2ApLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBkZXRlY3QgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuTXkgYW5hbHlzaXMgZGljdGF0ZXMgdGhhdDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBbXCJORVRfU0NIRURcIl1cbiogICBgRm9jdXNTeW1ib2xzYDogW1wicWRpc2NfZnJlZV9yY3VcIiwgXCJxZGlzY19mcmVlX2NiXCIsIFwicWRpc2NfY3JlYXRlXCIsIFwiX19xZGlzY19kZXN0cm95XCIsIFwidGNfbW9kaWZ5X3FkaXNjXCJdXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IFFkaXNjYCBtZW1vcnkgZnJlZWluZyB1cG9uIGVycm9yIGR1cmluZyBgcWRpc2NfY3JlYXRlKClgIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UsIGFmZmVjdGluZyBvYmplY3QgbGlmZWN5Y2xlIGFuZCBlcnJvciBjbGVhbnVwIGluIGBuZXQvc2NoZWRgLiBJdCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBhbmQgdGhlcmVmb3JlIHdvcnRoeSBvZiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDg3LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0OS40MDcxNTE0NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkxNDY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicWRpc2NfZnJlZV9yY3VcIixcbiAgICBcInFkaXNjX2ZyZWVfY2JcIixcbiAgICBcInFkaXNjX2NyZWF0ZVwiLFxuICAgIFwiX19xZGlzY19kZXN0cm95XCIsXG4gICAgXCJ0Y19tb2RpZnlfcWRpc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgZnJlZWluZyBvZiBzdHJ1Y3QgUWRpc2Mgb24gdGhlIGVycm9yIHVud2luZGluZyBwYXRoIG9mIHFkaXNjX2NyZWF0ZSgpIGZyb20gaW1tZWRpYXRlIHN5bmNocm9ub3VzIGZyZWVpbmcgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcgdmlhIGNhbGxfcmN1IChxZGlzY19mcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCBjbGVhbnVwIHNlbWFudGljcyBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxlciAobmV0L3NjaGVkKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIFRDIGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgZHVyaW5nIHFkaXNjIGNyZWF0aW9uIGZhaWx1cmUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicWRpc2NfZnJlZV9yY3VcIixcbiAgICBcInFkaXNjX2ZyZWVfY2JcIixcbiAgICBcInFkaXNjX2NyZWF0ZVwiLFxuICAgIFwiX19xZGlzY19kZXN0cm95XCIsXG4gICAgXCJ0Y19tb2RpZnlfcWRpc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgZnJlZWluZyBvZiBzdHJ1Y3QgUWRpc2Mgb24gdGhlIGVycm9yIHVud2luZGluZyBwYXRoIG9mIHFkaXNjX2NyZWF0ZSgpIGZyb20gaW1tZWRpYXRlIHN5bmNocm9ub3VzIGZyZWVpbmcgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcgdmlhIGNhbGxfcmN1IChxZGlzY19mcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCBjbGVhbnVwIHNlbWFudGljcyBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxlciAobmV0L3NjaGVkKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIFRDIGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgZHVyaW5nIHFkaXNjIGNyZWF0aW9uIGZhaWx1cmUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjQ5LjQ4NDA3NDE5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4ODAzOTM5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0OS40ODQ1MTQ3MzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDg3OTk0ODk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjNlYTUxNWE1ZjE3ZTIyOGJhYjRkYmE1YzgyMDFjOTU0MDBiYjc3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTE6NTk6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuaW5kZXggY2JjMjQ4Nzc2NTExOC4uZjM1YmQwNmE2YmFkNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcbisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcbkBAIC03OTMsNyArNzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcyxcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuK3ZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYyk7XG4gc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsIHUzMiBwYXJlbnRpZCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLjc5NWFjY2QxYmIzM2QgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtMTM4Miw3ICsxMzgyLDcgQEAgc3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gZXJyX291dDM6XG4gXHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XG4gXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2c2NoLVx1MDAzZWRldl90cmFja2VyKTtcbi1cdHFkaXNjX2ZyZWUoc2NoKTtcbitcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XG4gZXJyX291dDI6XG4gXHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cdTAwM2Vvd25lcik7XG4gZXJyX291dDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5pbmRleCBlZjJiNGJmNTE1NjQxLi43MTYzMGI3OTVmOWQ2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5AQCAtMTA4NiwyMSArMTA4NiwyMSBAQCB2b2lkIHFkaXNjX3Jlc2V0KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4gfVxuIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpO1xuIFxuLXZvaWQgcWRpc2NfZnJlZShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuK3N0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbi1cdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocWRpc2MpKSB7XG4tXHRcdGZyZWVfcGVyY3B1KHFkaXNjLVx1MDAzZWNwdV9ic3RhdHMpO1xuLVx0XHRmcmVlX3BlcmNwdShxZGlzYy1cdTAwM2VjcHVfcXN0YXRzKTtcbitcdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4rXG4rXHRpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHEpKSB7XG4rXHRcdGZyZWVfcGVyY3B1KHEtXHUwMDNlY3B1X2JzdGF0cyk7XG4rXHRcdGZyZWVfcGVyY3B1KHEtXHUwMDNlY3B1X3FzdGF0cyk7XG4gXHR9XG4gXG4tXHRrZnJlZShxZGlzYyk7XG4rXHRrZnJlZShxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4rdm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIHtcbi1cdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4tXG4tXHRxZGlzY19mcmVlKHEpO1xuK1x0Y2FsbF9yY3UoXHUwMDI2cWRpc2MtXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG5AQCAtMTEyNyw3ICsxMTI3LDcgQEAgc3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4gXG4gXHR0cmFjZV9xZGlzY19kZXN0cm95KHFkaXNjKTtcbiBcbi1cdGNhbGxfcmN1KFx1MDAyNnFkaXNjLVx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XG4rXHRxZGlzY19mcmVlX3JjdShxZGlzYyk7XG4gfVxuIFxuIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NDkuNDg0NTE1OTA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NjM2OTIzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uIHdpdGhpbiB0aGUgcXVldWluZyBkaXNjaXBsaW5lIChRZGlzYykgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBpbnZvbHZlIGEgdHJhbnNpdGlvbiBmcm9tIGRpcmVjdCBgcWRpc2NfZnJlZWAgY2FsbHMgdG8gdXNpbmcgUkNVIChSZWFkLUNvcHktVXBkYXRlKSB2aWEgYHFkaXNjX2ZyZWVfcmN1YC5cblxuTG9va2luZyBhdCB0aGUgc3BlY2lmaWNzLCB0aGUgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogcmVwbGFjaW5nIHRoZSBvbGQgYHFkaXNjX2ZyZWVgIHdpdGggYSBuZXcgYHFkaXNjX2ZyZWVfcmN1YC4gVGhhdCdzIHRoZSBrZXkgc2lnbmFsLiBJdCBpbmRpY2F0ZXMgYSBzaGlmdCB0b3dhcmRzIGRlbGF5ZWQgZnJlZWluZywgd2hpY2ggUkNVIHByb3ZpZGVzLlxuXG5UaGUgYG5ldC9zY2hlZC9zY2hfYXBpLmNgIG1vZGlmaWNhdGlvbnMgaW4gYHFkaXNjX2NyZWF0ZWAgYXQgdGhlIGBlcnJfb3V0M2AgZXJyb3IgaGFuZGxpbmcgc2VjdGlvbiBhcmUgYWxzbyB0ZWxsaW5nLiBJbnN0ZWFkIG9mIGEgZGlyZWN0IGBxZGlzY19mcmVlYCwgd2UncmUgbm93IGNhbGxpbmcgYHFkaXNjX2ZyZWVfcmN1YCB0aGVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgZHVyaW5nIFFkaXNjIGNyZWF0aW9uLCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgd2Ugbm93IG5lZWQgdG8gZW5zdXJlIHRoZSBRZGlzYydzIG1lbW9yeSBpc24ndCBpbW1lZGlhdGVseSBmcmVlZCwgYnV0IGhhbmRlZCBvZmYgdG8gUkNVIGZvciBkZWxheWVkIGNsZWFudXAuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCByYWNlcyBkdXJpbmcgZXJyb3IgY2xlYW51cC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlLCB0aG91Z2gsIGxpZXMgaW4gYG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jYC4gV2UndmUgZ290IGBxZGlzY19mcmVlYCByZWZhY3RvcmVkIGludG8gYHFkaXNjX2ZyZWVfY2JgLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGhhbmRsZXMgZnJlZWluZyBwZXJjcHUgc3RhdHMgYW5kIHRoZSBRZGlzYyBzdHJ1Y3QgaXRzZWxmIHZpYSBga2ZyZWVgLiBUaGUgYHFkaXNjX2ZyZWVfcmN1YCBmdW5jdGlvbiBpbnZva2VzIGBjYWxsX3JjdWAsIHF1ZXVpbmcgdXAgdGhlIGNhbGxiYWNrLiBGaW5hbGx5LCB0aGUgYF9fcWRpc2NfZGVzdHJveWAgaXMgbm93IHVzaW5nIGBxZGlzY19mcmVlX3JjdWAsIHJlaW5mb3JjaW5nIHRoYXQgUkNVIGlzIHRoZSBtZWNoYW5pc20gb2YgY2hvaWNlIGZvciBRZGlzYyBkZWFsbG9jYXRpb24uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBleGFtaW5pbmcgdGhlIGBxZGlzY19jcmVhdGVgIGZ1bmN0aW9uJ3Mgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGBlcnJfb3V0M2AgbGFiZWwuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHJlcG9zaXRvcnkgZm9yIHJlbGF0ZWQgY29udGV4dCB3b3VsZCBsaWtlbHkgYmUgaGVscGZ1bCBpbiB0cmFjaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgZXhwZWN0IHRvIGZpbmQgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NTcuMTQ4MjExNzYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwNjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxZGlzY19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jPTEyMzE9c3RhdGljIGludCBxZGlzY19ibG9ja19pbmRleGVzX3NldChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3MC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEyNzE6c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMjcyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzcwLVxcdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM3MTpcXHR0cmFjZV9xZGlzY19jcmVhdGUob3BzLCBkZXYsIHBhcmVudCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzcyLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzc2LVxcdC8qIEV2ZW4gaWYgb3BzLVxcdTAwM2Vpbml0KCkgZmFpbGVkLCB3ZSBjYWxsIG9wcy1cXHUwMDNlZGVzdHJveSgpXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc3OlxcdCAqIGxpa2UgcWRpc2NfY3JlYXRlX2RmbHQoKS5cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzgtXFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE2MDg9c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NjItXFx0XFx0aWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3NjM6XFx0XFx0XFx0cSA9IHFkaXNjX2NyZWF0ZShkZXYsIGRldl9pbmdyZXNzX3F1ZXVlKGRldiksXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzY0LVxcdFxcdFxcdFxcdFxcdCB0Y20tXFx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cXHUwMDNldGNtX3BhcmVudCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc3OS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3ODA6XFx0XFx0cSA9IHFkaXNjX2NyZWF0ZShkZXYsIGRldl9xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODEtXFx0XFx0XFx0XFx0IHRjbS1cXHUwMDNldGNtX3BhcmVudCwgdGNtLVxcdTAwM2V0Y21faGFuZGxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo1Ny4xOTYzMjQ1MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2NzUwNDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgLSBMaW5lcyAxMzUwLTE0MDAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEzNTAgdG8gMTQwMCB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIHNlY3Rpb24uLi4gQWgsIHllcywgSSByZWNvZ25pemUgdGhpcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgdHJhZmZpYyBjb250cm9sIEFQSSBnZXRzIGhhbW1lcmVkIG91dC4gU3BlY2lmaWNhbGx5LCBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2NoZWR1bGluZyBkaXNjaXBsaW5lcyAocWRpc2NzKSB0aGVtc2VsdmVzLCBvciBwZXJoYXBzIHRoZSByZWdpc3RyYXRpb24gb3IgdW5yZWdpc3RyYXRpb24gb2YgdGhlc2Ugc2NoZWR1bGVycy4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSByZWxhdGVkIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBjYWxsZWQgd2hlbiBhIG5ldyBxZGlzYyBpcyBjcmVhdGVkLCBvciB3aGVuIG9uZSBpcyByZW1vdmVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgdGhlIGxvY2tpbmcgdGhhdCdzIGluIHBsYWNlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgaW5pdGlhbGl6YXRpb24sIGEgZnVsbC1ibG93biBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiwgb3Igc29tZSBzb3J0IG9mIGdyYWNlZnVsIHRlYXItZG93biBvZiBhbiBleGlzdGluZyBxZGlzYy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdkIGV4cGVjdCB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGludGVyYWN0aW5nIHdpdGggdGhlIGBxZGlzY19vcHNgIHN0cnVjdHVyZSwgYXMgdGhvc2UgY29udGFpbiB0aGUgbWV0aG9kcyBhbGwgcWRpc2NzIHVzZS5cblxuRXNzZW50aWFsbHksIEknbSBzZXR0aW5nIG15c2VsZiB1cCB0byBpZGVudGlmeSBob3cgdGhlIGtlcm5lbCBpbnRlcmZhY2VzIHdpdGggYW5kIG1hbmFnZXMgdGhlIGRpZmZlcmVudCBxdWV1ZWluZyBkaXNjaXBsaW5lcy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciBzdWJ0bGUgaGludHMgYWJvdXQgaG93IHRoZSBBUEkgaGFuZGxlcyBkaWZmZXJlbnQgc2NoZWR1bGluZyBjbGFzc2VzLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIHFkaXNjIHN0cnVjdHVyZXMgYXJlIG1hbmFnZWQgZHVyaW5nIGxpZmVjeWNsZSBjaGFuZ2VzLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIHNoYXBlcyBuZXR3b3JrIHRyYWZmaWMsIGFuZCBJJ20gcmVhZHkgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MDA6MDAuOTYzODMyNDM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRpZiAodGNhW1RDQV9SQVRFXSkge1xcbjEzNTI6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMTM1MzpcXHRcXHRcXHRpZiAoc2NoLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUV9GX01RUk9PVCkge1xcbjEzNTQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IGF0dGFjaCByYXRlIGVzdGltYXRvciB0byBhIG11bHRpLXF1ZXVlIHJvb3QgcWRpc2NcXFwiKTtcXG4xMzU1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDQ7XFxuMTM1NjpcXHRcXHRcXHR9XFxuMTM1NzpcXHRcXG4xMzU4OlxcdFxcdFxcdGVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKFxcdTAwMjZzY2gtXFx1MDAzZWJzdGF0cyxcXG4xMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlY3B1X2JzdGF0cyxcXG4xMzYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzY2gtXFx1MDAzZXJhdGVfZXN0LFxcbjEzNjE6XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCxcXG4xMzYyOlxcdFxcdFxcdFxcdFxcdFxcdHRydWUsXFxuMTM2MzpcXHRcXHRcXHRcXHRcXHRcXHR0Y2FbVENBX1JBVEVdKTtcXG4xMzY0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xMzY1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBnZW5lcmF0ZSBuZXcgZXN0aW1hdG9yXFxcIik7XFxuMTM2NjpcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ0O1xcbjEzNjc6XFx0XFx0XFx0fVxcbjEzNjg6XFx0XFx0fVxcbjEzNjk6XFx0XFxuMTM3MDpcXHRcXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcXG4xMzcxOlxcdFxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcXG4xMzcyOlxcdFxcbjEzNzM6XFx0XFx0cmV0dXJuIHNjaDtcXG4xMzc0OlxcdFxcbjEzNzU6XFx0ZXJyX291dDQ6XFxuMTM3NjpcXHRcXHQvKiBFdmVuIGlmIG9wcy1cXHUwMDNlaW5pdCgpIGZhaWxlZCwgd2UgY2FsbCBvcHMtXFx1MDAzZWRlc3Ryb3koKVxcbjEzNzc6XFx0XFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxcbjEzNzg6XFx0XFx0ICovXFxuMTM3OTpcXHRcXHRpZiAob3BzLVxcdTAwM2VkZXN0cm95KVxcbjEzODA6XFx0XFx0XFx0b3BzLVxcdTAwM2VkZXN0cm95KHNjaCk7XFxuMTM4MTpcXHRcXHRxZGlzY19wdXRfc3RhYihydG5sX2RlcmVmZXJlbmNlKHNjaC1cXHUwMDNlc3RhYikpO1xcbjEzODI6XFx0ZXJyX291dDM6XFxuMTM4MzpcXHRcXHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XFxuMTM4NDpcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbjEzODU6XFx0XFx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcXG4xMzg2OlxcdGVycl9vdXQyOlxcbjEzODc6XFx0XFx0YnBmX21vZHVsZV9wdXQob3BzLCBvcHMtXFx1MDAzZW93bmVyKTtcXG4xMzg4OlxcdGVycl9vdXQ6XFxuMTM4OTpcXHRcXHQqZXJycCA9IGVycjtcXG4xMzkwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4xMzk0OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpvc3RhYiwgKnN0YWIgPSBOVUxMO1xcbjEzOTc6XFx0XFx0aW50IGVyciA9IDA7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdGlmICh0Y2FbVENBX09QVElPTlNdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjAwOjAwLjk2NDAwNTY1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjE2MTkzMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBRZGlzYyBGcmVlaW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBxZGlzY19jcmVhdGVgLCBhbmQgdGhlIHVzZSBvZiBgcWRpc2NfZnJlZV9yY3VgIGluc3RlYWQgb2YgdGhlIG1vcmUgc3RhbmRhcmQgYHFkaXNjX2ZyZWVgIHJhaXNlcyBhIGZsYWcuIFdoeSB0aGUgUkNVLWJhc2VkIGZyZWVpbmc/IFRoZSBrZXkgaXMgbGlrZWx5IHRoYXQgc29tZXRoaW5nLCBlaXRoZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uIChgb3BzLVx1MDAzZWluaXQoKWAsIGBvcHMtXHUwMDNlZGVzdHJveSgpYCwgb3Igc2ltaWxhciksIG1pZ2h0IGJlIHB1Ymxpc2hpbmcgdGhlIGBzY2hgIHN0cnVjdHVyZS4gVGhpcyBjb3VsZCBiZSBkaXJlY3QgYWNjZXNzLCBSQ1UgcmVhZCBhY2Nlc3MsIHBlcmhhcHMgZXZlbiBpZiBhbiBgb3BzLVx1MDAzZWRlc3Ryb3lgIGNhbGxiYWNrIHVzZXMgUkNVIGl0c2VsZi4gVGhlIHByZXNlbmNlIG9mIGBtaW5pX3FkaXNjYCBvciBmaWx0ZXJzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoaXMgbGlrZWxpaG9vZC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHVzaW5nIFJDVSBmb3IgZnJlZWluZyBpcyBhIGRpcmVjdCBtZWFzdXJlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGF0J3MgdGhlIGxpa2VseSBzY2VuYXJpby5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgcHJpbWFyeSBjb25jZXJucyBhcmUgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChLTVNBTikgb3IgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBLQVNBTi1kZXRlY3RhYmxlIHByb2JsZW1zIGxpa2UgVUFGLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrOlxuXG4qICAgRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbW11bmljYXRlZCB0byB1c2VyIHNwYWNlIGluIGEgd2F5IHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUuXG4qICAgRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBhdCBhbGwuXG4qICAgRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZCByZWFkcz8gTm8sIGl0IGRvZXNuJ3Qgc2VlbSB0aGF0IHdheS5cbiogICBEb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaW4gc3Vycm91bmRpbmcgY29kZT8gTm8uXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSAqaXMqIGFib3V0IG1lbW9yeSBsaWZlY3ljbGUsIHNwZWNpZmljYWxseSBlbnN1cmluZyBhc3luY2hyb25vdXMgZnJlZWluZyB2aWEgUkNVIChgY2FsbF9yY3VgKSBpbnN0ZWFkIG9mIGEgc3luY2hyb25vdXMgYGtmcmVlYCwgd2hpY2ggZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBVQUYgcG90ZW50aWFsIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGFib3V0IFVBRiBwcm90ZWN0aW9uLiBLQVNBTiBpcyB0aGUgcmVsZXZhbnQgdG9vbCBoZXJlLCBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgd291bGQgYWxzbyBjYXRjaCBzdWNoIHByb2JsZW1zLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkLiBNeSBjb25jbHVzaW9uOiB0aGlzIGFwcGVhcnMgdG8gYmUgYSB3ZWxsLWNvbnNpZGVyZWQgYW5kIGNvcnJlY3QgYXBwcm9hY2guIE5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgKmJvdGgqIGBxZGlzY19mcmVlYCBhbmQgYHFkaXNjX2ZyZWVfcmN1YCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjowMDowNS41ODAyMDE4MTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzIxNDAxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfZnJlZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jPTMyMD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmM6MzIxOm5mcF9hYm1fcWRpc2NfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmZwX2FibV9saW5rICphbGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jLTMyMi1cXHRcXHQgICBzdHJ1Y3QgbmZwX3FkaXNjICpxZGlzYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmM9NDA0PW5mcF9hYm1fcWRpc2NfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmZwX2FibV9saW5rICphbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmMtNDE3LVxcdG5mcF9hYm1fcWRpc2NfdW5saW5rX2NoaWxkcmVuKHFkaXNjLCAwLCBxZGlzYy1cXHUwMDNlbnVtX2NoaWxkcmVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jOjQxODpcXHRuZnBfYWJtX3FkaXNjX2ZyZWUobmV0ZGV2LCBhbGluaywgcWRpc2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmMtNDE5LVxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD03OTM9c3RydWN0IFFkaXNjICpxZGlzY19hbGxvYyhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5NS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo3OTY6dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5Ny1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI3MT1zdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4NC1cXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM4NTpcXHRxZGlzY19mcmVlX3JjdShzY2gpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4Ni1lcnJfb3V0MjpcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEwODc9RVhQT1JUX1NZTUJPTChxZGlzY19yZXNldCk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA4OC1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMDg5OnN0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEwOTAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEwMC1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTAxOnZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYylcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAyLXtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTAzOlxcdGNhbGxfcmN1KFxcdTAwMjZxZGlzYy1cXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTA0LX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTExMDY9c3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTI5LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMzA6XFx0cWRpc2NfZnJlZV9yY3UocWRpc2MpO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjowMDowNy4xNTIzNDc5NThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxMjA5MTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFkaXNjIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgY2xlYW4tY3V0LiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgYHFkaXNjX2NyZWF0ZWAuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgYGtmcmVlYCdpbmcgdGhlIGBzdHJ1Y3QgUWRpc2NgIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcsIGl0J3Mgc3dpdGNoaW5nIHRvIGEgZGVsYXllZCwgUkNVLWJhc2VkIGZyZWVpbmcgcHJvY2VzcyB1c2luZyBgY2FsbF9yY3VgLiBUaGlzIGNsZWFybHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgcmF0aW9uYWxlIGlzIHNvbGlkIOKAkyBSQ1UgcmVhZGVycyBtaWdodCBzdGlsbCBiZSByZWZlcmVuY2luZyB0aGUgUWRpc2MsIHNvIHN5bmNocm9ub3VzIGZyZWVpbmcgd291bGQgYmUgYSBiYWQgbW92ZS5cblxuTm93LCBiZWNhdXNlIEtBU0FOIGlzIHRoZSBvbmUgdGhhdCBjYXVnaHQgdGhlIHVzZS1hZnRlci1mcmVlIGFuZCBtZW1vcnkgbGlmZXRpbWUgcHJvYmxlbSwgYW5kIGZyb20gdGhlIHNvdW5kcyBvZiBpdCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJJ20gdGhpbmtpbmcgd2UgY2FuIHNhZmVseSBtYXJrIGBOZWVkc0tNU0FOYCBhcyBmYWxzZSBoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODIsIk91dHB1dFRva2VucyI6MTkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjAwOjEwLjM2NDQ0MzMxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 11:43:41 +0000 UTC FinishedAt: 2026-09-03 12:00:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED" ], "series_id": "e2016e69-2263-45ef-aa6f-6511797098c2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "qdisc_free_rcu", "qdisc_free_cb", "qdisc_create", "__qdisc_destroy", "tc_modify_qdisc" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O3FkaXNjX2ZyZWVfY2ImIzM0OywKICAgICYjMzQ7cWRpc2NfY3JlYXRlJiMzNDssCiAgICAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBjbGVhbnVwIHBhdGggaW4gYHFkaXNjX2NyZWF0ZSgpYCBhbmQgYF9fcWRpc2NfZGVzdHJveSgpYCB0byBmcmVlIHRoZSBgc3RydWN0IFFkaXNjYCBzdHJ1Y3R1cmUgYXN5bmNocm9ub3VzbHkgdmlhIFJDVSAoYGNhbGxfcmN1YCkgaW5zdGVhZCBvZiBzeW5jaHJvbm91c2x5LiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmFjZSBjb25kaXRpb25zIHdoZXJlIGNvbmN1cnJlbnQgUkNVIHJlYWRlcnMgbWlnaHQgYWNjZXNzIHRoZSBRZGlzYyB3aGlsZSBpdCBpcyBiZWluZyBmcmVlZC5cblxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBmcmVlaW5nIG9mIHN0cnVjdCBRZGlzYyBvbiB0aGUgZXJyb3IgdW53aW5kaW5nIHBhdGggb2YgcWRpc2NfY3JlYXRlKCkgZnJvbSBpbW1lZGlhdGUgc3luY2hyb25vdXMgZnJlZWluZyB0byBkZWZlcnJlZCBSQ1UgZnJlZWluZyB2aWEgY2FsbF9yY3UgKHFkaXNjX2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyBvYmplY3QgbGlmZXRpbWUgYW5kIGNsZWFudXAgc2VtYW50aWNzIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGVyIChuZXQvc2NoZWQpIHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgVEMgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcWRpc2MgY3JlYXRpb24gZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYzZWE1MTVhNWYxN2UyMjhiYWI0ZGJhNWM4MjAxYzk1NDAwYmI3NzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDExOjU5OjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oXG5pbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcyxcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuJiM0Mzt2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IFFkaXNjX29wcyAqb3BzLCB1MzIgcGFyZW50aWQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTEzODIsNyAmIzQzOzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBlcnJfb3V0MzpcbiBcdHFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTtcbiBcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xuLVx0cWRpc2NfZnJlZShzY2gpO1xuJiM0MztcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XG4gZXJyX291dDI6XG4gXHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cdTAwM2Vvd25lcik7XG4gZXJyX291dDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5pbmRleCBlZjJiNGJmNTE1NjQxLi43MTYzMGI3OTVmOWQ2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5AQCAtMTA4NiwyMSAmIzQzOzEwODYsMjEgQEAgdm9pZCBxZGlzY19yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHFkaXNjX3Jlc2V0KTtcbiBcbi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYylcbiYjNDM7c3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0aWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxZGlzYykpIHtcbi1cdFx0ZnJlZV9wZXJjcHUocWRpc2MtXHUwMDNlY3B1X2JzdGF0cyk7XG4tXHRcdGZyZWVfcGVyY3B1KHFkaXNjLVx1MDAzZWNwdV9xc3RhdHMpO1xuJiM0MztcdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4mIzQzO1xuJiM0MztcdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocSkpIHtcbiYjNDM7XHRcdGZyZWVfcGVyY3B1KHEtXHUwMDNlY3B1X2JzdGF0cyk7XG4mIzQzO1x0XHRmcmVlX3BlcmNwdShxLVx1MDAzZWNwdV9xc3RhdHMpO1xuIFx0fVxuIFxuLVx0a2ZyZWUocWRpc2MpO1xuJiM0MztcdGtmcmVlKHEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiYjNDM7dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIHtcbi1cdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4tXG4tXHRxZGlzY19mcmVlKHEpO1xuJiM0MztcdGNhbGxfcmN1KFx1MDAyNnFkaXNjLVx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuQEAgLTExMjcsNyAmIzQzOzExMjcsNyBAQCBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbiBcbiBcdHRyYWNlX3FkaXNjX2Rlc3Ryb3kocWRpc2MpO1xuIFxuLVx0Y2FsbF9yY3UoXHUwMDI2cWRpc2MtXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcbiYjNDM7XHRxZGlzY19mcmVlX3JjdShxZGlzYyk7XG4gfVxuIFxuIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O3FkaXNjX2ZyZWVfY2ImIzM0OywKICAgICYjMzQ7cWRpc2NfY3JlYXRlJiMzNDssCiAgICAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGZyZWVpbmcgb2Ygc3RydWN0IFFkaXNjIG9uIHRoZSBlcnJvciB1bndpbmRpbmcgcGF0aCBvZiBxZGlzY19jcmVhdGUoKSBmcm9tIGltbWVkaWF0ZSBzeW5jaHJvbm91cyBmcmVlaW5nIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nIHZpYSBjYWxsX3JjdSAocWRpc2NfZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIG9iamVjdCBsaWZldGltZSBhbmQgY2xlYW51cCBzZW1hbnRpY3MgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsZXIgKG5ldC9zY2hlZCkgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBUQyBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGR1cmluZyBxZGlzYyBjcmVhdGlvbiBmYWlsdXJlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjNlYTUxNWE1ZjE3ZTIyOGJhYjRkYmE1YzgyMDFjOTU0MDBiYjc3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTE6NTk6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCiAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7CiYjNDM7dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJCWNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywgdTMyIHBhcmVudGlkLAogCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTEzODIsNyAmIzQzOzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIGVycl9vdXQzOgogCXFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTsKIAluZXRkZXZfcHV0KGRldiwgJmFtcDtzY2gtJmd0O2Rldl90cmFja2VyKTsKLQlxZGlzY19mcmVlKHNjaCk7CiYjNDM7CXFkaXNjX2ZyZWVfcmN1KHNjaCk7CiBlcnJfb3V0MjoKIAlicGZfbW9kdWxlX3B1dChvcHMsIG9wcy0mZ3Q7b3duZXIpOwogZXJyX291dDoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggZWYyYjRiZjUxNTY0MS4uNzE2MzBiNzk1ZjlkNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTEwODYsMjEgJiM0MzsxMDg2LDIxIEBAIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYykKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpOwogCi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYykKJiM0MztzdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKLQlpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHFkaXNjKSkgewotCQlmcmVlX3BlcmNwdShxZGlzYy0mZ3Q7Y3B1X2JzdGF0cyk7Ci0JCWZyZWVfcGVyY3B1KHFkaXNjLSZndDtjcHVfcXN0YXRzKTsKJiM0MzsJc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKJiM0MzsKJiM0MzsJaWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxKSkgewomIzQzOwkJZnJlZV9wZXJjcHUocS0mZ3Q7Y3B1X2JzdGF0cyk7CiYjNDM7CQlmcmVlX3BlcmNwdShxLSZndDtjcHVfcXN0YXRzKTsKIAl9CiAKLQlrZnJlZShxZGlzYyk7CiYjNDM7CWtmcmVlKHEpOwogfQogCi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKJiM0Mzt2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpCiB7Ci0Jc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKLQotCXFkaXNjX2ZyZWUocSk7CiYjNDM7CWNhbGxfcmN1KCZhbXA7cWRpc2MtJmd0O3JjdSwgcWRpc2NfZnJlZV9jYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQpAQCAtMTEyNyw3ICYjNDM7MTEyNyw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQogCiAJdHJhY2VfcWRpc2NfZGVzdHJveShxZGlzYyk7CiAKLQljYWxsX3JjdSgmYW1wO3FkaXNjLSZndDtyY3UsIHFkaXNjX2ZyZWVfY2IpOwomIzQzOwlxZGlzY19mcmVlX3JjdShxZGlzYyk7CiB9CiAKIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUXVldWVpbmcgRGlzY2lwbGluZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYsIGFuZCB0aGUgbWFpbiB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc2hpZnQgZnJvbSBgcWRpc2NfZnJlZWAgdG8gYHFkaXNjX2ZyZWVfcmN1YC4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgdXNpbmcgYW4gUkNVIChSZWFkLUNvcHktVXBkYXRlKSBjYWxsYmFjayBmb3IgZnJlZWluZyBxdWV1ZWluZyBkaXNjaXBsaW5lcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlcmUmIzM5O3MgYW4gZXJyb3IgZHVyaW5nIHRoZSBgcWRpc2NfY3JlYXRlYCBwcm9jZXNzLiBUaGlzIGlzIGdvb2QsIEkgYWx3YXlzIGxpa2UgdG8gc2VlIG1vcmUgUkNVIHVzYWdlIHdoZXJlIGl0IG1ha2VzIHNlbnNlLCByZWR1Y2VzIGxvY2sgY29udGVudGlvbiBhbmQgaW1wcm92ZXMgY29uY3VycmVuY3ksIGFuZCBpcyBjb21tb24gYmVzdCBwcmFjdGljZSBpbiB0aGlzIGFyZWEuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYWZmZWN0IGNvZGUgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCB3aGVyZSBgcWRpc2NfY3JlYXRlYCBpcywgc28gdGhlIGltcGFjdCBpcyBpbiB0aGUgY29yZSBBUEkuIFRoZSBvdGhlciBhcmVhIGFmZmVjdGVkIHNlZW1zIHRvIGJlIGBuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY2AsIHdoaWNoIGxpa2VseSBpbnZvbHZlcyByZWZhY3RvcmluZyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLCBzbyBgcWRpc2NfZnJlZV9jYmAgYW5kIGBxZGlzY19mcmVlX3JjdWAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBzb21lIG9mIG15IHRvb2xzIHRvIGRpZyBpbi4gSSBzaG91bGQgY2hlY2sgYm90aCBvZiB0aG9zZSBmaWxlcyBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWRpc2NfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEyNzE9c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg0LVx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnNjaC1cdTAwM2VkZXZfdHJhY2tlcik7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzODU6XHRxZGlzY19mcmVlX3JjdShzY2gpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg2LWVycl9vdXQyOlxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEwODc9RVhQT1JUX1NZTUJPTChxZGlzY19yZXNldCk7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDg4LVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTA4OTpzdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEwOTAte1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDAtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTAxOnZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYylcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDIte1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEwMzpcdGNhbGxfcmN1KFx1MDAyNnFkaXNjLVx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTA0LX1cbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMTA2PXN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMjktXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTMwOlx0cWRpc2NfZnJlZV9yY3UocWRpc2MpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFFkaXNjIENyZWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBxZGlzY19jcmVhdGVgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGNyZWF0aW5nIHRyYWZmaWMgY29udHJvbCBkaXNjaXBsaW5lcyBsaXZlcywgb2J2aW91c2x5LiBJJiMzOTttIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gaG93IGEgbmV3IHFkaXNjIGlzIHJlZ2lzdGVyZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB3aG9sZSBpbnN0YW50aWF0aW9uIHByb2Nlc3MuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlcmUmIzM5O3MgYSB0YWJsZSBvZiByZWdpc3RlcmVkIHFkaXNjIHR5cGVzLCBtYXliZSB1c2luZyBzb21ldGhpbmcgbGlrZSBhIGBzdHJ1Y3QgbGlzdF9oZWFkYCwgYW5kIGBxZGlzY19jcmVhdGVgIGl0ZXJhdGVzIHRocm91Z2ggdGhhdCB0byBmaW5kIHRoZSByaWdodCBmYWN0b3J5IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4KCknigJltIGFsc28gYXNzdW1pbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBraW5kIG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBsb2NraW5nIGludm9sdmVkLCBlc3BlY2lhbGx5IGlmIHRoZSBxZGlzYyBjYW4gYmUgdXNlZCBieSBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMgb3IgdHJhZmZpYyBmbG93cyBzaW11bHRhbmVvdXNseS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBjYXVzZSBpc3N1ZXMgd2l0aCwgc2F5LCBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgcWRpc2MmIzM5O3MgcHJpdmF0ZSBkYXRhLgoKRnVydGhlcm1vcmUsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyB0byBiZSBwcmVzZW50LiBJIGltYWdpbmUgaXQgc2hvdWxkIGRlYWwgd2l0aCBjYXNlcyBsaWtlIGEgbWlzc2luZyBvciBpbnZhbGlkIHFkaXNjIHR5cGUsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yIHByb2JsZW1zIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc3RhYmlsaXR5IGFuZCBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgd2hhdCB0aGUgdHlwaWNhbCBmYWlsdXJlIG1vZGVzIGFyZSwgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdXNlcyBvZiBga21hbGxvY2AsIGBrZnJlZWAsIG9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRpbmcuIEFueSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3b3VsZCBiZSBkaXNhc3Ryb3VzIGluIHRoaXMgYXJlYS4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGhvdyB0aGUgcWRpc2PigJlzIHByaXZhdGUgZGF0YSBpcyBtYW5hZ2VkLCBhbmQgaG93IGl0cyBsaWZldGltZSBpcyB0aWVkIHRvIHRoZSBuZXQgZGV2aWNlIG9yIHRyYWZmaWMgZmxvdy4gSSBob3BlIHRoZXJlJiMzOTtzIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBnZW5lcmljIHFkaXNjIGNvcmUgYW5kIHRoZSBzcGVjaWZpYyBxZGlzYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgSFRCLCBUQkYsIGV0Yy4pLCB3aGljaCBzaG91bGQgbWFrZSB0aGUgY29kZSBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gbWFpbnRhaW4uIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNTA6XHRcbjEzNTE6XHRcdGlmICh0Y2FbVENBX1JBVEVdKSB7XG4xMzUyOlx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuMTM1MzpcdFx0XHRpZiAoc2NoLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ1FfRl9NUVJPT1QpIHtcbjEzNTQ6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBhdHRhY2ggcmF0ZSBlc3RpbWF0b3IgdG8gYSBtdWx0aS1xdWV1ZSByb290IHFkaXNjXCYjMzQ7KTtcbjEzNTU6XHRcdFx0XHRnb3RvIGVycl9vdXQ0O1xuMTM1NjpcdFx0XHR9XG4xMzU3Olx0XG4xMzU4Olx0XHRcdGVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKFx1MDAyNnNjaC1cdTAwM2Vic3RhdHMsXG4xMzU5Olx0XHRcdFx0XHRcdHNjaC1cdTAwM2VjcHVfYnN0YXRzLFxuMTM2MDpcdFx0XHRcdFx0XHRcdTAwMjZzY2gtXHUwMDNlcmF0ZV9lc3QsXG4xMzYxOlx0XHRcdFx0XHRcdE5VTEwsXG4xMzYyOlx0XHRcdFx0XHRcdHRydWUsXG4xMzYzOlx0XHRcdFx0XHRcdHRjYVtUQ0FfUkFURV0pO1xuMTM2NDpcdFx0XHRpZiAoZXJyKSB7XG4xMzY1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZ2VuZXJhdGUgbmV3IGVzdGltYXRvclwmIzM0Oyk7XG4xMzY2Olx0XHRcdFx0Z290byBlcnJfb3V0NDtcbjEzNjc6XHRcdFx0fVxuMTM2ODpcdFx0fVxuMTM2OTpcdFxuMTM3MDpcdFx0cWRpc2NfaGFzaF9hZGQoc2NoLCBmYWxzZSk7XG4xMzcxOlx0XHR0cmFjZV9xZGlzY19jcmVhdGUob3BzLCBkZXYsIHBhcmVudCk7XG4xMzcyOlx0XG4xMzczOlx0XHRyZXR1cm4gc2NoO1xuMTM3NDpcdFxuMTM3NTpcdGVycl9vdXQ0OlxuMTM3NjpcdFx0LyogRXZlbiBpZiBvcHMtXHUwMDNlaW5pdCgpIGZhaWxlZCwgd2UgY2FsbCBvcHMtXHUwMDNlZGVzdHJveSgpXG4xMzc3Olx0XHQgKiBsaWtlIHFkaXNjX2NyZWF0ZV9kZmx0KCkuXG4xMzc4Olx0XHQgKi9cbjEzNzk6XHRcdGlmIChvcHMtXHUwMDNlZGVzdHJveSlcbjEzODA6XHRcdFx0b3BzLVx1MDAzZWRlc3Ryb3koc2NoKTtcbjEzODE6XHRcdHFkaXNjX3B1dF9zdGFiKHJ0bmxfZGVyZWZlcmVuY2Uoc2NoLVx1MDAzZXN0YWIpKTtcbjEzODI6XHRlcnJfb3V0MzpcbjEzODM6XHRcdHFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTtcbjEzODQ6XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xuMTM4NTpcdFx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcbjEzODY6XHRlcnJfb3V0MjpcbjEzODc6XHRcdGJwZl9tb2R1bGVfcHV0KG9wcywgb3BzLVx1MDAzZW93bmVyKTtcbjEzODg6XHRlcnJfb3V0OlxuMTM4OTpcdFx0KmVycnAgPSBlcnI7XG4xMzkwOlx0XHRyZXR1cm4gTlVMTDtcbjEzOTE6XHR9XG4xMzkyOlx0XG4xMzkzOlx0c3RhdGljIGludCBxZGlzY19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Y2EsXG4xMzk0Olx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTM5NTpcdHtcbjEzOTY6XHRcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpvc3RhYiwgKnN0YWIgPSBOVUxMO1xuMTM5NzpcdFx0aW50IGVyciA9IDA7XG4xMzk4Olx0XG4xMzk5Olx0XHRpZiAodGNhW1RDQV9PUFRJT05TXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IG9mIGBxZGlzY19jcmVhdGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcWRpc2NfY3JlYXRlYCDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29yZSBwaWVjZSBvZiB0aGUgTGludXggbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wsIG9yIHFkaXNjLCBzdWJzeXN0ZW0uIEl0JiMzOTtzIGhhbmdpbmcgb3V0IGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBhbmQgYG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyByZWFjaGFibGUgdGhpcyBjb2RlIGlzLiBJIGtub3cgaXQmIzM5O3MgdHJpZ2dlcmVkIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2AgbWVzc2FnZXMsIHdoaWNoIHdvdWxkIGJlIGhvdyBgdGMgcWRpc2MgYWRkLi4uYCBjYWxscyBpbnRvIGl0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uOiBDYW4gSSBhY3R1YWxseSAqaGl0KiB0aGlzIGZ1bmN0aW9uYWxpdHk/IFRoZSBnb29kIG5ld3MgaXMgdGhhdCBuZXR3b3JraW5nIHNjaGVkdWxpbmcsIGFuZCBUcmFmZmljIENvbnRyb2wgaW4gZ2VuZXJhbCwgYXJlIHdlbGwtZXN0YWJsaXNoZWQsIHNvIHRoYXQgc2VlbXMgbGlrZWx5LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgZXhpc3RpbmcgZnV6emluZy4gQWhhISBTeXprYWxsZXIgaGFzIGJlZW4gaGl0dGluZyBuZXRsaW5rIHNvY2tldHMgaGFyZCwgYW5kIHRoYXQgaW5jbHVkZXMgdGhpcyBhcmVhLiBTbywgdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBuZXQvc2NoZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBhcHBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2hfYXBpLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBzY2hfZnJhZy5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byBjaGVja2luZyBgS2NvbmZpZ2AgZm9yIGBDT05GSUdfTkVUX1NDSEVEYDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgc2NoZWR1bGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBDT05GSUdfTkVUX1NDSEVEYCBvcHRpb24uIEl0JiMzOTtzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc3dpdGNoLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBuZXR3b3JrIHNjaGVkdWxpbmcgZmVhdHVyZSBzZXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBkZWZhdWx0IHZhbHVlIGlzIGFzc2lnbmVkLCBhbmQgYW55IHJlbGV2YW50IGhlbHAgdGV4dC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2Ugb2YgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkVUX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnLTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBTY2hlZHVsZXIgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgYXNzZXNzIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTkVUX1NDSEVEYC4gVGhpcyBpbXBsaWVzIGEgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0d29yayBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggb3RoZXIgY3J1Y2lhbCBjb21wb25lbnRzLiBXZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSBzY2hlZHVsaW5nIGNob2ljZXMgaGVhdmlseSBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUga2VybmVsIGludGVyZmFjZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZmVlZCBpbnRvIGFuZCByZWx5IHVwb24gdGhlIHNjaGVkdWxlci4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgUW9TLCB0cmFmZmljIHNoYXBpbmcsIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgc3BlY2lmaWMgY29udGV4dCB3aWxsIGRyaXZlIG15IGludmVzdGlnYXRpb24uIFRoZSBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHJldmlld2VkLCBhbmQgZWFjaCBpbXBhY3QgYXNzZXNzZWQgYW5kIHByaW9yaXRpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4gIDIxOlx0XHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxuICAyMjpcdFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxuICAyMzpcdFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXG4gIDI0Olx0XG4gIDI1Olx0XHQgIFRvIGFkbWluaXN0ZXIgdGhlc2Ugc2NoZWR1bGVycywgeW91JiMzOTtsbCBuZWVkIHRoZSB1c2VyLWxldmVsIHV0aWxpdGllc1xuICAyNjpcdFx0ICBmcm9tIHRoZSBwYWNrYWdlIGlwcm91dGUyJiM0Mzt0YyBhdFxuICAyNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvXHUwMDNlLiAgVGhhdCBwYWNrYWdlXG4gIDI4Olx0XHQgIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0XG4gIDI5Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcdTAwM2UuXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBCdWlsZCBBcnRpZmFjdHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIG9yaWdpbiBvZiBgc2NoX2dlbmVyaWMub2AuIEkmIzM5O20gc3RhcnRpbmcgdG8gc3VzcGVjdCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gc29tZXdoZXJlIGluIHRoZSBidWlsZCBwcm9jZXNzLiBCZXN0IHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGJ1aWxkIHBhdGggb2YgdGhpcyBvYmplY3QgZmlsZS4gSXMgaXQgcHVsbGluZyBmcm9tIHRoZSBjb3JyZWN0IHNvdXJjZXMsIG9yIGhhcyBzb21lIG1pc2NvbmZpZ3VyYXRpb24gb3Igc3RhbGUgZmlsZSBjcmVwdCBpbnRvIHRoZSBtaXg/IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIGlzIHByZXR0eSBjb21wbGV4LCBzbyBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBhbnl0aGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB3aGVyZSB0aGUgY29tcGlsZXIgaXMgc3BpdHRpbmcgb3V0IHRoaXMgb2JqZWN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0JiMzOTtzIGdvaW5nIG9uLiBLbm93aW5nIHRoZSBidWlsZCBwYXRoIHdpbGwgbGV0IG1lIHRyYWNlIGl0IGJhY2sgdGhyb3VnaCB0aGUgTWFrZWZpbGVzIG9yIGJ1aWxkIHNjcmlwdHMsIGFuZCBxdWlja2x5IGlkZW50aWZ5IHRoZSBzb3VyY2UgY29kZSB0aGF0IGdlbmVyYXRlZCBpdC4gRnJvbSB0aGVyZSwgSSBjYW4gaW5zcGVjdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGludm9sdmVkLCBhbmQgaG9wZWZ1bGx5IGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBpc3N1ZS4gVGltZSB0byBnZXQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX2dlbmVyaWMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUtNS1cbm5ldC9zY2hlZC9NYWtlZmlsZTo2Om9iai15XHQ6PSBzY2hfZ2VuZXJpYy5vIHNjaF9tcS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgdHJhZmZpYyBjb250cm9sIHNldHVwLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYE5FVF9TQ0hFRGAgY29uZmlndXJhdGlvbiBvcHRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGJpZyBvbmUsIHJpZ2h0PyBUaGUgY29yZSBjb250cm9sIHN3aXRjaCBmb3IgdGhlIHFkaXNjIEFQSS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UgZGlyZWN0bHkgdGllZCBpbnRvIHFkaXNjIG1hbmlwdWxhdGlvbi4gSSBrbm93IEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQ6CgoqICAgYHFkaXNjX2ZyZWVfcmN1YAoqICAgYHFkaXNjX2NyZWF0ZWAKKiAgIGBfX3FkaXNjX2Rlc3Ryb3lgCiogICBgcWRpc2NfZnJlZV9jYmAKKiAgIEFuZCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucywgYHRjX21vZGlmeV9xZGlzY2AgYW5kIGB0Y19nZXRfcWRpc2NgLiBUaGV5JiMzOTtyZSB0aGUgZnJvbnQgZG9vcnMgaGVyZS4KCk5vdywgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYHRjX21vZGlmeV9xZGlzY2AuIFVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHFkaXNjJiMzOTtzIGFyZSBtb2RpZmllZCBpcyBrZXkgaGVyZS4gQW5kIHNpbmNlIGBxZGlzY19jcmVhdGVgIGlzIHRoZSBwb2ludCBvZiBpbml0aWFsaXphdGlvbiwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaXRzIGNhbGxlcnMgYXMgd2VsbCwgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gVGltZSB0byBzZWUgaG93IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FkaXNjX2NyZWF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTEyMzE9c3RhdGljIGludCBxZGlzY19ibG9ja19pbmRleGVzX3NldChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzAtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEyNzE6c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzItXHRcdFx0XHQgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzAtXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM3MTpcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3Mi1cbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE2MDg9c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzYyLVx0XHRpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkge1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxNzYzOlx0XHRcdHEgPSBxZGlzY19jcmVhdGUoZGV2LCBkZXZfaW5ncmVzc19xdWV1ZShkZXYpLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzY0LVx0XHRcdFx0XHQgdGNtLVx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cdTAwM2V0Y21fcGFyZW50LFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc3OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc4MDpcdFx0cSA9IHFkaXNjX2NyZWF0ZShkZXYsIGRldl9xdWV1ZSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc4MS1cdFx0XHRcdCB0Y20tXHUwMDNldGNtX3BhcmVudCwgdGNtLVx1MDAzZXRjbV9oYW5kbGUsXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTA0MT1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDYwLVx0aWYgKCFvcHMtXHUwMDNlaW5pdCB8fCBvcHMtXHUwMDNlaW5pdChzY2gsIE5VTEwsIGV4dGFjaykgPT0gMCkge1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTA2MTpcdFx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2X3F1ZXVlLVx1MDAzZWRldiwgcGFyZW50aWQpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA2Mi1cdFx0cmV0dXJuIHNjaDtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwMzI9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQxLVx0LyogTm90ZSB0aGF0IHRhcHJpb19yZXNldCgpIG1pZ2h0IG5vdCBiZSBjYWxsZWQgaWYgYW4gZXJyb3Jcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA0MjpcdCAqIGhhcHBlbnMgaW4gcWRpc2NfY3JlYXRlKCksIGFmdGVyIHRhcHJpb19pbml0KCkgaGFzIGJlZW4gY2FsbGVkLlxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQzLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0ODcKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgVHJhZmZpYyBDb250cm9sIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRob3NlIGhhbmRsaW5nIHF1ZXVlIGRpc2NpcGxpbmUgKGBxZGlzY2ApIG1vZGlmaWNhdGlvbnMgYW5kIGNyZWF0aW9uLCBhbmQgZGVzdHJ1Y3Rpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGBxZGlzY2Agb2JqZWN0cyBhcmUgaGFuZGxlZCwgcGFydGljdWxhcmx5IGluIGVycm9yIHNjZW5hcmlvcy4gYHRjX21vZGlmeV9xZGlzY2AsIG9yIGZ1bmN0aW9ucyBsaWtlIGB0Y19uZXdfdGZpbHRlcmAsIHVsdGltYXRlbHkgY2FsbCBgX190Y19tb2RpZnlfcWRpc2NgLCB3aGljaCBpcyB0aGUgbWFpbiBjYWxsZXIgb2YgYHFkaXNjX2NyZWF0ZWAuIFRoZXJlZm9yZSwgSSYjMzk7bSBpZGVudGlmeWluZyB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIHRoaXMgcGF0Y2guCgpJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZXNlIGNvcmUgZnVuY3Rpb25zIGFzIGNydWNpYWw6IGBxZGlzY19mcmVlX3JjdWAsIGBxZGlzY19mcmVlX2NiYCwgYHFkaXNjX2NyZWF0ZWAsIGBfX3FkaXNjX2Rlc3Ryb3lgLCBhbmQgYHRjX21vZGlmeV9xZGlzY2AuIExldCYjMzk7cyBjb25maXJtIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQsIHdoaWNoIHNlZW1zIHRvIGJlIGBuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4KCk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBhcHBlYXJzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoYG5ldC9zY2hlZC9gKSBhbmQgbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBgc3RydWN0IFFkaXNjYCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UgKGBjYWxsX3JjdWApIHVwb24gZXJyb3IgaW4gYHFkaXNjX2NyZWF0ZWAuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZWFzaWx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayAoc3BlY2lmaWNhbGx5IHJ0bmV0bGluayBUQyBjb21tYW5kcykgbWFrZXMgaXQgYSB2ZXJ5IGF0dHJhY3RpdmUgdGFyZ2V0LiBCYXNlZCBvbiB0aGVzZSBvYnNlcnZhdGlvbnMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZS4KCkkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGBORVRfU0NIRURgIGNvbmZpZ3VyYXRpb24gaXMgbmVjZXNzYXJ5LgoKRmluYWxseSwgSSYjMzk7bGwgZm9ybXVsYXRlIHRoZSByZXNwb25zZSBieSBzdW1tYXJpemluZyB0aGUga2V5IGZpbmRpbmdzLiBUaGlzIHBhdGNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gYHN0cnVjdCBRZGlzY2Agb2JqZWN0cywgY2hhbmdpbmcgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIGBxZGlzY19jcmVhdGVgIGZyb20gaW1tZWRpYXRlIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nLiBUaGlzIHNoaWZ0IGFmZmVjdHMgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGVycm9yIGNsZWFudXAgaW4gdGhlIGNvcmUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fTkVXUURJU0NgKS4gRnV6emluZyBpcyBlc3NlbnRpYWwgdG8gZGV0ZWN0IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMuCgpNeSBhbmFseXNpcyBkaWN0YXRlcyB0aGF0OgoKKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlCiogICBgRW5hYmxlQ29uZmlnc2A6IFsmIzM0O05FVF9TQ0hFRCYjMzQ7XQoqICAgYEZvY3VzU3ltYm9sc2A6IFsmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssICYjMzQ7cWRpc2NfZnJlZV9jYiYjMzQ7LCAmIzM0O3FkaXNjX2NyZWF0ZSYjMzQ7LCAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LCAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7XQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IFFkaXNjYCBtZW1vcnkgZnJlZWluZyB1cG9uIGVycm9yIGR1cmluZyBgcWRpc2NfY3JlYXRlKClgIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UsIGFmZmVjdGluZyBvYmplY3QgbGlmZWN5Y2xlIGFuZCBlcnJvciBjbGVhbnVwIGluIGBuZXQvc2NoZWRgLiBJdCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBhbmQgdGhlcmVmb3JlIHdvcnRoeSBvZiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cWRpc2NfZnJlZV9yY3UmIzM0OywKICAgICYjMzQ7cWRpc2NfZnJlZV9jYiYjMzQ7LAogICAgJiMzNDtxZGlzY19jcmVhdGUmIzM0OywKICAgICYjMzQ7X19xZGlzY19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjX21vZGlmeV9xZGlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgZnJlZWluZyBvZiBzdHJ1Y3QgUWRpc2Mgb24gdGhlIGVycm9yIHVud2luZGluZyBwYXRoIG9mIHFkaXNjX2NyZWF0ZSgpIGZyb20gaW1tZWRpYXRlIHN5bmNocm9ub3VzIGZyZWVpbmcgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcgdmlhIGNhbGxfcmN1IChxZGlzY19mcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCBjbGVhbnVwIHNlbWFudGljcyBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxlciAobmV0L3NjaGVkKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIFRDIGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgZHVyaW5nIHFkaXNjIGNyZWF0aW9uIGZhaWx1cmUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3FkaXNjX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O3FkaXNjX2ZyZWVfY2ImIzM0OywKICAgICYjMzQ7cWRpc2NfY3JlYXRlJiMzNDssCiAgICAmIzM0O19fcWRpc2NfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y19tb2RpZnlfcWRpc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGZyZWVpbmcgb2Ygc3RydWN0IFFkaXNjIG9uIHRoZSBlcnJvciB1bndpbmRpbmcgcGF0aCBvZiBxZGlzY19jcmVhdGUoKSBmcm9tIGltbWVkaWF0ZSBzeW5jaHJvbm91cyBmcmVlaW5nIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nIHZpYSBjYWxsX3JjdSAocWRpc2NfZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIG9iamVjdCBsaWZldGltZSBhbmQgY2xlYW51cCBzZW1hbnRpY3MgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsZXIgKG5ldC9zY2hlZCkgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBUQyBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGR1cmluZyBxZGlzYyBjcmVhdGlvbiBmYWlsdXJlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDExOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXG5cblRoZXNlIG1lbW9yeSBsaWZldGltZSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBmYWxsIGVudGlyZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gKHdoaWNoIGRldGVjdHMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIFJDVS9sb2NrIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCB1c2VyLXNwYWNlIGluZm8tbGVha3MsIG9yIGFsdGVyIGRhdGEgYnVmZmVyIHBhcnNpbmcvbGVuZ3Rocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjNlYTUxNWE1ZjE3ZTIyOGJhYjRkYmE1YzgyMDFjOTU0MDBiYjc3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTE6NTk6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsCiAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7Ci12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7CiYjNDM7dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAogCQkJCWNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywgdTMyIHBhcmVudGlkLAogCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTEzODIsNyAmIzQzOzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIGVycl9vdXQzOgogCXFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTsKIAluZXRkZXZfcHV0KGRldiwgJmFtcDtzY2gtJmd0O2Rldl90cmFja2VyKTsKLQlxZGlzY19mcmVlKHNjaCk7CiYjNDM7CXFkaXNjX2ZyZWVfcmN1KHNjaCk7CiBlcnJfb3V0MjoKIAlicGZfbW9kdWxlX3B1dChvcHMsIG9wcy0mZ3Q7b3duZXIpOwogZXJyX291dDoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggZWYyYjRiZjUxNTY0MS4uNzE2MzBiNzk1ZjlkNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTEwODYsMjEgJiM0MzsxMDg2LDIxIEBAIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYykKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpOwogCi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYykKJiM0MztzdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKLQlpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHFkaXNjKSkgewotCQlmcmVlX3BlcmNwdShxZGlzYy0mZ3Q7Y3B1X2JzdGF0cyk7Ci0JCWZyZWVfcGVyY3B1KHFkaXNjLSZndDtjcHVfcXN0YXRzKTsKJiM0MzsJc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKJiM0MzsKJiM0MzsJaWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxKSkgewomIzQzOwkJZnJlZV9wZXJjcHUocS0mZ3Q7Y3B1X2JzdGF0cyk7CiYjNDM7CQlmcmVlX3BlcmNwdShxLSZndDtjcHVfcXN0YXRzKTsKIAl9CiAKLQlrZnJlZShxZGlzYyk7CiYjNDM7CWtmcmVlKHEpOwogfQogCi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKJiM0Mzt2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpCiB7Ci0Jc3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTsKLQotCXFkaXNjX2ZyZWUocSk7CiYjNDM7CWNhbGxfcmN1KCZhbXA7cWRpc2MtJmd0O3JjdSwgcWRpc2NfZnJlZV9jYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQpAQCAtMTEyNyw3ICYjNDM7MTEyNyw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQogCiAJdHJhY2VfcWRpc2NfZGVzdHJveShxZGlzYyk7CiAKLQljYWxsX3JjdSgmYW1wO3FkaXNjLSZndDtyY3UsIHFkaXNjX2ZyZWVfY2IpOwomIzQzOwlxZGlzY19mcmVlX3JjdShxZGlzYyk7CiB9CiAKIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBRdWV1ZWluZyBEaXNjaXBsaW5lIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3Rpb24gd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgKFFkaXNjKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgYSB0cmFuc2l0aW9uIGZyb20gZGlyZWN0IGBxZGlzY19mcmVlYCBjYWxscyB0byB1c2luZyBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHZpYSBgcWRpc2NfZnJlZV9yY3VgLgoKTG9va2luZyBhdCB0aGUgc3BlY2lmaWNzLCB0aGUgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogcmVwbGFjaW5nIHRoZSBvbGQgYHFkaXNjX2ZyZWVgIHdpdGggYSBuZXcgYHFkaXNjX2ZyZWVfcmN1YC4gVGhhdCYjMzk7cyB0aGUga2V5IHNpZ25hbC4gSXQgaW5kaWNhdGVzIGEgc2hpZnQgdG93YXJkcyBkZWxheWVkIGZyZWVpbmcsIHdoaWNoIFJDVSBwcm92aWRlcy4KClRoZSBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgbW9kaWZpY2F0aW9ucyBpbiBgcWRpc2NfY3JlYXRlYCBhdCB0aGUgYGVycl9vdXQzYCBlcnJvciBoYW5kbGluZyBzZWN0aW9uIGFyZSBhbHNvIHRlbGxpbmcuIEluc3RlYWQgb2YgYSBkaXJlY3QgYHFkaXNjX2ZyZWVgLCB3ZSYjMzk7cmUgbm93IGNhbGxpbmcgYHFkaXNjX2ZyZWVfcmN1YCB0aGVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgZHVyaW5nIFFkaXNjIGNyZWF0aW9uLCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgd2Ugbm93IG5lZWQgdG8gZW5zdXJlIHRoZSBRZGlzYyYjMzk7cyBtZW1vcnkgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGZyZWVkLCBidXQgaGFuZGVkIG9mZiB0byBSQ1UgZm9yIGRlbGF5ZWQgY2xlYW51cC4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHJhY2VzIGR1cmluZyBlcnJvciBjbGVhbnVwLgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlLCB0aG91Z2gsIGxpZXMgaW4gYG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jYC4gV2UmIzM5O3ZlIGdvdCBgcWRpc2NfZnJlZWAgcmVmYWN0b3JlZCBpbnRvIGBxZGlzY19mcmVlX2NiYC4gVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBoYW5kbGVzIGZyZWVpbmcgcGVyY3B1IHN0YXRzIGFuZCB0aGUgUWRpc2Mgc3RydWN0IGl0c2VsZiB2aWEgYGtmcmVlYC4gVGhlIGBxZGlzY19mcmVlX3JjdWAgZnVuY3Rpb24gaW52b2tlcyBgY2FsbF9yY3VgLCBxdWV1aW5nIHVwIHRoZSBjYWxsYmFjay4gRmluYWxseSwgdGhlIGBfX3FkaXNjX2Rlc3Ryb3lgIGlzIG5vdyB1c2luZyBgcWRpc2NfZnJlZV9yY3VgLCByZWluZm9yY2luZyB0aGF0IFJDVSBpcyB0aGUgbWVjaGFuaXNtIG9mIGNob2ljZSBmb3IgUWRpc2MgZGVhbGxvY2F0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGV4YW1pbmluZyB0aGUgYHFkaXNjX2NyZWF0ZWAgZnVuY3Rpb24mIzM5O3Mgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGBlcnJfb3V0M2AgbGFiZWwuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHJlcG9zaXRvcnkgZm9yIHJlbGF0ZWQgY29udGV4dCB3b3VsZCBsaWtlbHkgYmUgaGVscGZ1bCBpbiB0cmFjaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgZXhwZWN0IHRvIGZpbmQgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9MTIzMT1zdGF0aWMgaW50IHFkaXNjX2Jsb2NrX2luZGV4ZXNfc2V0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3MC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTI3MTpzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3Mi1cdFx0XHRcdCAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3MC1cdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzcxOlx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzcyLVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3Ni1cdC8qIEV2ZW4gaWYgb3BzLVx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVx1MDAzZWRlc3Ryb3koKVxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc3Olx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzc4LVx0ICovXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xNjA4PXN0YXRpYyBpbnQgX190Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Mi1cdFx0aWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2MzpcdFx0XHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2NC1cdFx0XHRcdFx0IHRjbS1cdTAwM2V0Y21fcGFyZW50LCB0Y20tXHUwMDNldGNtX3BhcmVudCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NzktXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3ODA6XHRcdHEgPSBxZGlzY19jcmVhdGUoZGV2LCBkZXZfcXVldWUsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODEtXHRcdFx0XHQgdGNtLVx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cdTAwM2V0Y21faGFuZGxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgLSBMaW5lcyAxMzUwLTE0MDAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMTM1MCB0byAxNDAwIHdpdGhpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoaXMgc2VjdGlvbi4uLiBBaCwgeWVzLCBJIHJlY29nbml6ZSB0aGlzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgQVBJIGdldHMgaGFtbWVyZWQgb3V0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2NoZWR1bGluZyBkaXNjaXBsaW5lcyAocWRpc2NzKSB0aGVtc2VsdmVzLCBvciBwZXJoYXBzIHRoZSByZWdpc3RyYXRpb24gb3IgdW5yZWdpc3RyYXRpb24gb2YgdGhlc2Ugc2NoZWR1bGVycy4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbnMgY2FsbGVkIHdoZW4gYSBuZXcgcWRpc2MgaXMgY3JlYXRlZCwgb3Igd2hlbiBvbmUgaXMgcmVtb3ZlZC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCB0aGUgbG9ja2luZyB0aGF0JiMzOTtzIGluIHBsYWNlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgaW5pdGlhbGl6YXRpb24sIGEgZnVsbC1ibG93biBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiwgb3Igc29tZSBzb3J0IG9mIGdyYWNlZnVsIHRlYXItZG93biBvZiBhbiBleGlzdGluZyBxZGlzYy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBpbnRlcmFjdGluZyB3aXRoIHRoZSBgcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUsIGFzIHRob3NlIGNvbnRhaW4gdGhlIG1ldGhvZHMgYWxsIHFkaXNjcyB1c2UuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIG15c2VsZiB1cCB0byBpZGVudGlmeSBob3cgdGhlIGtlcm5lbCBpbnRlcmZhY2VzIHdpdGggYW5kIG1hbmFnZXMgdGhlIGRpZmZlcmVudCBxdWV1ZWluZyBkaXNjaXBsaW5lcy4gSSYjMzk7bSBrZWVuIHRvIHNwb3QgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHN1YnRsZSBoaW50cyBhYm91dCBob3cgdGhlIEFQSSBoYW5kbGVzIGRpZmZlcmVudCBzY2hlZHVsaW5nIGNsYXNzZXMsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgcWRpc2Mgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgbGlmZWN5Y2xlIGNoYW5nZXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIHNoYXBlcyBuZXR3b3JrIHRyYWZmaWMsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XG4xMzUxOlx0XHRpZiAodGNhW1RDQV9SQVRFXSkge1xuMTM1MjpcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbjEzNTM6XHRcdFx0aWYgKHNjaC1cdTAwM2VmbGFncyBcdTAwMjYgVENRX0ZfTVFST09UKSB7XG4xMzU0Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDYW5ub3QgYXR0YWNoIHJhdGUgZXN0aW1hdG9yIHRvIGEgbXVsdGktcXVldWUgcm9vdCBxZGlzY1wmIzM0Oyk7XG4xMzU1Olx0XHRcdFx0Z290byBlcnJfb3V0NDtcbjEzNTY6XHRcdFx0fVxuMTM1NzpcdFxuMTM1ODpcdFx0XHRlcnIgPSBnZW5fbmV3X2VzdGltYXRvcihcdTAwMjZzY2gtXHUwMDNlYnN0YXRzLFxuMTM1OTpcdFx0XHRcdFx0XHRzY2gtXHUwMDNlY3B1X2JzdGF0cyxcbjEzNjA6XHRcdFx0XHRcdFx0XHUwMDI2c2NoLVx1MDAzZXJhdGVfZXN0LFxuMTM2MTpcdFx0XHRcdFx0XHROVUxMLFxuMTM2MjpcdFx0XHRcdFx0XHR0cnVlLFxuMTM2MzpcdFx0XHRcdFx0XHR0Y2FbVENBX1JBVEVdKTtcbjEzNjQ6XHRcdFx0aWYgKGVycikge1xuMTM2NTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGdlbmVyYXRlIG5ldyBlc3RpbWF0b3JcJiMzNDspO1xuMTM2NjpcdFx0XHRcdGdvdG8gZXJyX291dDQ7XG4xMzY3Olx0XHRcdH1cbjEzNjg6XHRcdH1cbjEzNjk6XHRcbjEzNzA6XHRcdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xuMTM3MTpcdFx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xuMTM3MjpcdFxuMTM3MzpcdFx0cmV0dXJuIHNjaDtcbjEzNzQ6XHRcbjEzNzU6XHRlcnJfb3V0NDpcbjEzNzY6XHRcdC8qIEV2ZW4gaWYgb3BzLVx1MDAzZWluaXQoKSBmYWlsZWQsIHdlIGNhbGwgb3BzLVx1MDAzZWRlc3Ryb3koKVxuMTM3NzpcdFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxuMTM3ODpcdFx0ICovXG4xMzc5Olx0XHRpZiAob3BzLVx1MDAzZWRlc3Ryb3kpXG4xMzgwOlx0XHRcdG9wcy1cdTAwM2VkZXN0cm95KHNjaCk7XG4xMzgxOlx0XHRxZGlzY19wdXRfc3RhYihydG5sX2RlcmVmZXJlbmNlKHNjaC1cdTAwM2VzdGFiKSk7XG4xMzgyOlx0ZXJyX291dDM6XG4xMzgzOlx0XHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XG4xMzg0Olx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2c2NoLVx1MDAzZWRldl90cmFja2VyKTtcbjEzODU6XHRcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XG4xMzg2Olx0ZXJyX291dDI6XG4xMzg3Olx0XHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cdTAwM2Vvd25lcik7XG4xMzg4Olx0ZXJyX291dDpcbjEzODk6XHRcdCplcnJwID0gZXJyO1xuMTM5MDpcdFx0cmV0dXJuIE5VTEw7XG4xMzkxOlx0fVxuMTM5MjpcdFxuMTM5MzpcdHN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuMTM5NDpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjEzOTU6XHR7XG4xMzk2Olx0XHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqb3N0YWIsICpzdGFiID0gTlVMTDtcbjEzOTc6XHRcdGludCBlcnIgPSAwO1xuMTM5ODpcdFxuMTM5OTpcdFx0aWYgKHRjYVtUQ0FfT1BUSU9OU10pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUWRpc2MgRnJlZWluZyBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBxZGlzY19jcmVhdGVgLCBhbmQgdGhlIHVzZSBvZiBgcWRpc2NfZnJlZV9yY3VgIGluc3RlYWQgb2YgdGhlIG1vcmUgc3RhbmRhcmQgYHFkaXNjX2ZyZWVgIHJhaXNlcyBhIGZsYWcuIFdoeSB0aGUgUkNVLWJhc2VkIGZyZWVpbmc/IFRoZSBrZXkgaXMgbGlrZWx5IHRoYXQgc29tZXRoaW5nLCBlaXRoZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uIChgb3BzLSZndDtpbml0KClgLCBgb3BzLSZndDtkZXN0cm95KClgLCBvciBzaW1pbGFyKSwgbWlnaHQgYmUgcHVibGlzaGluZyB0aGUgYHNjaGAgc3RydWN0dXJlLiBUaGlzIGNvdWxkIGJlIGRpcmVjdCBhY2Nlc3MsIFJDVSByZWFkIGFjY2VzcywgcGVyaGFwcyBldmVuIGlmIGFuIGBvcHMtJmd0O2Rlc3Ryb3lgIGNhbGxiYWNrIHVzZXMgUkNVIGl0c2VsZi4gVGhlIHByZXNlbmNlIG9mIGBtaW5pX3FkaXNjYCBvciBmaWx0ZXJzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoaXMgbGlrZWxpaG9vZC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHVzaW5nIFJDVSBmb3IgZnJlZWluZyBpcyBhIGRpcmVjdCBtZWFzdXJlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgcHJpbWFyeSBjb25jZXJucyBhcmUgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChLTVNBTikgb3IgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBLQVNBTi1kZXRlY3RhYmxlIHByb2JsZW1zIGxpa2UgVUFGLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrOgoKKiAgIERvZXMgdGhpcyBwYXRjaCB0b3VjaCBrZXJuZWwgc3RydWN0dXJlcyBjb21tdW5pY2F0ZWQgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB3aGVyZSBmaWVsZHMgb3IgcGFkZGluZyBtaWdodCBiZSB1bmluaXRpYWxpemVkPyBOb3BlLgoqICAgRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBhdCBhbGwuCiogICBEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkIHJlYWRzPyBObywgaXQgZG9lc24mIzM5O3Qgc2VlbSB0aGF0IHdheS4KKiAgIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcyBvciByZWxhdGVkIGxvZ2ljIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpbiBzdXJyb3VuZGluZyBjb2RlPyBOby4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSAqaXMqIGFib3V0IG1lbW9yeSBsaWZlY3ljbGUsIHNwZWNpZmljYWxseSBlbnN1cmluZyBhc3luY2hyb25vdXMgZnJlZWluZyB2aWEgUkNVIChgY2FsbF9yY3VgKSBpbnN0ZWFkIG9mIGEgc3luY2hyb25vdXMgYGtmcmVlYCwgd2hpY2ggZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBVQUYgcG90ZW50aWFsIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgoKU28sIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBhYm91dCBVQUYgcHJvdGVjdGlvbi4gS0FTQU4gaXMgdGhlIHJlbGV2YW50IHRvb2wgaGVyZSwgYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIHdvdWxkIGFsc28gY2F0Y2ggc3VjaCBwcm9ibGVtcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gTXkgY29uY2x1c2lvbjogdGhpcyBhcHBlYXJzIHRvIGJlIGEgd2VsbC1jb25zaWRlcmVkIGFuZCBjb3JyZWN0IGFwcHJvYWNoLiBOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgYWxsIHRoZSBjYWxsIHNpdGVzIG9mICpib3RoKiBgcWRpc2NfZnJlZWAgYW5kIGBxZGlzY19mcmVlX3JjdWAgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxZGlzY19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmM9MzIwPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jOjMyMTpuZnBfYWJtX3FkaXNjX2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IG5mcF9hYm1fbGluayAqYWxpbmssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jLTMyMi1cdFx0ICAgc3RydWN0IG5mcF9xZGlzYyAqcWRpc2MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9hYm0vcWRpc2MuYz00MDQ9bmZwX2FibV9xZGlzY19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBuZnBfYWJtX2xpbmsgKmFsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmMtNDE3LVx0bmZwX2FibV9xZGlzY191bmxpbmtfY2hpbGRyZW4ocWRpc2MsIDAsIHFkaXNjLVx1MDAzZW51bV9jaGlsZHJlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jOjQxODpcdG5mcF9hYm1fcWRpc2NfZnJlZShuZXRkZXYsIGFsaW5rLCBxZGlzYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jLTQxOS1cbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTc5Mz1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5NS1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjc5Njp2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC03OTctc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMjcxPXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4NC1cdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzg1Olx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4Ni1lcnJfb3V0Mjpcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMDg3PUVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA4OC1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEwODk6c3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDkwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAwLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEwMTp2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAyLXtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMDM6XHRjYWxsX3JjdShcdTAwMjZxZGlzYy1cdTAwM2VyY3UsIHFkaXNjX2ZyZWVfY2IpO1xubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEwNC19XG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTEwNj1zdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTI5LVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEzMDpcdHFkaXNjX2ZyZWVfcmN1KHFkaXNjKTtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDgyCgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFFkaXNjIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IGNsZWFuLWN1dC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZXJyb3JzIGR1cmluZyBgcWRpc2NfY3JlYXRlYC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSBga2ZyZWVgJiMzOTtpbmcgdGhlIGBzdHJ1Y3QgUWRpc2NgIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcsIGl0JiMzOTtzIHN3aXRjaGluZyB0byBhIGRlbGF5ZWQsIFJDVS1iYXNlZCBmcmVlaW5nIHByb2Nlc3MgdXNpbmcgYGNhbGxfcmN1YC4gVGhpcyBjbGVhcmx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIHJhdGlvbmFsZSBpcyBzb2xpZCDigJMgUkNVIHJlYWRlcnMgbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIFFkaXNjLCBzbyBzeW5jaHJvbm91cyBmcmVlaW5nIHdvdWxkIGJlIGEgYmFkIG1vdmUuCgpOb3csIGJlY2F1c2UgS0FTQU4gaXMgdGhlIG9uZSB0aGF0IGNhdWdodCB0aGUgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsaWZldGltZSBwcm9ibGVtLCBhbmQgZnJvbSB0aGUgc291bmRzIG9mIGl0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIEkmIzM5O20gdGhpbmtpbmcgd2UgY2FuIHNhZmVseSBtYXJrIGBOZWVkc0tNU0FOYCBhcyBmYWxzZSBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXG5cblRoZXNlIG1lbW9yeSBsaWZldGltZSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBmYWxsIGVudGlyZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gKHdoaWNoIGRldGVjdHMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIFJDVS9sb2NrIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCB1c2VyLXNwYWNlIGluZm8tbGVha3MsIG9yIGFsdGVyIGRhdGEgYnVmZmVyIHBhcnNpbmcvbGVuZ3Rocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXG5cblRoZXNlIG1lbW9yeSBsaWZldGltZSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBmYWxsIGVudGlyZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gKHdoaWNoIGRldGVjdHMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYW5kIFJDVS9sb2NrIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCB1c2VyLXNwYWNlIGluZm8tbGVha3MsIG9yIGFsdGVyIGRhdGEgYnVmZmVyIHBhcnNpbmcvbGVuZ3Rocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToxNi45NTcwMjY3MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQwNzQ1MDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxZGlzY19mcmVlX3JjdVwiLFxuICAgIFwicWRpc2NfZnJlZV9jYlwiLFxuICAgIFwicWRpc2NfY3JlYXRlXCIsXG4gICAgXCJfX3FkaXNjX2Rlc3Ryb3lcIixcbiAgICBcInRjX21vZGlmeV9xZGlzY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGZyZWVpbmcgb2Ygc3RydWN0IFFkaXNjIG9uIHRoZSBlcnJvciB1bndpbmRpbmcgcGF0aCBvZiBxZGlzY19jcmVhdGUoKSBmcm9tIGltbWVkaWF0ZSBzeW5jaHJvbm91cyBmcmVlaW5nIHRvIGRlZmVycmVkIFJDVSBmcmVlaW5nIHZpYSBjYWxsX3JjdSAocWRpc2NfZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIG9iamVjdCBsaWZldGltZSBhbmQgY2xlYW51cCBzZW1hbnRpY3MgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsZXIgKG5ldC9zY2hlZCkgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBUQyBjb21tYW5kcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGR1cmluZyBxZGlzYyBjcmVhdGlvbiBmYWlsdXJlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToxNi45NTcwMzEwNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mzk0MTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYzZWE1MTVhNWYxN2UyMjhiYWI0ZGJhNWM4MjAxYzk1NDAwYmI3NzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxMTo1OToxNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxcbmluZGV4IGNiYzI0ODc3NjUxMTguLmYzNWJkMDZhNmJhZDYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcXG5AQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgcWRpc2Nfb2ZmbG9hZF9xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7XFxuK3ZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYyk7XFxuIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbiBcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsIHUzMiBwYXJlbnRpZCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcXG5pbmRleCA2NWIzNTUyOGQxMjVmLi43OTVhY2NkMWJiMzNkIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXFxuQEAgLTEzODIsNyArMTM4Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBlcnJfb3V0MzpcXG4gXFx0cWRpc2NfbG9ja191bmluaXQoc2NoLCBvcHMpO1xcbiBcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbi1cXHRxZGlzY19mcmVlKHNjaCk7XFxuK1xcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XFxuIGVycl9vdXQyOlxcbiBcXHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cXHUwMDNlb3duZXIpO1xcbiBlcnJfb3V0OlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXFxuaW5kZXggZWYyYjRiZjUxNTY0MS4uNzE2MzBiNzk1ZjlkNiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXFxuQEAgLTEwODYsMjEgKzEwODYsMjEgQEAgdm9pZCBxZGlzY19yZXNldChzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpO1xcbiBcXG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuK3N0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiB7XFxuLVxcdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocWRpc2MpKSB7XFxuLVxcdFxcdGZyZWVfcGVyY3B1KHFkaXNjLVxcdTAwM2VjcHVfYnN0YXRzKTtcXG4tXFx0XFx0ZnJlZV9wZXJjcHUocWRpc2MtXFx1MDAzZWNwdV9xc3RhdHMpO1xcbitcXHRzdHJ1Y3QgUWRpc2MgKnEgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IFFkaXNjLCByY3UpO1xcbitcXG4rXFx0aWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxKSkge1xcbitcXHRcXHRmcmVlX3BlcmNwdShxLVxcdTAwM2VjcHVfYnN0YXRzKTtcXG4rXFx0XFx0ZnJlZV9wZXJjcHUocS1cXHUwMDNlY3B1X3FzdGF0cyk7XFxuIFxcdH1cXG4gXFxuLVxcdGtmcmVlKHFkaXNjKTtcXG4rXFx0a2ZyZWUocSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbit2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuIHtcXG4tXFx0c3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTtcXG4tXFxuLVxcdHFkaXNjX2ZyZWUocSk7XFxuK1xcdGNhbGxfcmN1KFxcdTAwMjZxZGlzYy1cXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuQEAgLTExMjcsNyArMTEyNyw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbiBcXG4gXFx0dHJhY2VfcWRpc2NfZGVzdHJveShxZGlzYyk7XFxuIFxcbi1cXHRjYWxsX3JjdShcXHUwMDI2cWRpc2MtXFx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XFxuK1xcdHFkaXNjX2ZyZWVfcmN1KHFkaXNjKTtcXG4gfVxcbiBcXG4gdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjE3LjQxMTYyMzM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA3MjQ0NjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJxZGlzY19mcmVlX3JjdVwiLFxuICAgIFwicWRpc2NfZnJlZV9jYlwiLFxuICAgIFwicWRpc2NfY3JlYXRlXCIsXG4gICAgXCJfX3FkaXNjX2Rlc3Ryb3lcIixcbiAgICBcInRjX21vZGlmeV9xZGlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBmcmVlaW5nIG9mIHN0cnVjdCBRZGlzYyBvbiB0aGUgZXJyb3IgdW53aW5kaW5nIHBhdGggb2YgcWRpc2NfY3JlYXRlKCkgZnJvbSBpbW1lZGlhdGUgc3luY2hyb25vdXMgZnJlZWluZyB0byBkZWZlcnJlZCBSQ1UgZnJlZWluZyB2aWEgY2FsbF9yY3UgKHFkaXNjX2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyBvYmplY3QgbGlmZXRpbWUgYW5kIGNsZWFudXAgc2VtYW50aWNzIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGVyIChuZXQvc2NoZWQpIHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgVEMgY29tbWFuZHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcWRpc2MgY3JlYXRpb24gZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2M2VhNTE1YTVmMTdlMjI4YmFiNGRiYTVjODIwMWM5NTQwMGJiNzc3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMTo1OToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oXG5pbmRleCBjYmMyNDg3NzY1MTE4Li5mMzViZDA2YTZiYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuQEAgLTc5Myw3ICs3OTMsNyBAQCB2b2lkIHFkaXNjX29mZmxvYWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0cnVjdCBRZGlzYyAqcWRpc2NfYWxsb2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IFFkaXNjX29wcyAqb3BzLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi12b2lkIHFkaXNjX2ZyZWUoc3RydWN0IFFkaXNjICpxZGlzYyk7XG4rdm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTtcbiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywgdTMyIHBhcmVudGlkLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuaW5kZXggNjViMzU1MjhkMTI1Zi4uNzk1YWNjZDFiYjMzZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbkBAIC0xMzgyLDcgKzEzODIsNyBAQCBzdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBlcnJfb3V0MzpcbiBcdHFkaXNjX2xvY2tfdW5pbml0KHNjaCwgb3BzKTtcbiBcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZzY2gtXHUwMDNlZGV2X3RyYWNrZXIpO1xuLVx0cWRpc2NfZnJlZShzY2gpO1xuK1x0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcbiBlcnJfb3V0MjpcbiBcdGJwZl9tb2R1bGVfcHV0KG9wcywgb3BzLVx1MDAzZW93bmVyKTtcbiBlcnJfb3V0OlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbmluZGV4IGVmMmI0YmY1MTU2NDEuLjcxNjMwYjc5NWY5ZDYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbkBAIC0xMDg2LDIxICsxMDg2LDIxIEBAIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYylcbiB9XG4gRVhQT1JUX1NZTUJPTChxZGlzY19yZXNldCk7XG4gXG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4rc3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0aWYgKHFkaXNjX2lzX3BlcmNwdV9zdGF0cyhxZGlzYykpIHtcbi1cdFx0ZnJlZV9wZXJjcHUocWRpc2MtXHUwMDNlY3B1X2JzdGF0cyk7XG4tXHRcdGZyZWVfcGVyY3B1KHFkaXNjLVx1MDAzZWNwdV9xc3RhdHMpO1xuK1x0c3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTtcbitcbitcdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocSkpIHtcbitcdFx0ZnJlZV9wZXJjcHUocS1cdTAwM2VjcHVfYnN0YXRzKTtcbitcdFx0ZnJlZV9wZXJjcHUocS1cdTAwM2VjcHVfcXN0YXRzKTtcbiBcdH1cbiBcbi1cdGtmcmVlKHFkaXNjKTtcbitcdGtmcmVlKHEpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBxZGlzY19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbit2b2lkIHFkaXNjX2ZyZWVfcmN1KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4ge1xuLVx0c3RydWN0IFFkaXNjICpxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBRZGlzYywgcmN1KTtcbi1cbi1cdHFkaXNjX2ZyZWUocSk7XG4rXHRjYWxsX3JjdShcdTAwMjZxZGlzYy1cdTAwM2VyY3UsIHFkaXNjX2ZyZWVfY2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbkBAIC0xMTI3LDcgKzExMjcsNyBAQCBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcbiBcbiBcdHRyYWNlX3FkaXNjX2Rlc3Ryb3kocWRpc2MpO1xuIFxuLVx0Y2FsbF9yY3UoXHUwMDI2cWRpc2MtXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcbitcdHFkaXNjX2ZyZWVfcmN1KHFkaXNjKTtcbiB9XG4gXG4gdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToxNy40MTE2MjQ2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjQzNjQ2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRdWV1ZWluZyBEaXNjaXBsaW5lIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYsIGFuZCB0aGUgbWFpbiB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc2hpZnQgZnJvbSBgcWRpc2NfZnJlZWAgdG8gYHFkaXNjX2ZyZWVfcmN1YC4gU2VlbXMgbGlrZSB3ZSdyZSBtb3ZpbmcgdG93YXJkcyB1c2luZyBhbiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGNhbGxiYWNrIGZvciBmcmVlaW5nIHF1ZXVlaW5nIGRpc2NpcGxpbmVzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGVyZSdzIGFuIGVycm9yIGR1cmluZyB0aGUgYHFkaXNjX2NyZWF0ZWAgcHJvY2Vzcy4gVGhpcyBpcyBnb29kLCBJIGFsd2F5cyBsaWtlIHRvIHNlZSBtb3JlIFJDVSB1c2FnZSB3aGVyZSBpdCBtYWtlcyBzZW5zZSwgcmVkdWNlcyBsb2NrIGNvbnRlbnRpb24gYW5kIGltcHJvdmVzIGNvbmN1cnJlbmN5LCBhbmQgaXMgY29tbW9uIGJlc3QgcHJhY3RpY2UgaW4gdGhpcyBhcmVhLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYWZmZWN0IGNvZGUgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCB3aGVyZSBgcWRpc2NfY3JlYXRlYCBpcywgc28gdGhlIGltcGFjdCBpcyBpbiB0aGUgY29yZSBBUEkuIFRoZSBvdGhlciBhcmVhIGFmZmVjdGVkIHNlZW1zIHRvIGJlIGBuZXQvc2NoZWQvc2NoX2dlbmVyaWMuY2AsIHdoaWNoIGxpa2VseSBpbnZvbHZlcyByZWZhY3RvcmluZyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLCBzbyBgcWRpc2NfZnJlZV9jYmAgYW5kIGBxZGlzY19mcmVlX3JjdWAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBzb21lIG9mIG15IHRvb2xzIHRvIGRpZyBpbi4gSSBzaG91bGQgY2hlY2sgYm90aCBvZiB0aG9zZSBmaWxlcyBjYXJlZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OToyNC43MzU5OTE1MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNzQxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz0xMjcxPXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg0LVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2c2NoLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzg1OlxcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzg2LWVycl9vdXQyOlxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTA4Nz1FWFBPUlRfU1lNQk9MKHFkaXNjX3Jlc2V0KTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMDg4LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEwODk6c3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA5MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAwLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMDE6dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDIte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMDM6XFx0Y2FsbF9yY3UoXFx1MDAyNnFkaXNjLVxcdTAwM2VyY3UsIHFkaXNjX2ZyZWVfY2IpO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMDQtfVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTEwNj1zdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMjktXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTEzMDpcXHRxZGlzY19mcmVlX3JjdShxZGlzYyk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEzMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjI0Ljc4NTI3MjE2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NjE5NDQyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFFkaXNjIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgcWRpc2NfY3JlYXRlYCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBjcmVhdGluZyB0cmFmZmljIGNvbnRyb2wgZGlzY2lwbGluZXMgbGl2ZXMsIG9idmlvdXNseS4gSSdtIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gaG93IGEgbmV3IHFkaXNjIGlzIHJlZ2lzdGVyZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSB3aG9sZSBpbnN0YW50aWF0aW9uIHByb2Nlc3MuIEknbSBndWVzc2luZyB0aGVyZSdzIGEgdGFibGUgb2YgcmVnaXN0ZXJlZCBxZGlzYyB0eXBlcywgbWF5YmUgdXNpbmcgc29tZXRoaW5nIGxpa2UgYSBgc3RydWN0IGxpc3RfaGVhZGAsIGFuZCBgcWRpc2NfY3JlYXRlYCBpdGVyYXRlcyB0aHJvdWdoIHRoYXQgdG8gZmluZCB0aGUgcmlnaHQgZmFjdG9yeSBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuSeKAmW0gYWxzbyBhc3N1bWluZyB0aGVyZSBtaWdodCBiZSBzb21lIGtpbmQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhlIHFkaXNjIGNhbiBiZSB1c2VkIGJ5IG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcyBvciB0cmFmZmljIGZsb3dzIHNpbXVsdGFuZW91c2x5LiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBoYW5kbGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgY2F1c2UgaXNzdWVzIHdpdGgsIHNheSwgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHFkaXNjJ3MgcHJpdmF0ZSBkYXRhLlxuXG5GdXJ0aGVybW9yZSwgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgdG8gYmUgcHJlc2VudC4gSSBpbWFnaW5lIGl0IHNob3VsZCBkZWFsIHdpdGggY2FzZXMgbGlrZSBhIG1pc3Npbmcgb3IgaW52YWxpZCBxZGlzYyB0eXBlLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBwcm9ibGVtcyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN0YWJpbGl0eSBhbmQgSSdsbCBiZSBjaGVja2luZyB0byBzZWUgd2hhdCB0aGUgdHlwaWNhbCBmYWlsdXJlIG1vZGVzIGFyZSwgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdXNlcyBvZiBga21hbGxvY2AsIGBrZnJlZWAsIG9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCByZWZlcmVuY2UgY291bnRpbmcuIEFueSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3b3VsZCBiZSBkaXNhc3Ryb3VzIGluIHRoaXMgYXJlYS5cblxuRmluYWxseSwgSSdsbCBiZSBmb2N1c2luZyBvbiBob3cgdGhlIHFkaXNj4oCZcyBwcml2YXRlIGRhdGEgaXMgbWFuYWdlZCwgYW5kIGhvdyBpdHMgbGlmZXRpbWUgaXMgdGllZCB0byB0aGUgbmV0IGRldmljZSBvciB0cmFmZmljIGZsb3cuIEkgaG9wZSB0aGVyZSdzIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBnZW5lcmljIHFkaXNjIGNvcmUgYW5kIHRoZSBzcGVjaWZpYyBxZGlzYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgSFRCLCBUQkYsIGV0Yy4pLCB3aGljaCBzaG91bGQgbWFrZSB0aGUgY29kZSBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gbWFpbnRhaW4uIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjI4LjI0NzIyMDcyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRpZiAodGNhW1RDQV9SQVRFXSkge1xcbjEzNTI6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMTM1MzpcXHRcXHRcXHRpZiAoc2NoLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUV9GX01RUk9PVCkge1xcbjEzNTQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IGF0dGFjaCByYXRlIGVzdGltYXRvciB0byBhIG11bHRpLXF1ZXVlIHJvb3QgcWRpc2NcXFwiKTtcXG4xMzU1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDQ7XFxuMTM1NjpcXHRcXHRcXHR9XFxuMTM1NzpcXHRcXG4xMzU4OlxcdFxcdFxcdGVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKFxcdTAwMjZzY2gtXFx1MDAzZWJzdGF0cyxcXG4xMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlY3B1X2JzdGF0cyxcXG4xMzYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzY2gtXFx1MDAzZXJhdGVfZXN0LFxcbjEzNjE6XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCxcXG4xMzYyOlxcdFxcdFxcdFxcdFxcdFxcdHRydWUsXFxuMTM2MzpcXHRcXHRcXHRcXHRcXHRcXHR0Y2FbVENBX1JBVEVdKTtcXG4xMzY0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xMzY1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBnZW5lcmF0ZSBuZXcgZXN0aW1hdG9yXFxcIik7XFxuMTM2NjpcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ0O1xcbjEzNjc6XFx0XFx0XFx0fVxcbjEzNjg6XFx0XFx0fVxcbjEzNjk6XFx0XFxuMTM3MDpcXHRcXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcXG4xMzcxOlxcdFxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcXG4xMzcyOlxcdFxcbjEzNzM6XFx0XFx0cmV0dXJuIHNjaDtcXG4xMzc0OlxcdFxcbjEzNzU6XFx0ZXJyX291dDQ6XFxuMTM3NjpcXHRcXHQvKiBFdmVuIGlmIG9wcy1cXHUwMDNlaW5pdCgpIGZhaWxlZCwgd2UgY2FsbCBvcHMtXFx1MDAzZWRlc3Ryb3koKVxcbjEzNzc6XFx0XFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxcbjEzNzg6XFx0XFx0ICovXFxuMTM3OTpcXHRcXHRpZiAob3BzLVxcdTAwM2VkZXN0cm95KVxcbjEzODA6XFx0XFx0XFx0b3BzLVxcdTAwM2VkZXN0cm95KHNjaCk7XFxuMTM4MTpcXHRcXHRxZGlzY19wdXRfc3RhYihydG5sX2RlcmVmZXJlbmNlKHNjaC1cXHUwMDNlc3RhYikpO1xcbjEzODI6XFx0ZXJyX291dDM6XFxuMTM4MzpcXHRcXHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XFxuMTM4NDpcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbjEzODU6XFx0XFx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcXG4xMzg2OlxcdGVycl9vdXQyOlxcbjEzODc6XFx0XFx0YnBmX21vZHVsZV9wdXQob3BzLCBvcHMtXFx1MDAzZW93bmVyKTtcXG4xMzg4OlxcdGVycl9vdXQ6XFxuMTM4OTpcXHRcXHQqZXJycCA9IGVycjtcXG4xMzkwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4xMzk0OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpvc3RhYiwgKnN0YWIgPSBOVUxMO1xcbjEzOTc6XFx0XFx0aW50IGVyciA9IDA7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdGlmICh0Y2FbVENBX09QVElPTlNdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjI4LjI0NzM0NTE5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMDE4OTQ0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IG9mIGBxZGlzY19jcmVhdGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHFkaXNjX2NyZWF0ZWAg4oCTIHRoYXQncyBkZWZpbml0ZWx5IGEgY29yZSBwaWVjZSBvZiB0aGUgTGludXggbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wsIG9yIHFkaXNjLCBzdWJzeXN0ZW0uIEl0J3MgaGFuZ2luZyBvdXQgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGNvZGUgaXMuIEkga25vdyBpdCdzIHRyaWdnZXJlZCB2aWEgbmV0bGluaywgc3BlY2lmaWNhbGx5IGBSVE1fTkVXUURJU0NgIG1lc3NhZ2VzLCB3aGljaCB3b3VsZCBiZSBob3cgYHRjIHFkaXNjIGFkZC4uLmAgY2FsbHMgaW50byBpdC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogQ2FuIEkgYWN0dWFsbHkgKmhpdCogdGhpcyBmdW5jdGlvbmFsaXR5PyBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgbmV0d29ya2luZyBzY2hlZHVsaW5nLCBhbmQgVHJhZmZpYyBDb250cm9sIGluIGdlbmVyYWwsIGFyZSB3ZWxsLWVzdGFibGlzaGVkLCBzbyB0aGF0IHNlZW1zIGxpa2VseS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUncyBleGlzdGluZyBmdXp6aW5nLiBBaGEhIFN5emthbGxlciBoYXMgYmVlbiBoaXR0aW5nIG5ldGxpbmsgc29ja2V0cyBoYXJkLCBhbmQgdGhhdCBpbmNsdWRlcyB0aGlzIGFyZWEuIFNvLCB0aGF0J3MgYSBnb29kIHNpZ24uIFRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBJJ2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBuZXQvc2NoZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBhcHBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjM0LjQ0OTI0MzIxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk5ODQxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NoX2FwaS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9TQ0hFRClcXHRcXHQrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTozNC43MjkyMzE5MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY1MTQ2NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBLY29uZmlnYCBmb3IgYENPTkZJR19ORVRfU0NIRURgOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgc2NoZWR1bGluZy4gTGV0J3MgZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBgQ09ORklHX05FVF9TQ0hFRGAgb3B0aW9uLiBJdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc3dpdGNoLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIG5ldHdvcmsgc2NoZWR1bGluZyBmZWF0dXJlIHNldC4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGl0cyBkZXBlbmRlbmNpZXMsIHdoYXQgZGVmYXVsdCB2YWx1ZSBpcyBhc3NpZ25lZCwgYW5kIGFueSByZWxldmFudCBoZWxwIHRleHQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIG9mIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6MzYuOTk0MzgxNTEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc3NDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjM3LjA0MDE2MjM3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU5MDI4MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIG1ldGljdWxvdXNseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBORVRfU0NIRURgLiBUaGlzIGltcGxpZXMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JrIHNjaGVkdWxlciBpbnRlcmFjdHMgd2l0aCBvdGhlciBjcnVjaWFsIGNvbXBvbmVudHMuIFdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gd2hlcmUgc2NoZWR1bGluZyBjaG9pY2VzIGhlYXZpbHkgaW1wYWN0IHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUga2VybmVsIGludGVyZmFjZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZmVlZCBpbnRvIGFuZCByZWx5IHVwb24gdGhlIHNjaGVkdWxlci4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgUW9TLCB0cmFmZmljIHNoYXBpbmcsIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgc3BlY2lmaWMgY29udGV4dCB3aWxsIGRyaXZlIG15IGludmVzdGlnYXRpb24uIFRoZSBkZXBlbmRlbmNpZXMgc2hvdWxkIGJlIHJldmlld2VkLCBhbmQgZWFjaCBpbXBhY3QgYXNzZXNzZWQgYW5kIHByaW9yaXRpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6MzguNzk5MTkzMzA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xcbiAgMTE6XFx0XFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXFxuICAxMjpcXHRcXHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXFxuICAxMzpcXHRcXHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xcbiAgMTQ6XFx0XFx0ICBcXFwiZmFpcmx5XFxcIiBoYXZlIGJlZW4gcHJvcG9zZWQuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcXG4gIDE3OlxcdFxcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXFxuICAxOTpcXHRcXHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXFxuICAyMDpcXHRcXHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxcbiAgMjE6XFx0XFx0ICBuZWVkIGEgY2VydGFpbiBtaW5pbXVtIGRhdGEgZmxvdyByYXRlLCBvciBpZiB5b3UgbmVlZCB0byBsaW1pdCB0aGVcXG4gIDIyOlxcdFxcdCAgbWF4aW11bSBkYXRhIGZsb3cgcmF0ZSBmb3IgdHJhZmZpYyB3aGljaCBtYXRjaGVzIHNwZWNpZmllZCBjcml0ZXJpYS5cXG4gIDIzOlxcdFxcdCAgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZXhwZXJpbWVudGFsLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIFRvIGFkbWluaXN0ZXIgdGhlc2Ugc2NoZWR1bGVycywgeW91J2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXFxuICAyNjpcXHRcXHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTIrdGMgYXRcXG4gIDI3OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cXHUwMDNlLiAgVGhhdCBwYWNrYWdlXFxuICAyODpcXHRcXHQgIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0XFxuICAyOTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXFx1MDAzZS5cXG4gIDMwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTozOC43OTkyNzI5OTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwMTQ2OTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgQnVpbGQgQXJ0aWZhY3RzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIG9yaWdpbiBvZiBgc2NoX2dlbmVyaWMub2AuIEknbSBzdGFydGluZyB0byBzdXNwZWN0IHRoZXJlJ3MgYSBwcm9ibGVtIHNvbWV3aGVyZSBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gQmVzdCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBidWlsZCBwYXRoIG9mIHRoaXMgb2JqZWN0IGZpbGUuIElzIGl0IHB1bGxpbmcgZnJvbSB0aGUgY29ycmVjdCBzb3VyY2VzLCBvciBoYXMgc29tZSBtaXNjb25maWd1cmF0aW9uIG9yIHN0YWxlIGZpbGUgY3JlcHQgaW50byB0aGUgbWl4PyBUaGUgZGVwZW5kZW5jeSBncmFwaCBmb3IgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBwcmV0dHkgY29tcGxleCwgc28gSSBjYW4ndCBqdXN0IGFzc3VtZSBhbnl0aGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB3aGVyZSB0aGUgY29tcGlsZXIgaXMgc3BpdHRpbmcgb3V0IHRoaXMgb2JqZWN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0J3MgZ29pbmcgb24uIEtub3dpbmcgdGhlIGJ1aWxkIHBhdGggd2lsbCBsZXQgbWUgdHJhY2UgaXQgYmFjayB0aHJvdWdoIHRoZSBNYWtlZmlsZXMgb3IgYnVpbGQgc2NyaXB0cywgYW5kIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNvdXJjZSBjb2RlIHRoYXQgZ2VuZXJhdGVkIGl0LiBGcm9tIHRoZXJlLCBJIGNhbiBpbnNwZWN0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaW52b2x2ZWQsIGFuZCBob3BlZnVsbHkgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGlzc3VlLiBUaW1lIHRvIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0MS4xMDA3NDQ4NTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjk4MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjaF9nZW5lcmljLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9NYWtlZmlsZS01LVxcbm5ldC9zY2hlZC9NYWtlZmlsZTo2Om9iai15XFx0Oj0gc2NoX2dlbmVyaWMubyBzY2hfbXEub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0MS4xNzI0NDc5MTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjYyNTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHRyYWZmaWMgY29udHJvbCBzZXR1cCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGBORVRfU0NIRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyB0aGF0J3MgdGhlIGJpZyBvbmUsIHJpZ2h0PyBUaGUgY29yZSBjb250cm9sIHN3aXRjaCBmb3IgdGhlIHFkaXNjIEFQSS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aG9zZSBkaXJlY3RseSB0aWVkIGludG8gcWRpc2MgbWFuaXB1bGF0aW9uLiBJIGtub3cgSSdsbCBiZSBsb29raW5nIGF0OlxuXG4qICAgYHFkaXNjX2ZyZWVfcmN1YFxuKiAgIGBxZGlzY19jcmVhdGVgXG4qICAgYF9fcWRpc2NfZGVzdHJveWBcbiogICBgcWRpc2NfZnJlZV9jYmBcbiogICBBbmQgb2YgY291cnNlLCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMsIGB0Y19tb2RpZnlfcWRpc2NgIGFuZCBgdGNfZ2V0X3FkaXNjYC4gVGhleSdyZSB0aGUgZnJvbnQgZG9vcnMgaGVyZS5cblxuTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgdGNfbW9kaWZ5X3FkaXNjYC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgcWRpc2MncyBhcmUgbW9kaWZpZWQgaXMga2V5IGhlcmUuIEFuZCBzaW5jZSBgcWRpc2NfY3JlYXRlYCBpcyB0aGUgcG9pbnQgb2YgaW5pdGlhbGl6YXRpb24sIEknbGwgbmVlZCB0byBzZWUgaXRzIGNhbGxlcnMgYXMgd2VsbCwgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gVGltZSB0byBzZWUgaG93IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NDMuNTQ1MDc1NjMzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1MjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxZGlzY19jcmVhdGVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz0xMjMxPXN0YXRpYyBpbnQgcWRpc2NfYmxvY2tfaW5kZXhlc19zZXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Y2EsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEyNzAtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMjcxOnN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3MC1cXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzNzE6XFx0dHJhY2VfcWRpc2NfY3JlYXRlKG9wcywgZGV2LCBwYXJlbnQpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM3Mi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTYwOD1zdGF0aWMgaW50IF9fdGNfbW9kaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc2Mi1cXHRcXHRpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc2MzpcXHRcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NjQtXFx0XFx0XFx0XFx0XFx0IHRjbS1cXHUwMDNldGNtX3BhcmVudCwgdGNtLVxcdTAwM2V0Y21fcGFyZW50LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzc5LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTc4MDpcXHRcXHRxID0gcWRpc2NfY3JlYXRlKGRldiwgZGV2X3F1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc4MS1cXHRcXHRcXHRcXHQgdGNtLVxcdTAwM2V0Y21fcGFyZW50LCB0Y20tXFx1MDAzZXRjbV9oYW5kbGUsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMDQxPXN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA2MC1cXHRpZiAoIW9wcy1cXHUwMDNlaW5pdCB8fCBvcHMtXFx1MDAzZWluaXQoc2NoLCBOVUxMLCBleHRhY2spID09IDApIHtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMDYxOlxcdFxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldl9xdWV1ZS1cXHUwMDNlZGV2LCBwYXJlbnRpZCk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA2Mi1cXHRcXHRyZXR1cm4gc2NoO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDMyPXN0YXRpYyB2b2lkIHRhcHJpb19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDQxLVxcdC8qIE5vdGUgdGhhdCB0YXByaW9fcmVzZXQoKSBtaWdodCBub3QgYmUgY2FsbGVkIGlmIGFuIGVycm9yXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDQyOlxcdCAqIGhhcHBlbnMgaW4gcWRpc2NfY3JlYXRlKCksIGFmdGVyIHRhcHJpb19pbml0KCkgaGFzIGJlZW4gY2FsbGVkLlxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA0My1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NDMuNTkyMjM0MDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4MTQ5MTQ1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBUcmFmZmljIENvbnRyb2wgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRob3NlIGhhbmRsaW5nIHF1ZXVlIGRpc2NpcGxpbmUgKGBxZGlzY2ApIG1vZGlmaWNhdGlvbnMgYW5kIGNyZWF0aW9uLCBhbmQgZGVzdHJ1Y3Rpb24uIEknbSBmb2N1c2luZyBvbiBob3cgYHFkaXNjYCBvYmplY3RzIGFyZSBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaW4gZXJyb3Igc2NlbmFyaW9zLiBgdGNfbW9kaWZ5X3FkaXNjYCwgb3IgZnVuY3Rpb25zIGxpa2UgYHRjX25ld190ZmlsdGVyYCwgdWx0aW1hdGVseSBjYWxsIGBfX3RjX21vZGlmeV9xZGlzY2AsIHdoaWNoIGlzIHRoZSBtYWluIGNhbGxlciBvZiBgcWRpc2NfY3JlYXRlYC4gVGhlcmVmb3JlLCBJJ20gaWRlbnRpZnlpbmcgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciB0aGlzIHBhdGNoLlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlc2UgY29yZSBmdW5jdGlvbnMgYXMgY3J1Y2lhbDogYHFkaXNjX2ZyZWVfcmN1YCwgYHFkaXNjX2ZyZWVfY2JgLCBgcWRpc2NfY3JlYXRlYCwgYF9fcWRpc2NfZGVzdHJveWAsIGFuZCBgdGNfbW9kaWZ5X3FkaXNjYC4gTGV0J3MgY29uZmlybSB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkLCB3aGljaCBzZWVtcyB0byBiZSBgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuXG5cbk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBhcHBlYXJzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgdG91Y2hlcyB0aGUgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCAoYG5ldC9zY2hlZC9gKSBhbmQgbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBgc3RydWN0IFFkaXNjYCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UgKGBjYWxsX3JjdWApIHVwb24gZXJyb3IgaW4gYHFkaXNjX2NyZWF0ZWAuIFRoZSBmYWN0IHRoYXQgaXQncyBlYXNpbHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rIFRDIGNvbW1hbmRzKSBtYWtlcyBpdCBhIHZlcnkgYXR0cmFjdGl2ZSB0YXJnZXQuIEJhc2VkIG9uIHRoZXNlIG9ic2VydmF0aW9ucywgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byB0cnVlLlxuXG5JIGFsc28gbmVlZCB0byBpZGVudGlmeSB3aGljaCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIHRoZSBgTkVUX1NDSEVEYCBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeS5cblxuRmluYWxseSwgSSdsbCBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGJ5IHN1bW1hcml6aW5nIHRoZSBrZXkgZmluZGluZ3MuIFRoaXMgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBgc3RydWN0IFFkaXNjYCBvYmplY3RzLCBjaGFuZ2luZyBlcnJvciBoYW5kbGluZyBkdXJpbmcgYHFkaXNjX2NyZWF0ZWAgZnJvbSBpbW1lZGlhdGUgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcuIFRoaXMgc2hpZnQgYWZmZWN0cyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgZXJyb3IgY2xlYW51cCBpbiB0aGUgY29yZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIHJ0bmV0bGluayAoYFJUTV9ORVdRRElTQ2ApLiBGdXp6aW5nIGlzIGVzc2VudGlhbCB0byBkZXRlY3QgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuTXkgYW5hbHlzaXMgZGljdGF0ZXMgdGhhdDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBbXCJORVRfU0NIRURcIl1cbiogICBgRm9jdXNTeW1ib2xzYDogW1wicWRpc2NfZnJlZV9yY3VcIiwgXCJxZGlzY19mcmVlX2NiXCIsIFwicWRpc2NfY3JlYXRlXCIsIFwiX19xZGlzY19kZXN0cm95XCIsIFwidGNfbW9kaWZ5X3FkaXNjXCJdXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBgc3RydWN0IFFkaXNjYCBtZW1vcnkgZnJlZWluZyB1cG9uIGVycm9yIGR1cmluZyBgcWRpc2NfY3JlYXRlKClgIHRvIGJlIGRlZmVycmVkIHZpYSBSQ1UsIGFmZmVjdGluZyBvYmplY3QgbGlmZWN5Y2xlIGFuZCBlcnJvciBjbGVhbnVwIGluIGBuZXQvc2NoZWRgLiBJdCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBhbmQgdGhlcmVmb3JlIHdvcnRoeSBvZiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDg3LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0OS40MDcxNTE0NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkxNDY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicWRpc2NfZnJlZV9yY3VcIixcbiAgICBcInFkaXNjX2ZyZWVfY2JcIixcbiAgICBcInFkaXNjX2NyZWF0ZVwiLFxuICAgIFwiX19xZGlzY19kZXN0cm95XCIsXG4gICAgXCJ0Y19tb2RpZnlfcWRpc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgZnJlZWluZyBvZiBzdHJ1Y3QgUWRpc2Mgb24gdGhlIGVycm9yIHVud2luZGluZyBwYXRoIG9mIHFkaXNjX2NyZWF0ZSgpIGZyb20gaW1tZWRpYXRlIHN5bmNocm9ub3VzIGZyZWVpbmcgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcgdmlhIGNhbGxfcmN1IChxZGlzY19mcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCBjbGVhbnVwIHNlbWFudGljcyBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxlciAobmV0L3NjaGVkKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIFRDIGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgZHVyaW5nIHFkaXNjIGNyZWF0aW9uIGZhaWx1cmUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicWRpc2NfZnJlZV9yY3VcIixcbiAgICBcInFkaXNjX2ZyZWVfY2JcIixcbiAgICBcInFkaXNjX2NyZWF0ZVwiLFxuICAgIFwiX19xZGlzY19kZXN0cm95XCIsXG4gICAgXCJ0Y19tb2RpZnlfcWRpc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgZnJlZWluZyBvZiBzdHJ1Y3QgUWRpc2Mgb24gdGhlIGVycm9yIHVud2luZGluZyBwYXRoIG9mIHFkaXNjX2NyZWF0ZSgpIGZyb20gaW1tZWRpYXRlIHN5bmNocm9ub3VzIGZyZWVpbmcgdG8gZGVmZXJyZWQgUkNVIGZyZWVpbmcgdmlhIGNhbGxfcmN1IChxZGlzY19mcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgb2JqZWN0IGxpZmV0aW1lIGFuZCBjbGVhbnVwIHNlbWFudGljcyBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxlciAobmV0L3NjaGVkKSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIFRDIGNvbW1hbmRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBzYWZldHkgZHVyaW5nIHFkaXNjIGNyZWF0aW9uIGZhaWx1cmUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDExOjU5OjQ5LjQ4NDA3NDE5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4ODAzOTM5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo0OS40ODQ1MTQ3MzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDg3OTk0ODk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjNlYTUxNWE1ZjE3ZTIyOGJhYjRkYmE1YzgyMDFjOTU0MDBiYjc3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTE6NTk6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaFxuaW5kZXggY2JjMjQ4Nzc2NTExOC4uZjM1YmQwNmE2YmFkNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcbisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcbkBAIC03OTMsNyArNzkzLDcgQEAgdm9pZCBxZGlzY19vZmZsb2FkX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcyxcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tdm9pZCBxZGlzY19mcmVlKHN0cnVjdCBRZGlzYyAqcWRpc2MpO1xuK3ZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYyk7XG4gc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsIHUzMiBwYXJlbnRpZCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLjc5NWFjY2QxYmIzM2QgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtMTM4Miw3ICsxMzgyLDcgQEAgc3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gZXJyX291dDM6XG4gXHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XG4gXHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2c2NoLVx1MDAzZWRldl90cmFja2VyKTtcbi1cdHFkaXNjX2ZyZWUoc2NoKTtcbitcdHFkaXNjX2ZyZWVfcmN1KHNjaCk7XG4gZXJyX291dDI6XG4gXHRicGZfbW9kdWxlX3B1dChvcHMsIG9wcy1cdTAwM2Vvd25lcik7XG4gZXJyX291dDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5pbmRleCBlZjJiNGJmNTE1NjQxLi43MTYzMGI3OTVmOWQ2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jXG5AQCAtMTA4NiwyMSArMTA4NiwyMSBAQCB2b2lkIHFkaXNjX3Jlc2V0KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4gfVxuIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpO1xuIFxuLXZvaWQgcWRpc2NfZnJlZShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuK3N0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbi1cdGlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocWRpc2MpKSB7XG4tXHRcdGZyZWVfcGVyY3B1KHFkaXNjLVx1MDAzZWNwdV9ic3RhdHMpO1xuLVx0XHRmcmVlX3BlcmNwdShxZGlzYy1cdTAwM2VjcHVfcXN0YXRzKTtcbitcdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4rXG4rXHRpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHEpKSB7XG4rXHRcdGZyZWVfcGVyY3B1KHEtXHUwMDNlY3B1X2JzdGF0cyk7XG4rXHRcdGZyZWVfcGVyY3B1KHEtXHUwMDNlY3B1X3FzdGF0cyk7XG4gXHR9XG4gXG4tXHRrZnJlZShxZGlzYyk7XG4rXHRrZnJlZShxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcWRpc2NfZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4rdm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIHtcbi1cdHN0cnVjdCBRZGlzYyAqcSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgUWRpc2MsIHJjdSk7XG4tXG4tXHRxZGlzY19mcmVlKHEpO1xuK1x0Y2FsbF9yY3UoXHUwMDI2cWRpc2MtXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG5AQCAtMTEyNyw3ICsxMTI3LDcgQEAgc3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXG4gXG4gXHR0cmFjZV9xZGlzY19kZXN0cm95KHFkaXNjKTtcbiBcbi1cdGNhbGxfcmN1KFx1MDAyNnFkaXNjLVx1MDAzZXJjdSwgcWRpc2NfZnJlZV9jYik7XG4rXHRxZGlzY19mcmVlX3JjdShxZGlzYyk7XG4gfVxuIFxuIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NDkuNDg0NTE1OTA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NjM2OTIzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUXVldWVpbmcgRGlzY2lwbGluZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uIHdpdGhpbiB0aGUgcXVldWluZyBkaXNjaXBsaW5lIChRZGlzYykgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBpbnZvbHZlIGEgdHJhbnNpdGlvbiBmcm9tIGRpcmVjdCBgcWRpc2NfZnJlZWAgY2FsbHMgdG8gdXNpbmcgUkNVIChSZWFkLUNvcHktVXBkYXRlKSB2aWEgYHFkaXNjX2ZyZWVfcmN1YC5cblxuTG9va2luZyBhdCB0aGUgc3BlY2lmaWNzLCB0aGUgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogcmVwbGFjaW5nIHRoZSBvbGQgYHFkaXNjX2ZyZWVgIHdpdGggYSBuZXcgYHFkaXNjX2ZyZWVfcmN1YC4gVGhhdCdzIHRoZSBrZXkgc2lnbmFsLiBJdCBpbmRpY2F0ZXMgYSBzaGlmdCB0b3dhcmRzIGRlbGF5ZWQgZnJlZWluZywgd2hpY2ggUkNVIHByb3ZpZGVzLlxuXG5UaGUgYG5ldC9zY2hlZC9zY2hfYXBpLmNgIG1vZGlmaWNhdGlvbnMgaW4gYHFkaXNjX2NyZWF0ZWAgYXQgdGhlIGBlcnJfb3V0M2AgZXJyb3IgaGFuZGxpbmcgc2VjdGlvbiBhcmUgYWxzbyB0ZWxsaW5nLiBJbnN0ZWFkIG9mIGEgZGlyZWN0IGBxZGlzY19mcmVlYCwgd2UncmUgbm93IGNhbGxpbmcgYHFkaXNjX2ZyZWVfcmN1YCB0aGVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgZHVyaW5nIFFkaXNjIGNyZWF0aW9uLCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgd2Ugbm93IG5lZWQgdG8gZW5zdXJlIHRoZSBRZGlzYydzIG1lbW9yeSBpc24ndCBpbW1lZGlhdGVseSBmcmVlZCwgYnV0IGhhbmRlZCBvZmYgdG8gUkNVIGZvciBkZWxheWVkIGNsZWFudXAuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCByYWNlcyBkdXJpbmcgZXJyb3IgY2xlYW51cC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlLCB0aG91Z2gsIGxpZXMgaW4gYG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jYC4gV2UndmUgZ290IGBxZGlzY19mcmVlYCByZWZhY3RvcmVkIGludG8gYHFkaXNjX2ZyZWVfY2JgLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGhhbmRsZXMgZnJlZWluZyBwZXJjcHUgc3RhdHMgYW5kIHRoZSBRZGlzYyBzdHJ1Y3QgaXRzZWxmIHZpYSBga2ZyZWVgLiBUaGUgYHFkaXNjX2ZyZWVfcmN1YCBmdW5jdGlvbiBpbnZva2VzIGBjYWxsX3JjdWAsIHF1ZXVpbmcgdXAgdGhlIGNhbGxiYWNrLiBGaW5hbGx5LCB0aGUgYF9fcWRpc2NfZGVzdHJveWAgaXMgbm93IHVzaW5nIGBxZGlzY19mcmVlX3JjdWAsIHJlaW5mb3JjaW5nIHRoYXQgUkNVIGlzIHRoZSBtZWNoYW5pc20gb2YgY2hvaWNlIGZvciBRZGlzYyBkZWFsbG9jYXRpb24uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBleGFtaW5pbmcgdGhlIGBxZGlzY19jcmVhdGVgIGZ1bmN0aW9uJ3Mgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGBlcnJfb3V0M2AgbGFiZWwuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHJlcG9zaXRvcnkgZm9yIHJlbGF0ZWQgY29udGV4dCB3b3VsZCBsaWtlbHkgYmUgaGVscGZ1bCBpbiB0cmFjaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgZXhwZWN0IHRvIGZpbmQgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTE6NTk6NTcuMTQ4MjExNzYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwNjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxZGlzY19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jPTEyMzE9c3RhdGljIGludCBxZGlzY19ibG9ja19pbmRleGVzX3NldChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTI3MC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEyNzE6c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMjcyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzcwLVxcdHFkaXNjX2hhc2hfYWRkKHNjaCwgZmFsc2UpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM3MTpcXHR0cmFjZV9xZGlzY19jcmVhdGUob3BzLCBkZXYsIHBhcmVudCk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzcyLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzc2LVxcdC8qIEV2ZW4gaWYgb3BzLVxcdTAwM2Vpbml0KCkgZmFpbGVkLCB3ZSBjYWxsIG9wcy1cXHUwMDNlZGVzdHJveSgpXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxMzc3OlxcdCAqIGxpa2UgcWRpc2NfY3JlYXRlX2RmbHQoKS5cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzNzgtXFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE2MDg9c3RhdGljIGludCBfX3RjX21vZGlmeV9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3NjItXFx0XFx0aWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3NjM6XFx0XFx0XFx0cSA9IHFkaXNjX2NyZWF0ZShkZXYsIGRldl9pbmdyZXNzX3F1ZXVlKGRldiksXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xNzY0LVxcdFxcdFxcdFxcdFxcdCB0Y20tXFx1MDAzZXRjbV9wYXJlbnQsIHRjbS1cXHUwMDNldGNtX3BhcmVudCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTc3OS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE3ODA6XFx0XFx0cSA9IHFkaXNjX2NyZWF0ZShkZXYsIGRldl9xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE3ODEtXFx0XFx0XFx0XFx0IHRjbS1cXHUwMDNldGNtX3BhcmVudCwgdGNtLVxcdTAwM2V0Y21faGFuZGxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMTo1OTo1Ny4xOTYzMjQ1MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2NzUwNDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgLSBMaW5lcyAxMzUwLTE0MDAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEzNTAgdG8gMTQwMCB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGlzIHNlY3Rpb24uLi4gQWgsIHllcywgSSByZWNvZ25pemUgdGhpcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgdHJhZmZpYyBjb250cm9sIEFQSSBnZXRzIGhhbW1lcmVkIG91dC4gU3BlY2lmaWNhbGx5LCBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc2NoZWR1bGluZyBkaXNjaXBsaW5lcyAocWRpc2NzKSB0aGVtc2VsdmVzLCBvciBwZXJoYXBzIHRoZSByZWdpc3RyYXRpb24gb3IgdW5yZWdpc3RyYXRpb24gb2YgdGhlc2Ugc2NoZWR1bGVycy4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSByZWxhdGVkIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBjYWxsZWQgd2hlbiBhIG5ldyBxZGlzYyBpcyBjcmVhdGVkLCBvciB3aGVuIG9uZSBpcyByZW1vdmVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgdGhlIGxvY2tpbmcgdGhhdCdzIGluIHBsYWNlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBpdCBkaWN0YXRlcyB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgaW5pdGlhbGl6YXRpb24sIGEgZnVsbC1ibG93biBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiwgb3Igc29tZSBzb3J0IG9mIGdyYWNlZnVsIHRlYXItZG93biBvZiBhbiBleGlzdGluZyBxZGlzYy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdkIGV4cGVjdCB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGludGVyYWN0aW5nIHdpdGggdGhlIGBxZGlzY19vcHNgIHN0cnVjdHVyZSwgYXMgdGhvc2UgY29udGFpbiB0aGUgbWV0aG9kcyBhbGwgcWRpc2NzIHVzZS5cblxuRXNzZW50aWFsbHksIEknbSBzZXR0aW5nIG15c2VsZiB1cCB0byBpZGVudGlmeSBob3cgdGhlIGtlcm5lbCBpbnRlcmZhY2VzIHdpdGggYW5kIG1hbmFnZXMgdGhlIGRpZmZlcmVudCBxdWV1ZWluZyBkaXNjaXBsaW5lcy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciBzdWJ0bGUgaGludHMgYWJvdXQgaG93IHRoZSBBUEkgaGFuZGxlcyBkaWZmZXJlbnQgc2NoZWR1bGluZyBjbGFzc2VzLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIHFkaXNjIHN0cnVjdHVyZXMgYXJlIG1hbmFnZWQgZHVyaW5nIGxpZmVjeWNsZSBjaGFuZ2VzLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIHNoYXBlcyBuZXR3b3JrIHRyYWZmaWMsIGFuZCBJJ20gcmVhZHkgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MDA6MDAuOTYzODMyNDM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRpZiAodGNhW1RDQV9SQVRFXSkge1xcbjEzNTI6XFx0XFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuMTM1MzpcXHRcXHRcXHRpZiAoc2NoLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUV9GX01RUk9PVCkge1xcbjEzNTQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IGF0dGFjaCByYXRlIGVzdGltYXRvciB0byBhIG11bHRpLXF1ZXVlIHJvb3QgcWRpc2NcXFwiKTtcXG4xMzU1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDQ7XFxuMTM1NjpcXHRcXHRcXHR9XFxuMTM1NzpcXHRcXG4xMzU4OlxcdFxcdFxcdGVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKFxcdTAwMjZzY2gtXFx1MDAzZWJzdGF0cyxcXG4xMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlY3B1X2JzdGF0cyxcXG4xMzYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzY2gtXFx1MDAzZXJhdGVfZXN0LFxcbjEzNjE6XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCxcXG4xMzYyOlxcdFxcdFxcdFxcdFxcdFxcdHRydWUsXFxuMTM2MzpcXHRcXHRcXHRcXHRcXHRcXHR0Y2FbVENBX1JBVEVdKTtcXG4xMzY0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xMzY1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBnZW5lcmF0ZSBuZXcgZXN0aW1hdG9yXFxcIik7XFxuMTM2NjpcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ0O1xcbjEzNjc6XFx0XFx0XFx0fVxcbjEzNjg6XFx0XFx0fVxcbjEzNjk6XFx0XFxuMTM3MDpcXHRcXHRxZGlzY19oYXNoX2FkZChzY2gsIGZhbHNlKTtcXG4xMzcxOlxcdFxcdHRyYWNlX3FkaXNjX2NyZWF0ZShvcHMsIGRldiwgcGFyZW50KTtcXG4xMzcyOlxcdFxcbjEzNzM6XFx0XFx0cmV0dXJuIHNjaDtcXG4xMzc0OlxcdFxcbjEzNzU6XFx0ZXJyX291dDQ6XFxuMTM3NjpcXHRcXHQvKiBFdmVuIGlmIG9wcy1cXHUwMDNlaW5pdCgpIGZhaWxlZCwgd2UgY2FsbCBvcHMtXFx1MDAzZWRlc3Ryb3koKVxcbjEzNzc6XFx0XFx0ICogbGlrZSBxZGlzY19jcmVhdGVfZGZsdCgpLlxcbjEzNzg6XFx0XFx0ICovXFxuMTM3OTpcXHRcXHRpZiAob3BzLVxcdTAwM2VkZXN0cm95KVxcbjEzODA6XFx0XFx0XFx0b3BzLVxcdTAwM2VkZXN0cm95KHNjaCk7XFxuMTM4MTpcXHRcXHRxZGlzY19wdXRfc3RhYihydG5sX2RlcmVmZXJlbmNlKHNjaC1cXHUwMDNlc3RhYikpO1xcbjEzODI6XFx0ZXJyX291dDM6XFxuMTM4MzpcXHRcXHRxZGlzY19sb2NrX3VuaW5pdChzY2gsIG9wcyk7XFxuMTM4NDpcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbjEzODU6XFx0XFx0cWRpc2NfZnJlZV9yY3Uoc2NoKTtcXG4xMzg2OlxcdGVycl9vdXQyOlxcbjEzODc6XFx0XFx0YnBmX21vZHVsZV9wdXQob3BzLCBvcHMtXFx1MDAzZW93bmVyKTtcXG4xMzg4OlxcdGVycl9vdXQ6XFxuMTM4OTpcXHRcXHQqZXJycCA9IGVycjtcXG4xMzkwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4xMzk0OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpvc3RhYiwgKnN0YWIgPSBOVUxMO1xcbjEzOTc6XFx0XFx0aW50IGVyciA9IDA7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdGlmICh0Y2FbVENBX09QVElPTlNdKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjAwOjAwLjk2NDAwNTY1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjE2MTkzMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBRZGlzYyBGcmVlaW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBxZGlzY19jcmVhdGVgLCBhbmQgdGhlIHVzZSBvZiBgcWRpc2NfZnJlZV9yY3VgIGluc3RlYWQgb2YgdGhlIG1vcmUgc3RhbmRhcmQgYHFkaXNjX2ZyZWVgIHJhaXNlcyBhIGZsYWcuIFdoeSB0aGUgUkNVLWJhc2VkIGZyZWVpbmc/IFRoZSBrZXkgaXMgbGlrZWx5IHRoYXQgc29tZXRoaW5nLCBlaXRoZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uIChgb3BzLVx1MDAzZWluaXQoKWAsIGBvcHMtXHUwMDNlZGVzdHJveSgpYCwgb3Igc2ltaWxhciksIG1pZ2h0IGJlIHB1Ymxpc2hpbmcgdGhlIGBzY2hgIHN0cnVjdHVyZS4gVGhpcyBjb3VsZCBiZSBkaXJlY3QgYWNjZXNzLCBSQ1UgcmVhZCBhY2Nlc3MsIHBlcmhhcHMgZXZlbiBpZiBhbiBgb3BzLVx1MDAzZWRlc3Ryb3lgIGNhbGxiYWNrIHVzZXMgUkNVIGl0c2VsZi4gVGhlIHByZXNlbmNlIG9mIGBtaW5pX3FkaXNjYCBvciBmaWx0ZXJzIGZ1cnRoZXIgaW5jcmVhc2VzIHRoaXMgbGlrZWxpaG9vZC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHVzaW5nIFJDVSBmb3IgZnJlZWluZyBpcyBhIGRpcmVjdCBtZWFzdXJlIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0aWVzIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGF0J3MgdGhlIGxpa2VseSBzY2VuYXJpby5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIHBvdGVudGlhbCByaXNrcy4gTXkgcHJpbWFyeSBjb25jZXJucyBhcmUgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChLTVNBTikgb3IgbWVtb3J5IGxpZmVjeWNsZSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBLQVNBTi1kZXRlY3RhYmxlIHByb2JsZW1zIGxpa2UgVUFGLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrOlxuXG4qICAgRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvbW11bmljYXRlZCB0byB1c2VyIHNwYWNlIGluIGEgd2F5IHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ/IE5vcGUuXG4qICAgRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBhdCBhbGwuXG4qICAgRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZCByZWFkcz8gTm8sIGl0IGRvZXNuJ3Qgc2VlbSB0aGF0IHdheS5cbiogICBEb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaW4gc3Vycm91bmRpbmcgY29kZT8gTm8uXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSAqaXMqIGFib3V0IG1lbW9yeSBsaWZlY3ljbGUsIHNwZWNpZmljYWxseSBlbnN1cmluZyBhc3luY2hyb25vdXMgZnJlZWluZyB2aWEgUkNVIChgY2FsbF9yY3VgKSBpbnN0ZWFkIG9mIGEgc3luY2hyb25vdXMgYGtmcmVlYCwgd2hpY2ggZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBVQUYgcG90ZW50aWFsIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGFib3V0IFVBRiBwcm90ZWN0aW9uLiBLQVNBTiBpcyB0aGUgcmVsZXZhbnQgdG9vbCBoZXJlLCBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgd291bGQgYWxzbyBjYXRjaCBzdWNoIHByb2JsZW1zLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkLiBNeSBjb25jbHVzaW9uOiB0aGlzIGFwcGVhcnMgdG8gYmUgYSB3ZWxsLWNvbnNpZGVyZWQgYW5kIGNvcnJlY3QgYXBwcm9hY2guIE5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgKmJvdGgqIGBxZGlzY19mcmVlYCBhbmQgYHFkaXNjX2ZyZWVfcmN1YCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjowMDowNS41ODAyMDE4MTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzIxNDAxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfZnJlZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jPTMyMD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmM6MzIxOm5mcF9hYm1fcWRpc2NfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmZwX2FibV9saW5rICphbGluayxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jLTMyMi1cXHRcXHQgICBzdHJ1Y3QgbmZwX3FkaXNjICpxZGlzYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmM9NDA0PW5mcF9hYm1fcWRpc2NfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmZwX2FibV9saW5rICphbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmMtNDE3LVxcdG5mcF9hYm1fcWRpc2NfdW5saW5rX2NoaWxkcmVuKHFkaXNjLCAwLCBxZGlzYy1cXHUwMDNlbnVtX2NoaWxkcmVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2FibS9xZGlzYy5jOjQxODpcXHRuZnBfYWJtX3FkaXNjX2ZyZWUobmV0ZGV2LCBhbGluaywgcWRpc2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvYWJtL3FkaXNjLmMtNDE5LVxcbi0tXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD03OTM9c3RydWN0IFFkaXNjICpxZGlzY19hbGxvYyhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5NS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo3OTY6dm9pZCBxZGlzY19mcmVlX3JjdShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5Ny1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTI3MT1zdGF0aWMgc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4NC1cXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnNjaC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTM4NTpcXHRxZGlzY19mcmVlX3JjdShzY2gpO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTM4Ni1lcnJfb3V0MjpcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEwODc9RVhQT1JUX1NZTUJPTChxZGlzY19yZXNldCk7XFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTA4OC1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMDg5OnN0YXRpYyB2b2lkIHFkaXNjX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEwOTAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTEwMC1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTAxOnZvaWQgcWRpc2NfZnJlZV9yY3Uoc3RydWN0IFFkaXNjICpxZGlzYylcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTAyLXtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTAzOlxcdGNhbGxfcmN1KFxcdTAwMjZxZGlzYy1cXHUwMDNlcmN1LCBxZGlzY19mcmVlX2NiKTtcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTA0LX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTExMDY9c3RhdGljIHZvaWQgX19xZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTI5LVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjExMzA6XFx0cWRpc2NfZnJlZV9yY3UocWRpc2MpO1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjowMDowNy4xNTIzNDc5NThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxMjA5MTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFFkaXNjIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgY2xlYW4tY3V0LiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgYHFkaXNjX2NyZWF0ZWAuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgYGtmcmVlYCdpbmcgdGhlIGBzdHJ1Y3QgUWRpc2NgIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcsIGl0J3Mgc3dpdGNoaW5nIHRvIGEgZGVsYXllZCwgUkNVLWJhc2VkIGZyZWVpbmcgcHJvY2VzcyB1c2luZyBgY2FsbF9yY3VgLiBUaGlzIGNsZWFybHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgcmF0aW9uYWxlIGlzIHNvbGlkIOKAkyBSQ1UgcmVhZGVycyBtaWdodCBzdGlsbCBiZSByZWZlcmVuY2luZyB0aGUgUWRpc2MsIHNvIHN5bmNocm9ub3VzIGZyZWVpbmcgd291bGQgYmUgYSBiYWQgbW92ZS5cblxuTm93LCBiZWNhdXNlIEtBU0FOIGlzIHRoZSBvbmUgdGhhdCBjYXVnaHQgdGhlIHVzZS1hZnRlci1mcmVlIGFuZCBtZW1vcnkgbGlmZXRpbWUgcHJvYmxlbSwgYW5kIGZyb20gdGhlIHNvdW5kcyBvZiBpdCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBJJ20gdGhpbmtpbmcgd2UgY2FuIHNhZmVseSBtYXJrIGBOZWVkc0tNU0FOYCBhcyBmYWxzZSBoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODIsIk91dHB1dFRva2VucyI6MTkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjAwOjEwLjM2NDQ0MzMxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY2xlYW51cCBwYXRoIGluIGBxZGlzY19jcmVhdGUoKWAgYW5kIGBfX3FkaXNjX2Rlc3Ryb3koKWAgdG8gZnJlZSB0aGUgYHN0cnVjdCBRZGlzY2Agc3RydWN0dXJlIGFzeW5jaHJvbm91c2x5IHZpYSBSQ1UgKGBjYWxsX3JjdWApIGluc3RlYWQgb2Ygc3luY2hyb25vdXNseS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBjb25jdXJyZW50IFJDVSByZWFkZXJzIG1pZ2h0IGFjY2VzcyB0aGUgUWRpc2Mgd2hpbGUgaXQgaXMgYmVpbmcgZnJlZWQuXFxuXFxuVGhlc2UgbWVtb3J5IGxpZmV0aW1lIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGZhbGwgZW50aXJlbHkgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiAod2hpY2ggZGV0ZWN0cyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhbmQgUkNVL2xvY2sgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgYWx0ZXIgZGF0YSBidWZmZXIgcGFyc2luZy9sZW5ndGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[1] Phase: Succeeded StartedAt: 2026-09-03 12:00:22 +0000 UTC FinishedAt: 2026-09-03 12:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 12:00:22 +0000 UTC FinishedAt: 2026-09-03 12:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2] Phase: Succeeded StartedAt: 2026-09-03 12:00:22 +0000 UTC FinishedAt: 2026-09-03 15:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 12:00:22 +0000 UTC FinishedAt: 2026-09-03 15:38:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 12:00:22 +0000 UTC FinishedAt: 2026-09-03 12:00:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 12:00:22 +0000 UTC FinishedAt: 2026-09-03 12:00:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqc77t/series-workflowqc77t-convert-artifact-1843647122/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 12:00:32 +0000 UTC FinishedAt: 2026-09-03 12:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 12:00:32 +0000 UTC FinishedAt: 2026-09-03 12:16:23 +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:*589d7c1b-2f65-4054-990c-d879ee48d4fc,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-workflowqc77t/series-workflowqc77t-convert-artifact-1843647122/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": "271941c2-1dcb-45bb-899c-4d79fde7daf7", "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-workflowqc77t/series-workflowqc77t-build-action-4261303312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 12:00:32 +0000 UTC FinishedAt: 2026-09-03 12:16:13 +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:*589d7c1b-2f65-4054-990c-d879ee48d4fc,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-workflowqc77t/series-workflowqc77t-convert-artifact-1843647122/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": "271941c2-1dcb-45bb-899c-4d79fde7daf7", "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-workflowqc77t/series-workflowqc77t-build-action-4261303312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 12:16:23 +0000 UTC FinishedAt: 2026-09-03 12:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 12:16:23 +0000 UTC FinishedAt: 2026-09-03 12:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 12:16:23 +0000 UTC FinishedAt: 2026-09-03 12:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 12:16:23 +0000 UTC FinishedAt: 2026-09-03 12:16:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqc77t/series-workflowqc77t-convert-artifact-3018201005/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 12:16:33 +0000 UTC FinishedAt: 2026-09-03 12:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 12:16:33 +0000 UTC FinishedAt: 2026-09-03 12:18:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*271941c2-1dcb-45bb-899c-4d79fde7daf7,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-workflowqc77t/series-workflowqc77t-build-action-4261303312/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-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 12:18:27 +0000 UTC FinishedAt: 2026-09-03 12:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 12:18:27 +0000 UTC FinishedAt: 2026-09-03 12:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 12:18:27 +0000 UTC FinishedAt: 2026-09-03 12:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 12:18:27 +0000 UTC FinishedAt: 2026-09-03 12:34:24 +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:*589d7c1b-2f65-4054-990c-d879ee48d4fc,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-workflowqc77t/series-workflowqc77t-convert-artifact-3018201005/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": "884995b1-a9ad-488b-9315-24b25f59aa5a", "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-workflowqc77t/series-workflowqc77t-build-action-2771016713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 12:18:27 +0000 UTC FinishedAt: 2026-09-03 12:34:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*589d7c1b-2f65-4054-990c-d879ee48d4fc,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-workflowqc77t/series-workflowqc77t-convert-artifact-3018201005/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": "884995b1-a9ad-488b-9315-24b25f59aa5a", "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-workflowqc77t/series-workflowqc77t-build-action-2771016713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 12:34:24 +0000 UTC FinishedAt: 2026-09-03 12:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 12:34:24 +0000 UTC FinishedAt: 2026-09-03 12:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 12:34:24 +0000 UTC FinishedAt: 2026-09-03 12:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 12:34:24 +0000 UTC FinishedAt: 2026-09-03 12:36:12 +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:*884995b1-a9ad-488b-9315-24b25f59aa5a,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-workflowqc77t/series-workflowqc77t-build-action-2771016713/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-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 15:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 15:38:10 +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":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"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:*271941c2-1dcb-45bb-899c-4d79fde7daf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*884995b1-a9ad-488b-9315-24b25f59aa5a,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-workflowqc77t/series-workflowqc77t-build-action-4261303312/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-workflowqc77t/series-workflowqc77t-build-action-2771016713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 12:36:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 12:36:27 +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":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"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-workflowqc77t/series-workflowqc77t-convert-artifact-1591281938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 12:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 12:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 12:36:22 +0000 UTC FinishedAt: 2026-09-03 12:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 12:36:32 +0000 UTC FinishedAt: 2026-09-03 15:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqc77t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["qdisc_free_rcu","qdisc_free_cb","qdisc_create","__qdisc_destroy","tc_modify_qdisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED"],"series_id":"e2016e69-2263-45ef-aa6f-6511797098c2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 12:36:32 +0000 UTC FinishedAt: 2026-09-03 15:38:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*271941c2-1dcb-45bb-899c-4d79fde7daf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*884995b1-a9ad-488b-9315-24b25f59aa5a,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-workflowqc77t/series-workflowqc77t-build-action-4261303312/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-workflowqc77t/series-workflowqc77t-build-action-2771016713/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-workflowqc77t/series-workflowqc77t-convert-artifact-1591281938/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,}