Name: series-workflowrfjr7 Phase: Succeeded StartedAt: 2026-09-09 19:02:56 +0000 UTC FinishedAt: 2026-09-09 19:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[0] Phase: Succeeded StartedAt: 2026-09-09 19:02:56 +0000 UTC FinishedAt: 2026-09-09 19:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 19:02:56 +0000 UTC FinishedAt: 2026-09-09 19:07:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "d94b4759-eaf7-413c-84bb-4b594c4fd396" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "cleanup_offline_cgwbs_workfn", "cleanup_offline_cgwb", "wb_memcg_offline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2ImIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5lIGNsZWFudXAgd29ya2VyIGxvb3AgaW4gbW0vYmFja2luZy1kZXYuYywgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgYmVoYXZpb3IgdmlhIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBkdXJpbmcgb2ZmbGluZSBjZ3diIHRlYXJkb3duLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgLyB3cml0ZWJhY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiB1bmRlciBtZW1vcnkgYW5kIEkvTyBsb2FkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDAzMWZmNGI5ODI5ZmE1MTAyNWY2YWUzZDVkMjNhOWJjN2NlMmRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTk6MDY6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmNcbmluZGV4IGNlY2JjZjkwNjBhNjUuLjE4ZTk5OTA1M2JhZTAgMTAwNjQ0XG4tLS0gYS9tbS9iYWNraW5nLWRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9iYWNraW5nLWRldi5jXG5AQCAtOTEwLDggJiM0Mzs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4tXHRcdHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiYjNDM7XHRcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiBcbiBcdFx0d2JfcHV0KHdiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3diJiMzNDssCiAgICAmIzM0O3diX21lbWNnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB3cml0ZWJhY2sgb2ZmbGluZSBjbGVhbnVwIHdvcmtlciBsb29wIGluIG1tL2JhY2tpbmctZGV2LmMsIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIGJlaGF2aW9yIHZpYSBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCkgZHVyaW5nIG9mZmxpbmUgY2d3YiB0ZWFyZG93bi4gVGhpcyBjb2RlIGlzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IC8gd3JpdGViYWNrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gdW5kZXIgbWVtb3J5IGFuZCBJL08gbG9hZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAwMzFmZjRiOTgyOWZhNTEwMjVmNmFlM2Q1ZDIzYTliYzdjZTJkYjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE5OjA2OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggY2VjYmNmOTA2MGE2NS4uMThlOTk5MDUzYmFlMCAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9iYWNraW5nLWRldi5jCkBAIC05MTAsOCAmIzQzOzkxMCw5IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y2d3Yl9sb2NrKTsKLQkJd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSkKLQkJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkJZG8gewomIzQzOwkJCWNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsKJiM0MzsJCX0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtjZ3diX2xvY2spOwogCiAJCXdiX3B1dCh3Yik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRpZmZgLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGFsdGVyZWQgaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQgYXJvdW5kIGxpbmUgOTEwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgYHdoaWxlYCBsb29wIHdpdGggYGNvbmRfcmVzY2hlZCgpYCBpbnNpZGUuIE5vdywgaXQmIzM5O3MgYSBgZG8uLi53aGlsZWAgbG9vcCwgYW5kIHRoZSBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBmdW5jdGlvbiBoYXMgYmVlbiBzd2FwcGVkIGluLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgYmxvY2tpbmcgaXNzdWVzIGluIHRoZSBvbGQgbG9vcCwgcG9zc2libHkgcmVsYXRlZCB0byBob2xkaW5nIGEgbG9jayAoYGNnd2JfbG9ja2ApLiBUaGUgc3dpdGNoIHRvIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIHN1Z2dlc3RzIHRoaXMgY2hhbmdlIGlzIGFpbWVkIGF0IGFsbG93aW5nIG90aGVyIHRhc2tzIHRvIHJ1biBtb3JlIG9mdGVuLCBhbmQgdGhpcyBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgc2VlbXMgdG8gZGVhbCB3aXRoIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgc2NlbmFyaW9zLiBUbyBnZXQgYSBiZXR0ZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgcmVhZCB0aGUgZmlsZSBhcm91bmQgdGhpcyBzZWN0aW9uLiBDb250ZXh0IGlzIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBmdWxseSBhcHByZWNpYXRlIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBjb21taXQgbWVzc2FnZXMgb3IgZG9jdW1lbnRhdGlvbjsgdGhpcyBzdWJ0bGUgc2hpZnQgaW4gYmVoYXZpb3IgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODA6XHQgKlxuIDg4MTpcdCAqIFRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzIGJ5IHN3aXRjaGluZyBhdHRhY2hlZCBpbm9kZXMgdG8gdGhlIG5lYXJlc3RcbiA4ODI6XHQgKiBsaXZpbmcgYW5jZXN0b3ImIzM5O3Mgd3JpdGViYWNrLiBQcm9jZXNzZWQgd2JzIGFyZSBwbGFjZWQgYXQgdGhlIGVuZFxuIDg4MzpcdCAqIG9mIHRoZSBsaXN0IHRvIGd1YXJhbnRlZSB0aGUgZm9yd2FyZCBwcm9ncmVzcy5cbiA4ODQ6XHQgKi9cbiA4ODU6XHRzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiA4ODY6XHR7XG4gODg3Olx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XG4gODg4Olx0XHRMSVNUX0hFQUQocHJvY2Vzc2VkKTtcbiA4ODk6XHRcbiA4OTA6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4OTE6XHRcbiA4OTI6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xuIDg5MzpcdFx0XHR3YiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b2ZmbGluZV9jZ3dicywgc3RydWN0IGJkaV93cml0ZWJhY2ssXG4gODk0Olx0XHRcdFx0XHQgICAgICBvZmZsaW5lX25vZGUpO1xuIDg5NTpcdFx0XHRsaXN0X21vdmUoXHUwMDI2d2ItXHUwMDNlb2ZmbGluZV9ub2RlLCBcdTAwMjZwcm9jZXNzZWQpO1xuIDg5NjpcdFxuIDg5NzpcdFx0XHQvKlxuIDg5ODpcdFx0XHQgKiBJZiB3YiBpcyBkaXJ0eSwgY2xlYW5pbmcgdXAgdGhlIHdyaXRlYmFjayBieSBzd2l0Y2hpbmdcbiA4OTk6XHRcdFx0ICogYXR0YWNoZWQgaW5vZGVzIHdpbGwgcmVzdWx0IGluIGFuIGVmZmVjdGl2ZSByZW1vdmFsIG9mIGFueVxuIDkwMDpcdFx0XHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24mIzM5O3QgdGhlIGdvYWwuICBJbnN0ZWFkLFxuIDkwMTpcdFx0XHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXG4gOTAyOlx0XHRcdCAqIHdpbGwgYmUgbGlrZWx5IGNvbXBsZXRlZC4gIElmIGluIHRoZSBtZWFudGltZSBzb21lIGlub2Rlc1xuIDkwMzpcdFx0XHQgKiB3aWxsIGdldCByZS1kaXJ0aWVkLCB0aGV5IHNob3VsZCBiZSBldmVudHVhbGx5IHN3aXRjaGVkIHRvXG4gOTA0Olx0XHRcdCAqIGEgbmV3IGNnd2IuXG4gOTA1Olx0XHRcdCAqL1xuIDkwNjpcdFx0XHRpZiAod2JfaGFzX2RpcnR5X2lvKHdiKSlcbiA5MDc6XHRcdFx0XHRjb250aW51ZTtcbiA5MDg6XHRcbiA5MDk6XHRcdFx0aWYgKCF3Yl90cnlnZXQod2IpKVxuIDkxMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDkxMTpcdFxuIDkxMjpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA5MTM6XHRcdFx0ZG8ge1xuIDkxNDpcdFx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiA5MTU6XHRcdFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcbiA5MTY6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkxNzpcdFxuIDkxODpcdFx0XHR3Yl9wdXQod2IpO1xuIDkxOTpcdFx0fVxuIDkyMDpcdFxuIDkyMTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnByb2Nlc3NlZCkpXG4gOTIyOlx0XHRcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2cHJvY2Vzc2VkLCBcdTAwMjZvZmZsaW5lX2Nnd2JzKTtcbiA5MjM6XHRcbiA5MjQ6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkyNTpcdH1cbiA5MjY6XHRcbiA5Mjc6XHQvKipcbiA5Mjg6XHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtY2cgYmVpbmcgb2ZmbGluZWRcbiA5Mjk6XHQgKiBAbWVtY2c6IG1lbWNnIGJlaW5nIG9mZmxpbmVkXG4gOTMwOlx0ICpcbiA5MzE6XHQgKiBBbHNvIHByZXZlbnRzIGNyZWF0aW9uIG9mIGFueSBuZXcgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIEBtZW1jZy5cbiA5MzI6XHQgKi9cbiA5MzM6XHR2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIDkzNDpcdHtcbiA5MzU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1lbWNnX2Nnd2JfbGlzdCA9IFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdDtcbiA5MzY6XHRcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgKm5leHQ7XG4gOTM3Olx0XG4gOTM4Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4gOTM5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2IsIG5leHQsIG1lbWNnX2Nnd2JfbGlzdCwgbWVtY2dfbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDR1dCIENsZWFudXAgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGBjZ3dic2AgdGhpbmcgaXMgY2xlYW5lZCB1cCwgYW5kIHNwZWNpZmljYWxseSBob3cgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGZpdCBpbnRvIHRoZSBwaWN0dXJlLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2UsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCB3aXRoIGxpbmVzIDgwMCB0byA4ODAgb2YgYG1tL2JhY2tpbmctZGV2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYWxsb3cgbWUgdG8gZGV0ZXJtaW5lIHRoZWlyIHJvbGUgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vYmFja2luZy1kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XHRcdGJsa2NnX2NzcyA9IGNncm91cF9nZXRfZV9jc3MobWVtY2dfY3NzLVx1MDAzZWNncm91cCwgXHUwMDI2aW9fY2dycF9zdWJzeXMpO1xuIDgwMTpcdFx0XHRpZiAodW5saWtlbHkod2ItXHUwMDNlYmxrY2dfY3NzICE9IGJsa2NnX2NzcyB8fCAhd2JfdHJ5Z2V0KHdiKSkpXG4gODAyOlx0XHRcdFx0d2IgPSBOVUxMO1xuIDgwMzpcdFx0XHRjc3NfcHV0KGJsa2NnX2Nzcyk7XG4gODA0Olx0XHR9XG4gODA1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4MDY6XHRcbiA4MDc6XHRcdHJldHVybiB3YjtcbiA4MDg6XHR9XG4gODA5Olx0XG4gODEwOlx0LyoqXG4gODExOlx0ICogd2JfZ2V0X2NyZWF0ZSAtIGdldCB3YiBmb3IgYSBnaXZlbiBtZW1jZywgY3JlYXRlIGlmIG5lY2Vzc2FyeVxuIDgxMjpcdCAqIEBiZGk6IHRhcmdldCBiZGlcbiA4MTM6XHQgKiBAbWVtY2dfY3NzOiBjZ3JvdXBfc3Vic3lzX3N0YXRlIG9mIHRoZSB0YXJnZXQgbWVtY2cgKG11c3QgaGF2ZSBwb3NpdGl2ZSByZWYpXG4gODE0Olx0ICogQGdmcDogYWxsb2NhdGlvbiBtYXNrIHRvIHVzZVxuIDgxNTpcdCAqXG4gODE2Olx0ICogVHJ5IHRvIGdldCB0aGUgd2IgZm9yIEBtZW1jZ19jc3Mgb24gQGJkaS4gIElmIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCB0cnkgdG9cbiA4MTc6XHQgKiBjcmVhdGUgb25lLiAgU2VlIHdiX2dldF9sb29rdXAoKSBmb3IgbW9yZSBkZXRhaWxzLlxuIDgxODpcdCAqL1xuIDgxOTpcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yl9nZXRfY3JlYXRlKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksXG4gODIwOlx0XHRcdFx0XHQgICAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcyxcbiA4MjE6XHRcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4gODIyOlx0e1xuIDgyMzpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKndiO1xuIDgyNDpcdFxuIDgyNTpcdFx0bWlnaHRfYWxsb2MoZ2ZwKTtcbiA4MjY6XHRcbiA4Mjc6XHRcdGRvIHtcbiA4Mjg6XHRcdFx0d2IgPSB3Yl9nZXRfbG9va3VwKGJkaSwgbWVtY2dfY3NzKTtcbiA4Mjk6XHRcdH0gd2hpbGUgKCF3YiBcdTAwMjZcdTAwMjYgIWNnd2JfY3JlYXRlKGJkaSwgbWVtY2dfY3NzLCBnZnApKTtcbiA4MzA6XHRcbiA4MzE6XHRcdHJldHVybiB3YjtcbiA4MzI6XHR9XG4gODMzOlx0XG4gODM0Olx0c3RhdGljIGludCBjZ3diX2JkaV9pbml0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXG4gODM1Olx0e1xuIDgzNjpcdFx0aW50IHJldDtcbiA4Mzc6XHRcbiA4Mzg6XHRcdElOSVRfUkFESVhfVFJFRShcdTAwMjZiZGktXHUwMDNlY2d3Yl90cmVlLCBHRlBfQVRPTUlDKTtcbiA4Mzk6XHRcdG11dGV4X2luaXQoXHUwMDI2YmRpLVx1MDAzZWNnd2JfcmVsZWFzZV9tdXRleCk7XG4gODQwOlx0XHRpbml0X3J3c2VtKFx1MDAyNmJkaS1cdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xuIDg0MTpcdFxuIDg0MjpcdFx0cmV0ID0gd2JfaW5pdChcdTAwMjZiZGktXHUwMDNld2IsIGJkaSwgR0ZQX0tFUk5FTCk7XG4gODQzOlx0XHRpZiAoIXJldCkge1xuIDg0NDpcdFx0XHRiZGktXHUwMDNld2IubWVtY2dfY3NzID0gXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVx1MDAzZWNzcztcbiA4NDU6XHRcdFx0YmRpLVx1MDAzZXdiLmJsa2NnX2NzcyA9IGJsa2NnX3Jvb3RfY3NzO1xuIDg0NjpcdFx0XHRJTklUX1dPUksoXHUwMDI2YmRpLVx1MDAzZXdiLnN3aXRjaF93b3JrLCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4pO1xuIDg0NzpcdFx0XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2YmRpLVx1MDAzZXdiLnN3aXRjaF93YnNfY3R4cyk7XG4gODQ4Olx0XHR9XG4gODQ5Olx0XHRyZXR1cm4gcmV0O1xuIDg1MDpcdH1cbiA4NTE6XHRcbiA4NTI6XHRzdGF0aWMgdm9pZCBjZ3diX2JkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXG4gODUzOlx0e1xuIDg1NDpcdFx0c3RydWN0IHJhZGl4X3RyZWVfaXRlciBpdGVyO1xuIDg1NTpcdFx0dm9pZCAqKnNsb3Q7XG4gODU2Olx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XG4gODU3Olx0XG4gODU4Olx0XHRXQVJOX09OKHRlc3RfYml0KFdCX3JlZ2lzdGVyZWQsIFx1MDAyNmJkaS1cdTAwM2V3Yi5zdGF0ZSkpO1xuIDg1OTpcdFxuIDg2MDpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDg2MTpcdFx0cmFkaXhfdHJlZV9mb3JfZWFjaF9zbG90KHNsb3QsIFx1MDAyNmJkaS1cdTAwM2VjZ3diX3RyZWUsIFx1MDAyNml0ZXIsIDApXG4gODYyOlx0XHRcdGNnd2Jfa2lsbCgqc2xvdCk7XG4gODYzOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4NjQ6XHRcbiA4NjU6XHRcdG11dGV4X2xvY2soXHUwMDI2YmRpLVx1MDAzZWNnd2JfcmVsZWFzZV9tdXRleCk7XG4gODY2Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4gODY3Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2YmRpLVx1MDAzZXdiX2xpc3QpKSB7XG4gODY4Olx0XHRcdHdiID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZiZGktXHUwMDNld2JfbGlzdCwgc3RydWN0IGJkaV93cml0ZWJhY2ssXG4gODY5Olx0XHRcdFx0XHQgICAgICBiZGlfbm9kZSk7XG4gODcwOlx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDg3MTpcdFx0XHR3Yl9zaHV0ZG93bih3Yik7XG4gODcyOlx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4NzM6XHRcdH1cbiA4NzQ6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDg3NTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJkaS1cdTAwM2VjZ3diX3JlbGVhc2VfbXV0ZXgpO1xuIDg3NjpcdH1cbiA4Nzc6XHRcbiA4Nzg6XHQvKlxuIDg3OTpcdCAqIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4gLSB0cnkgdG8gcmVsZWFzZSBkeWluZyBjZ3dic1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGNnd2IgQ2xlYW51cCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlZmluaXRpb24gYW5kIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGl0IHJlbGllcyBvbiBmb3IgY2d3YiB3aXRoaW4gdGhlIGBtbS9iYWNraW5nLWRldi5jYCBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIHJlYWQgdGhyb3VnaCBgbW0vYmFja2luZy1kZXYuY2AgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB3aGVyZSBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGlzIGRlZmluZWQuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLgoKVG8gZG8gdGhhdCBxdWlja2x5IEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayB1cCBpbiBgbW0vYmFja2luZy1kZXYuY2AsIG9yIG1heWJlIEkmIzM5O2xsIG5lZWQgdG8gcmVhY2ggZm9yIGBncmVwYC4gSSYjMzk7bGwgbG9vayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBsaWtlIGBDT05GSUdfYCBvciBgI2lmZGVmYCB0byBpZGVudGlmeSBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IGNnd2IgaXMgaW50ZWdyYXRlZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jPTU5OD1zdGF0aWMgTElTVF9IRUFEKG9mZmxpbmVfY2d3YnMpO1xubW0vYmFja2luZy1kZXYuYzo1OTk6c3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubW0vYmFja2luZy1kZXYuYzo2MDA6c3RhdGljIERFQ0xBUkVfV09SSyhjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29yaywgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbik7XG5tbS9iYWNraW5nLWRldi5jLTYwMS1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTg1Mj1zdGF0aWMgdm9pZCBjZ3diX2JkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXG4tLVxubW0vYmFja2luZy1kZXYuYy04NzgtLypcbm1tL2JhY2tpbmctZGV2LmM6ODc5OiAqIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4gLSB0cnkgdG8gcmVsZWFzZSBkeWluZyBjZ3dic1xubW0vYmFja2luZy1kZXYuYy04ODAtICpcbi0tXG5tbS9iYWNraW5nLWRldi5jLTg4NC0gKi9cbm1tL2JhY2tpbmctZGV2LmM6ODg1OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0vYmFja2luZy1kZXYuYy04ODYte1xuLS1cbm1tL2JhY2tpbmctZGV2LmMtOTE0LVx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbm1tL2JhY2tpbmctZGV2LmM6OTE1Olx0XHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xubW0vYmFja2luZy1kZXYuYy05MTYtXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbi0tXG5tbS9iYWNraW5nLWRldi5jPTkzMz12b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtOTQzLVxubW0vYmFja2luZy1kZXYuYzo5NDQ6XHRxdWV1ZV93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNmNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrKTtcbm1tL2JhY2tpbmctZGV2LmMtOTQ1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBiYWNraW5nLWRldi5jYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiZWhhdmlvciBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcywgb2YgY291cnNlLCB0aGUgc291cmNlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIHRoZW4gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGBtbS9iYWNraW5nLWRldi5jYCBmaWxlIHRvIGNoZWNrIGZvciBhbnkgYCNpZmRlZmAgYmxvY2tzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBjb21waWxhdGlvbiBvciBleGVjdXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgbWFrZSBpdCBiZWhhdmUgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgY2lyY3Vtc3RhbmNlcy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmYCBibG9ja3MgY2FuIGNhdXNlIHN1YnRsZSBhbmQgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgaWYgeW91IGRvbiYjMzk7dCBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LWRlcGVuZGVudCBjb2RlIHBhdGhzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24mIzM5O3MgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yIG1pZ2h0IGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIGVudmlyb25tZW50LCBtb2R1bGUgcGFyYW1ldGVycywgb3Iga2VybmVsIGZlYXR1cmVzIHRoYXQgYXJlIGVuYWJsZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGFjdHVhbGx5IHdvcmtzIGluIGRpZmZlcmVudCBkZXBsb3ltZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jPTYyPXN0YXRpYyB2b2lkIGNvbGxlY3Rfd2Jfc3RhdHMoc3RydWN0IHdiX3N0YXRzICpzdGF0cyxcbi0tXG5tbS9iYWNraW5nLWRldi5jLTg1LVxubW0vYmFja2luZy1kZXYuYzo4NjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL2JhY2tpbmctZGV2LmMtODctc3RhdGljIHZvaWQgYmRpX2NvbGxlY3Rfc3RhdHMoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcbi0tXG5tbS9iYWNraW5nLWRldi5jPTE1OD1zdGF0aWMgdm9pZCB3Yl9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtMTc0LVx0XHQgICBcJiMzNDtzdGF0ZTogICAgICAgICAgICAgJTEwbHhcXG5cXG5cJiMzNDssXG5tbS9iYWNraW5nLWRldi5jOjE3NTojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL2JhY2tpbmctZGV2LmMtMTc2LVx0XHQgICBjZ3JvdXBfaW5vKHdiLVx1MDAzZW1lbWNnX2Nzcy1cdTAwM2VjZ3JvdXApLFxuLS1cbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNTg2LVxubW0vYmFja2luZy1kZXYuYzo1ODc6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS9iYWNraW5nLWRldi5jLTU4OC1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTk4NT1zdWJzeXNfaW5pdGNhbGwoY2d3Yl9pbml0KTtcbm1tL2JhY2tpbmctZGV2LmMtOTg2LVxubW0vYmFja2luZy1kZXYuYzo5ODc6I2Vsc2VcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXG5tbS9iYWNraW5nLWRldi5jLTk4OC1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTEwMDE9c3RhdGljIHZvaWQgY2d3Yl9yZW1vdmVfZnJvbV9iZGlfbGlzdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vYmFja2luZy1kZXYuYy0xMDA1LVxubW0vYmFja2luZy1kZXYuYzoxMDA2OiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbm1tL2JhY2tpbmctZGV2LmMtMTAwNy1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTAzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xubW0vbWVtY29udHJvbC5jLTEwNC1cbm1tL21lbWNvbnRyb2wuYzoxMDU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS9tZW1jb250cm9sLmMtMTA2LXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3NjI9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzc3NS1cbm1tL21lbWNvbnRyb2wuYzozNzc2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTM3NzctXG4tLVxubW0vbWVtY29udHJvbC5jPTM5NDU9dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zOTcxLVxubW0vbWVtY29udHJvbC5jOjM5NzI6I2Vsc2VcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXG5tbS9tZW1jb250cm9sLmMtMzk3My1cbi0tXG5tbS9tZW1jb250cm9sLmM9Mzk4Mz1zdGF0aWMgdm9pZCBtZW1jZ193Yl9kb21haW5fc2l6ZV9jaGFuZ2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzk4Ni1cbm1tL21lbWNvbnRyb2wuYzozOTg3OiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbm1tL21lbWNvbnRyb2wuYy0zOTg4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00MTQ3PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjAyLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG5tbS9tZW1jb250cm9sLmM6NDIwMzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00MjA0LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlY2d3Yl9saXN0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM4Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzODctXG5tbS9tZW1jb250cm9sLmM6NDM4ODojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00Mzg5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOylcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTExMz1zdHJ1Y3Qgd2JfZG9tYWluIGdsb2JhbF93Yl9kb21haW47XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0xMjEtXG5tbS9wYWdlLXdyaXRlYmFjay5jOjEyMjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTIzLVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MTU1PXN0YXRpYyB2b2lkIHdiX21pbl9tYXhfcmF0aW8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTgxLVxubW0vcGFnZS13cml0ZWJhY2suYzoxODI6I2Vsc2VcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE4My1cbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTIwOT1zdGF0aWMgdm9pZCB3Yl9taW5fbWF4X3JhdGlvKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yixcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIxNS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjE2OiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjE3LVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9NjA5PWludCB3Yl9kb21haW5faW5pdChzdHJ1Y3Qgd2JfZG9tYWluICpkb20sIGdmcF90IGdmcClcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTYyMS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6NjIyOiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vcGFnZS13cml0ZWJhY2suYy02MjMtdm9pZCB3Yl9kb21haW5fZXhpdChzdHJ1Y3Qgd2JfZG9tYWluICpkb20pXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0xNDcwPXN0YXRpYyB2b2lkIF9fd2JfdXBkYXRlX2JhbmR3aWR0aChzdHJ1Y3QgZGlydHlfdGhyb3R0bGVfY29udHJvbCAqZ2R0Yyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE0OTYtXHRcdC8qXG5tbS9wYWdlLXdyaXRlYmFjay5jOjE0OTc6XHRcdCAqIEBtZHRjIGlzIGFsd2F5cyBOVUxMIGlmICFDR1JPVVBfV1JJVEVCQUNLIGJ1dCB0aGVcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTQ5OC1cdFx0ICogY29tcGlsZXIgaGFzIG5vIHdheSB0byBmaWd1cmUgdGhhdCBvdXQuICBIZWxwIGl0LlxubW0vcGFnZS13cml0ZWJhY2suYy0xNDk5LVx0XHQgKi9cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MTUwMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9XUklURUJBQ0spIFx1MDAyNlx1MDAyNiBtZHRjKSB7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTE1MDEtXHRcdFx0ZG9tYWluX3VwZGF0ZV9kaXJ0eV9saW1pdChtZHRjLCBub3cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI0MD1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI0My1cdFx0cmV0dXJuIHRydWU7XG5tbS92bXNjYW4uYzoyNDQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS92bXNjYW4uYy0yNDUtXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdHJhY2luZyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gRGVmaW5pdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIGtub3cgaXQmIzM5O3MgKnNpbmd1bGFyKiwgbm90IGEgdmFyaWF0aW9uIGxpa2UgYHdvcmtmbmAsIHNvIHRoYXQgbmFycm93cyB0aGUgc2VhcmNoIHNsaWdodGx5LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIHdyaXRlYmFjayBtZWNoYW5pc21zLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgZnMvZnMtd3JpdGViYWNrLmNgLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0ZWJhY2stcmVsYXRlZCBmdW5jdGlvbnMuIElmIGl0JiMzOTtzICpub3QqIGluIGBmcy13cml0ZWJhY2suY2AsIHRoZW4gSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoLCBidXQgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBpdCB0aGVyZSBmaXJzdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2JcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmM9NzI2PXN0YXRpYyBib29sIGlzd19wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193Yixcbi0tXG5mcy9mcy13cml0ZWJhY2suYy03NTItICovXG5mcy9mcy13cml0ZWJhY2suYzo3NTM6Ym9vbCBjbGVhbnVwX29mZmxpbmVfY2d3YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG5mcy9mcy13cml0ZWJhY2suYy03NTQte1xuLS1cbmluY2x1ZGUvbGludXgvd3JpdGViYWNrLmg9MjEwPXZvaWQgY2dyb3VwX3dyaXRlYmFja191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oOjIxMTpib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTIxMi1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTg4NT1zdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9iYWNraW5nLWRldi5jLTkxNC1cdFx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG5tbS9iYWNraW5nLWRldi5jOjkxNTpcdFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcbm1tL2JhY2tpbmctZGV2LmMtOTE2LVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBhbmQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXNgIGluIGBmcy9mcy13cml0ZWJhY2suY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDc1My4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyB1cCB0byBhbmQsIGNydWNpYWxseSwgKndoeSogdGhleSBjaG9zZSB0byBlbXBsb3kgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgaW4gdGhhdCBjb250ZXh0LiBHaXZlbiB0aGUgZmlsZSYjMzk7cyBwdXJwb3NlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgb3BlcmF0aW9ucywgcG9zc2libHkgcmVsYXRlZCB0byBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgY2dyb3VwcyB3aXRoIHRoZSBmaWxlc3lzdGVtIHdyaXRlYmFjayBtZWNoYW5pc21zIGJlY2F1c2UgSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG51YW5jZSBsaWVzLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjbGVhbmluZyB1cCBvciBvdGhlcndpc2UgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIGEgY2dyb3VwJiMzOTtzIHdyaXRlYmFjayBjb250ZXh0IHdoZW4gdGhhdCBjZ3JvdXAgdHJhbnNpdGlvbnMgdG8gYW4gb2ZmbGluZSBzdGF0ZS4gVGhlIHVzZSBvZiBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xc2AgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlIGludm9sdmluZyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYW5kIGdyYWNlZnVsIHNodXRkb3duLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGlzIGlzIHBsYXlpbmcgb3V0LiBJcyB0aGlzIHRvIHByZXZlbnQgZGVhZGxvY2tzPyBBcmUgd2UgcHJvdGVjdGluZyBhZ2FpbnN0IHJhY2VzIHdpdGggdGFza3MgdGhhdCBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNncm91cD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBjcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQgaXMgYXQgcGxheSwgcHJvYmFibHkgdGllZCBpbnRvIFJDVSB1c2FnZSBhbmQgcG9zc2libGUgdGFzayByZXNjaGVkdWxpbmcsIHJlbGF0ZWQgdG8gdGhpcyBvZmZsaW5lIHRyYW5zaXRpb24gYW5kIHRoZSB3cml0ZWJhY2sgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDU6XHQvKipcbiA3NDY6XHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xuIDc0NzpcdCAqIEB3YjogdGFyZ2V0IHdiXG4gNzQ4Olx0ICpcbiA3NDk6XHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvciYjMzk7cyB3YiBpbiBvcmRlclxuIDc1MDpcdCAqIHRvIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgZHlpbmcgQHdiLiAgUmV0dXJucyAldHJ1ZSBpZiBub3QgYWxsIGlub2RlcyB3ZXJlXG4gNzUxOlx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxuIDc1MjpcdCAqL1xuIDc1MzpcdGJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIDc1NDpcdHtcbiA3NTU6XHRcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XG4gNzU2Olx0XHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XG4gNzU3Olx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xuIDc1ODpcdFx0aW50IG5yO1xuIDc1OTpcdFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XG4gNzYwOlx0XG4gNzYxOlx0XHRpc3cgPSBremFsbG9jX2ZsZXgoKmlzdywgaW5vZGVzLCBXQl9NQVhfSU5PREVTX1BFUl9JU1cpO1xuIDc2MjpcdFx0aWYgKCFpc3cpXG4gNzYzOlx0XHRcdHJldHVybiByZXN0YXJ0O1xuIDc2NDpcdFxuIDc2NTpcdFx0YXRvbWljX2luYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3NjY6XHRcbiA3Njc6XHRcdGZvciAobWVtY2dfY3NzID0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZXBhcmVudDsgbWVtY2dfY3NzO1xuIDc2ODpcdFx0ICAgICBtZW1jZ19jc3MgPSBtZW1jZ19jc3MtXHUwMDNlcGFyZW50KSB7XG4gNzY5Olx0XHRcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXHUwMDNlYmRpLCBtZW1jZ19jc3MsIEdGUF9LRVJORUwpO1xuIDc3MDpcdFx0XHRpZiAobmV3X3diKVxuIDc3MTpcdFx0XHRcdGJyZWFrO1xuIDc3MjpcdFx0fVxuIDc3MzpcdFx0aWYgKHVubGlrZWx5KCFuZXdfd2IpKVxuIDc3NDpcdFx0XHRuZXdfd2IgPSBcdTAwMjZ3Yi1cdTAwM2ViZGktXHUwMDNld2I7IC8qIHdiX2dldCgpIGlzIG5vb3AgZm9yIGJkaSYjMzk7cyB3YiAqL1xuIDc3NTpcdFxuIDc3NjpcdFx0bnIgPSAwO1xuIDc3NzpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzc4Olx0XHQvKlxuIDc3OTpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiA3ODA6XHRcdCAqIGNnd2JzIGZvciB0aG9zZSBpbm9kZXMgb25seSB3aXRoIGRpcnR5IHRpbWVzdGFtcHMuIE90aGVyd2lzZSwgdGhvc2VcbiA3ODE6XHRcdCAqIGlub2RlcyB3b24mIzM5O3QgYmUgd3JpdHRlbiBiYWNrIGZvciBhIGxvbmcgdGltZSB3aGVuIGxhenl0aW1lIGlzXG4gNzgyOlx0XHQgKiBlbmFibGVkLCBhbmQgdGh1cyBwaW5uaW5nIHRoZSBkeWluZyBjZ3dicy4gSXQgd29uJiMzOTt0IGJyZWFrIHRoZVxuIDc4MzpcdFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxuIDc4NDpcdFx0ICogYWNjb3VudGVkIGZvci5cbiA3ODU6XHRcdCAqL1xuIDc4NjpcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfYXR0YWNoZWQsIFx1MDAyNm5yKTtcbiA3ODc6XHRcdGlmICghcmVzdGFydClcbiA3ODg6XHRcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfZGlydHlfdGltZSxcbiA3ODk6XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnIpO1xuIDc5MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2d2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA3OTE6XHRcbiA3OTI6XHRcdC8qIG5vIGF0dGFjaGVkIGlub2Rlcz8gYmFpbCBvdXQgKi9cbiA3OTM6XHRcdGlmIChuciA9PSAwKSB7XG4gNzk0Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmFja2luZyBEZXZpY2UgQ2xlYW51cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSB0aGV5JiMzOTt2ZSB0d2Vha2VkIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCB3aXRoaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhpcyBsb29wIGNvbnN0cnVjdCwgc3BlY2lmaWNhbGx5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9yaWdpbmFsIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHdpdGggdGhpcyBuZXcgc3RydWN0dXJlOgoKYGBgYwoJCWRvIHsKCQkJY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOwoJCX0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7CmBgYAoKQSBmZXcgaW1tZWRpYXRlIG9ic2VydmF0aW9ucyBqdW1wIG91dCwgcmlnaHQ/IEZpcnN0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZXkgYXJlIG5vdyBjYWxsaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgICpiZWZvcmUqIHRoZSBpbml0aWFsIGNhbGwgdG8gYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gUHJldmlvdXNseSwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCB3YXMgZXhlY3V0ZWQgZmlyc3QsIGFuZCBgY29uZF9yZXNjaGVkKClgIHdhcyBvbmx5IGludm9rZWQgaWYgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBzaWduYWxlZCBhIG5lZWQgZm9yIHJlc2NoZWR1bGluZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZSB0byB0aGUgc2NoZWR1bGluZyBiZWhhdmlvci4KClNlY29uZCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgdGhleSYjMzk7cmUgdXNpbmcgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgYGNvbmRfcmVzY2hlZCgpYC4gIEdpdmVuIHRoZSBuYW1pbmcsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyByZWxhdGVzIHRvIFJDVSBxdWllc2NlbnQgc3RhdGUgY2hlY2tzLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB3ZSBhcmUgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIENHUk9VUF9XUklURUJBQ0sgYW5kIFJDVSBoZXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlIGBDR1JPVVBfV1JJVEVCQUNLYCBmZWF0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHRzIHRoaXMgaXMgcnVubmluZyBpbiB0byBiZSBhYmxlIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1dSSVRFQkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEyNT1jb25maWcgQkxLX0NHUk9VUFxuLS1cbmluaXQvS2NvbmZpZy0xMTQ2LVxuaW5pdC9LY29uZmlnOjExNDc6Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcbmluaXQvS2NvbmZpZy0xMTQ4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZT8gR2l2ZW4gdGhlIG5hdHVyZSBvZiB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGgsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdG9wLWxldmVsIG9wdGlvbnMuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gZm9jdXMgYXJvdW5kIGxpbmUgMTE0Ny4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXJlYSB0byB6ZXJvIGluIG9uIGZvciB0aGUgcHJvYmxlbSBJIHN1c3BlY3Qgd2UmIzM5O3JlIHNlZWluZy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlIGFuZCBzdGFydCBwaWVjaW5nIHRoaXMgcHV6emxlIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdE9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3JcbjExNDE6XHRcdGVuYWJsaW5nIHByb3BvcnRpb25hbCB3ZWlnaHQgZGl2aXNpb24gb2YgZGlzayBiYW5kd2lkdGggaW4gQ0ZRLCBzZXRcbjExNDI6XHRcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxuMTE0MzpcdFx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuMTE0NDpcdFxuMTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYyCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IENHUk9VUF9XUklURUJBQ0sgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBDR1JPVVBfV1JJVEVCQUNLYCwgZGVmYXVsdGluZyB0byAmIzM5O3kmIzM5OyBhbmQgZGVwZW5kaW5nIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCwgd2FycmFudHMgYSB0aG9yb3VnaCBsb29rLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGlzIGJvdGggKnJlYWNoYWJsZSogYW5kICp3b3J0aCBmdXp6aW5nKi4KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB3cml0ZWJhY2sgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY2dyb3VwIGNvbnRleHQgKGBtbS9iYWNraW5nLWRldi5jYCBhbmQgYXNzb2NpYXRlZCBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgKS4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXNlIGZlYXR1cmVzIGFyZSBzdGFuZGFyZCBmYXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRTsgY2dyb3VwcyB3aXRoIG1lbWNnLCBibGtjZywgYW5kIHdyaXRlYmFjaywgYWxvbmcgd2l0aCBjZ3JvdXAgb2ZmbGluaW5nIGFuZCB3cml0ZWJhY2ssIGFyZSBwYXRocyB0aGF0IHN5emthbGxlciBhY3RpdmVseSBleHBsb3Jlcy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgYWdhaW5zdCB0aGUgZXN0YWJsaXNoZWQgY3JpdGVyaWEuIFNlY3Rpb24gMyBvZiB0aGUgZnV6emluZyBndWlkZWxpbmVzIGhpZ2hsaWdodHMgbWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucyBhcyBhIGtleSBhcmVhLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHdyaXRlYmFjayBsb2dpYyDigJMgd2hpY2ggaXMgY29yZSBNTSDigJMgdGhpcyBmaXRzIHRoZSBiaWxsLiBSZWZhY3RvcmluZ3MgYW5kIGNvZGUgY2xlYW51cHMsIGFzIHBlciBTZWN0aW9uIDMsIGluICpyZWFjaGFibGUqIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcywgYXJlIGFsc28gdG8gYmUgZnV6emVkLiBBbmQgcGVyIFNlY3Rpb24gMSwgSSBzaG91bGRuJiMzOTt0IGJsaW5kbHkgdHJ1c3QgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciAmIzM0O3JlZmFjdG9yaW5nLiYjMzQ7CgpUaGUgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIGFsc28gaW1wb3J0YW50IHRvIGNoZWNrOiBJcyB0aGlzIG5vbi1rZXJuZWwvbm9uLWV4ZWN1dGFibGUgY29kZT8gTm8uIElzIHRoaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlPyBOby4gQXJlIHRoZSBleGVjdXRpb24gcGF0aHMgdW5yZWFjaGFibGU/IEFsc28gbm8uCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBtb2RpZmljYXRpb25zIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHdyaXRlYmFjayBsb2dpYyB3aXRoaW4gYSByZWFjaGFibGUgY2dyb3VwIGNvbnRleHQsIEkmIzM5O20gY29uY2x1ZGluZyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgSSBuZWVkIHRvIGRlZmluZSB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4KClRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UsIHRoZSBvbmVzIEkgbmVlZCB0byB6ZXJvIGluIG9uLCBhcmUgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpcyBub24tc3RhdGljIChhbmQgdGhlcmVmb3JlIHZpc2libGUpLCB3aGljaCBpdCBpcyAoaXQmIzM5O3Mgc3RhdGljKS4gSG93ZXZlciwgdGhpcyBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB3b3JrcXVldWUgY2FsbGJhY2sgZnVuY3Rpb25zIGxpa2UgdGhpcyBhcmUgdmVyeSBsaWtlbHkgdG8gaGF2ZSBzeW1ib2xzIGluIGthbGxzeW1zIHVubGVzcyB0aGV5IGFyZSBpbmxpbmVkIGludG8gbm90aGluZyAoYW5kIHRoaXMgaXNuJiMzOTt0OyBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIgcGFzc2VkIHRvIGBJTklUX1dPUktgL2BERUNMQVJFX1dPUktgLCBzbyBpdHMgYWRkcmVzcyBpcyBkZWZpbml0ZWx5IHRha2VuIGFuZCBub3QgaW5saW5lZCEpLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBgd2JfbWVtY2dfb2ZmbGluZWAgYW5kIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5pbmcuIFRoaXMgbmFycm93cyB0aGUgc2NvcGUuIFRoZXkgYXJlIG5vdCB1YmlxdWl0b3VzIGZ1bmN0aW9uczsgdGhleSBhcmUgdmVyeSBzcGVjaWZpYyB0byBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmluZy4KCkZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgLCBJJiMzOTtsbCBleHBsaWNpdGx5IG5lZWQgYENHUk9VUF9XUklURUJBQ0tgICh3aGljaCBkZXBlbmRzIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCksIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAuIEV4YW1pbmluZyBgbW0vYmFja2luZy1kZXYuY2AsIHRoZSBgI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBjb25maXJtcyB0aGlzIGRlcGVuZGVuY3kuCgpGaW5hbGx5LCBJJiMzOTtsbCBkb3VibGUtY2hlY2s6IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB0aGUgZGlmZiBtb2RpZmllcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgaW4gYG1tL2JhY2tpbmctZGV2LmNgLCBhbmQgdGhlIHJhdGlvbmFsZSBpcyBzb2xpZDogY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5pbmcgY2xlYW51cCBub3cgdXNlcyBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCwgYW5kIGl0IHRvdWNoZXMgY29yZSBNTS93cml0ZWJhY2sgbG9naWMgdGhhdCYjMzk7cyBleGVyY2lzZWQgd2hlbiBjZ3JvdXBzIGFyZSBkZXN0cm95ZWQvb2ZmbGluZWQgd2l0aCBhY3RpdmUgd3JpdGViYWNrLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgYW5kIGB3Yl9tZW1jZ19vZmZsaW5lYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYC4KClRpbWUgdG8gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7LAogICAgJiMzNDt3Yl9tZW1jZ19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmUgY2xlYW51cCB3b3JrZXIgbG9vcCBpbiBtbS9iYWNraW5nLWRldi5jLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSBiZWhhdmlvciB2aWEgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGR1cmluZyBvZmZsaW5lIGNnd2IgdGVhcmRvd24uIFRoaXMgY29kZSBpcyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAvIHdyaXRlYmFjayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIHVuZGVyIG1lbW9yeSBhbmQgSS9PIGxvYWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2ImIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5lIGNsZWFudXAgd29ya2VyIGxvb3AgaW4gbW0vYmFja2luZy1kZXYuYywgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgYmVoYXZpb3IgdmlhIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBkdXJpbmcgb2ZmbGluZSBjZ3diIHRlYXJkb3duLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgLyB3cml0ZWJhY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiB1bmRlciBtZW1vcnkgYW5kIEkvTyBsb2FkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGluIGBtbS9iYWNraW5nLWRldi5jYCBieSBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBsb29wIGZyb20gYHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpIGNvbmRfcmVzY2hlZCgpO2AgdG8gYGRvIHsgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOyB9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO2AuIFRoaXMgY2hhbmdlIGlzIHB1cmVseSByZWxhdGVkIHRvIHRhc2sgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSByZXBvcnRpbmcgZHVyaW5nIHdyaXRlYmFjayBjbGVhbnVwLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDMxZmY0Yjk4MjlmYTUxMDI1ZjZhZTNkNWQyM2E5YmM3Y2UyZGI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxOTowNjozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IGNlY2JjZjkwNjBhNjUuLjE4ZTk5OTA1M2JhZTAgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYmFja2luZy1kZXYuYwpAQCAtOTEwLDggJiM0Mzs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2Nnd2JfbG9jayk7Ci0JCXdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpCi0JCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCWRvIHsKJiM0MzsJCQljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiYjNDM7CQl9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpOwogCQlzcGluX2xvY2tfaXJxKCZhbXA7Y2d3Yl9sb2NrKTsKIAogCQl3Yl9wdXQod2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBmaXJpbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGlzIGluIGBtbS9iYWNraW5nLWRldi5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGJhY2tpbmcgZGV2aWNlIGNvZGUuIFNvIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgY2hhbmdpbmcgaG93IHRoZSBjbGVhbnVwIG9mIG9mZmxpbmUgQ0dXQnMgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYmFja2luZyBkZXZpY2VzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgc2ltcGxlIGB3aGlsZWAgbG9vcCB3aXRoIGEgYGRvLi4ud2hpbGVgIGxvb3AgYW5kIGFkZGVkIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLiBUaGF0IGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgYmVpbmcgbW9yZSBjb29wZXJhdGl2ZSB3aXRoIHRoZSBSQ1UgbWVjaGFuaXNtIGR1cmluZyBjbGVhbnVwLgoKT2theSwgbGV0JiMzOTtzIGdldCBhIGJyb2FkZXIgdmlldy4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayByZWFkLWZpbGUgb3IgZ3JlcHBlciBzZWFyY2ggb24gYG1tL2JhY2tpbmctZGV2LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFyb3VuZCB0aGlzIGZpbGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgdGhhdCBtaWdodCBiZSBzZW5zaXRpdmUgdG8gdGhlIGNoYW5nZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzaW5jZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjbGVhbnVwIGxvb3AgaW4gYSBjcml0aWNhbCBwYXRoLCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoYXQgYXJlYSB1c2luZyBLTVNBTi4gSXQgbWlnaHQgbm90IGJlIGEgaHVnZSByaXNrLCBidXQgd2l0aCBSQ1UgaW52b2x2ZWQsIGl0JiMzOTtzIHdvcnRoIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4OTA6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4OTE6XHRcbiA4OTI6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xuIDg5MzpcdFx0XHR3YiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b2ZmbGluZV9jZ3dicywgc3RydWN0IGJkaV93cml0ZWJhY2ssXG4gODk0Olx0XHRcdFx0XHQgICAgICBvZmZsaW5lX25vZGUpO1xuIDg5NTpcdFx0XHRsaXN0X21vdmUoXHUwMDI2d2ItXHUwMDNlb2ZmbGluZV9ub2RlLCBcdTAwMjZwcm9jZXNzZWQpO1xuIDg5NjpcdFxuIDg5NzpcdFx0XHQvKlxuIDg5ODpcdFx0XHQgKiBJZiB3YiBpcyBkaXJ0eSwgY2xlYW5pbmcgdXAgdGhlIHdyaXRlYmFjayBieSBzd2l0Y2hpbmdcbiA4OTk6XHRcdFx0ICogYXR0YWNoZWQgaW5vZGVzIHdpbGwgcmVzdWx0IGluIGFuIGVmZmVjdGl2ZSByZW1vdmFsIG9mIGFueVxuIDkwMDpcdFx0XHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24mIzM5O3QgdGhlIGdvYWwuICBJbnN0ZWFkLFxuIDkwMTpcdFx0XHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXG4gOTAyOlx0XHRcdCAqIHdpbGwgYmUgbGlrZWx5IGNvbXBsZXRlZC4gIElmIGluIHRoZSBtZWFudGltZSBzb21lIGlub2Rlc1xuIDkwMzpcdFx0XHQgKiB3aWxsIGdldCByZS1kaXJ0aWVkLCB0aGV5IHNob3VsZCBiZSBldmVudHVhbGx5IHN3aXRjaGVkIHRvXG4gOTA0Olx0XHRcdCAqIGEgbmV3IGNnd2IuXG4gOTA1Olx0XHRcdCAqL1xuIDkwNjpcdFx0XHRpZiAod2JfaGFzX2RpcnR5X2lvKHdiKSlcbiA5MDc6XHRcdFx0XHRjb250aW51ZTtcbiA5MDg6XHRcbiA5MDk6XHRcdFx0aWYgKCF3Yl90cnlnZXQod2IpKVxuIDkxMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDkxMTpcdFxuIDkxMjpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA5MTM6XHRcdFx0ZG8ge1xuIDkxNDpcdFx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiA5MTU6XHRcdFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcbiA5MTY6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkxNzpcdFxuIDkxODpcdFx0XHR3Yl9wdXQod2IpO1xuIDkxOTpcdFx0fVxuIDkyMDpcdFxuIDkyMTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnByb2Nlc3NlZCkpXG4gOTIyOlx0XHRcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2cHJvY2Vzc2VkLCBcdTAwMjZvZmZsaW5lX2Nnd2JzKTtcbiA5MjM6XHRcbiA5MjQ6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkyNTpcdH1cbiA5MjY6XHRcbiA5Mjc6XHQvKipcbiA5Mjg6XHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtY2cgYmVpbmcgb2ZmbGluZWRcbiA5Mjk6XHQgKiBAbWVtY2c6IG1lbWNnIGJlaW5nIG9mZmxpbmVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjEKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgY29kZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgd2UgaGFkIGEgYHdoaWxlYCBsb29wIGNhbGxpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKWAgYW5kIGBjb25kX3Jlc2NoZWQoKWAuIE5vdywgaXQmIzM5O3MgYSBgZG8td2hpbGVgIGxvb3Agd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIFJDVSBxdWllc2NlbnQgc3RhdGVzIGFuZCB2b2x1bnRhcnkgc2NoZWR1bGluZyBkdXJpbmcgdGhlIGNsZWFudXAgcHJvY2Vzcy4KCk15IGV4cGVydCBpbnN0aW5jdCBpcyB0byBjaGVjayBmb3IgcG90ZW50aWFsIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXNzdWVzLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOgoKMS4gICoqVXNlci1zcGFjZSBpbnRlcmFjdGlvbj8qKiBObywgbm90aGluZyBoZXJlIGludm9sdmVzIHBhc3Npbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGNhdXNlIGEgcHJvYmxlbS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vcGUuIFRoZSBjb2RlJiMzOTtzIGZsb3cgZG9lc24mIzM5O3QgcmVseSBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIHRvIG1ha2UgZGVjaXNpb25zLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uPyoqIE5vIGNvbXBsZXggYWxsb2NhdGlvbnMgaW4gdGhpcyBzbmlwcGV0LCBzbyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmVuJiMzOTt0IGEgY29uY2Vybi4KNC4gICoqQnVmZmVyIG1hbmlwdWxhdGlvbnMgb3Igb3V0LW9mLWJvdW5kcyByZWFkcz8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHNjaGVkdWxpbmcgYW5kIFJDVSBzdGF0ZXMuIE5vIGJ1ZmZlciBoYW5kbGluZyBpcyBnb2luZyBvbiBoZXJlLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIEtNU0FOIGNoZWNrIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoaXMgcGF0Y2ggaXMgYSBwdXJlbHkgaW50ZXJuYWwgdHdlYWsgZm9yIHNjaGVkdWxpbmcgd2l0aGluIGEgd29ya3F1ZXVlIHdvcmtlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIG5vIHVzZXItc3BhY2UgY29waWVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzYWZlIHRvIHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgYW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgaW4gYG1tL2JhY2tpbmctZGV2LmNgIGJ5IGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGxvb3AgZnJvbSBgd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSkgY29uZF9yZXNjaGVkKCk7YCB0byBgZG8geyBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7IH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7YC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IHJlbGF0ZWQgdG8gdGFzayBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIHJlcG9ydGluZyBkdXJpbmcgd3JpdGViYWNrIGNsZWFudXAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjozNS42MTk1OTU3NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc0Mzc5NDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gICAgXCJ3Yl9tZW1jZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgaW4gYG1tL2JhY2tpbmctZGV2LmNgIGJ5IGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGxvb3AgZnJvbSBgd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSkgY29uZF9yZXNjaGVkKCk7YCB0byBgZG8geyBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7IH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7YC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IHJlbGF0ZWQgdG8gdGFzayBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIHJlcG9ydGluZyBkdXJpbmcgd3JpdGViYWNrIGNsZWFudXAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5lIGNsZWFudXAgd29ya2VyIGxvb3AgaW4gbW0vYmFja2luZy1kZXYuYywgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgYmVoYXZpb3IgdmlhIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBkdXJpbmcgb2ZmbGluZSBjZ3diIHRlYXJkb3duLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgLyB3cml0ZWJhY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiB1bmRlciBtZW1vcnkgYW5kIEkvTyBsb2FkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjozNS42MTk2MDAzNTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjI4ODAzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMDMxZmY0Yjk4MjlmYTUxMDI1ZjZhZTNkNWQyM2E5YmM3Y2UyZGI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTk6MDY6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmNcXG5pbmRleCBjZWNiY2Y5MDYwYTY1Li4xOGU5OTkwNTNiYWUwIDEwMDY0NFxcbi0tLSBhL21tL2JhY2tpbmctZGV2LmNcXG4rKysgYi9tbS9iYWNraW5nLWRldi5jXFxuQEAgLTkxMCw4ICs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuLVxcdFxcdHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpXFxuLVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG4rXFx0XFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gXFxuIFxcdFxcdHdiX3B1dCh3Yik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjM3LjA0MzE0NDc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDg3Nzk0MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gICAgXCJ3Yl9tZW1jZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB3cml0ZWJhY2sgb2ZmbGluZSBjbGVhbnVwIHdvcmtlciBsb29wIGluIG1tL2JhY2tpbmctZGV2LmMsIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIGJlaGF2aW9yIHZpYSBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCkgZHVyaW5nIG9mZmxpbmUgY2d3YiB0ZWFyZG93bi4gVGhpcyBjb2RlIGlzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IC8gd3JpdGViYWNrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gdW5kZXIgbWVtb3J5IGFuZCBJL08gbG9hZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDMxZmY0Yjk4MjlmYTUxMDI1ZjZhZTNkNWQyM2E5YmM3Y2UyZGI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxOTowNjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jXG5pbmRleCBjZWNiY2Y5MDYwYTY1Li4xOGU5OTkwNTNiYWUwIDEwMDY0NFxuLS0tIGEvbW0vYmFja2luZy1kZXYuY1xuKysrIGIvbW0vYmFja2luZy1kZXYuY1xuQEAgLTkxMCw4ICs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4tXHRcdHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdGRvIHtcbitcdFx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4rXHRcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiBcbiBcdFx0d2JfcHV0KHdiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjM3LjA0MzE0NjAxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NjkxMjE4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkaWZmYC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGFsdGVyZWQgaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQgYXJvdW5kIGxpbmUgOTEwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgYHdoaWxlYCBsb29wIHdpdGggYGNvbmRfcmVzY2hlZCgpYCBpbnNpZGUuIE5vdywgaXQncyBhIGBkby4uLndoaWxlYCBsb29wLCBhbmQgdGhlIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGZ1bmN0aW9uIGhhcyBiZWVuIHN3YXBwZWQgaW4sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlIHdlcmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBibG9ja2luZyBpc3N1ZXMgaW4gdGhlIG9sZCBsb29wLCBwb3NzaWJseSByZWxhdGVkIHRvIGhvbGRpbmcgYSBsb2NrIChgY2d3Yl9sb2NrYCkuIFRoZSBzd2l0Y2ggdG8gYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgc3VnZ2VzdHMgdGhpcyBjaGFuZ2UgaXMgYWltZWQgYXQgYWxsb3dpbmcgb3RoZXIgdGFza3MgdG8gcnVuIG1vcmUgb2Z0ZW4sIGFuZCB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBzZWVtcyB0byBkZWFsIHdpdGggUkNVIChSZWFkLUNvcHktVXBkYXRlKSBzY2VuYXJpb3MuIFRvIGdldCBhIGJldHRlciBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgcXVpY2tseSByZWFkIHRoZSBmaWxlIGFyb3VuZCB0aGlzIHNlY3Rpb24uIENvbnRleHQgaXMga2V5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9ja2luZyBtZWNoYW5pc21zIHRvIGZ1bGx5IGFwcHJlY2lhdGUgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgY29tbWl0IG1lc3NhZ2VzIG9yIGRvY3VtZW50YXRpb247IHRoaXMgc3VidGxlIHNoaWZ0IGluIGJlaGF2aW9yIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDIuOTEyMjY5ODc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYmFja2luZy1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4ODA6XFx0ICpcXG4gODgxOlxcdCAqIFRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzIGJ5IHN3aXRjaGluZyBhdHRhY2hlZCBpbm9kZXMgdG8gdGhlIG5lYXJlc3RcXG4gODgyOlxcdCAqIGxpdmluZyBhbmNlc3RvcidzIHdyaXRlYmFjay4gUHJvY2Vzc2VkIHdicyBhcmUgcGxhY2VkIGF0IHRoZSBlbmRcXG4gODgzOlxcdCAqIG9mIHRoZSBsaXN0IHRvIGd1YXJhbnRlZSB0aGUgZm9yd2FyZCBwcm9ncmVzcy5cXG4gODg0OlxcdCAqL1xcbiA4ODU6XFx0c3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDg4NjpcXHR7XFxuIDg4NzpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XFxuIDg4ODpcXHRcXHRMSVNUX0hFQUQocHJvY2Vzc2VkKTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xcbiA4OTM6XFx0XFx0XFx0d2IgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZmxpbmVfbm9kZSk7XFxuIDg5NTpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNndiLVxcdTAwM2VvZmZsaW5lX25vZGUsIFxcdTAwMjZwcm9jZXNzZWQpO1xcbiA4OTY6XFx0XFxuIDg5NzpcXHRcXHRcXHQvKlxcbiA4OTg6XFx0XFx0XFx0ICogSWYgd2IgaXMgZGlydHksIGNsZWFuaW5nIHVwIHRoZSB3cml0ZWJhY2sgYnkgc3dpdGNoaW5nXFxuIDg5OTpcXHRcXHRcXHQgKiBhdHRhY2hlZCBpbm9kZXMgd2lsbCByZXN1bHQgaW4gYW4gZWZmZWN0aXZlIHJlbW92YWwgb2YgYW55XFxuIDkwMDpcXHRcXHRcXHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24ndCB0aGUgZ29hbC4gIEluc3RlYWQsXFxuIDkwMTpcXHRcXHRcXHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXFxuIDkwMjpcXHRcXHRcXHQgKiB3aWxsIGJlIGxpa2VseSBjb21wbGV0ZWQuICBJZiBpbiB0aGUgbWVhbnRpbWUgc29tZSBpbm9kZXNcXG4gOTAzOlxcdFxcdFxcdCAqIHdpbGwgZ2V0IHJlLWRpcnRpZWQsIHRoZXkgc2hvdWxkIGJlIGV2ZW50dWFsbHkgc3dpdGNoZWQgdG9cXG4gOTA0OlxcdFxcdFxcdCAqIGEgbmV3IGNnd2IuXFxuIDkwNTpcXHRcXHRcXHQgKi9cXG4gOTA2OlxcdFxcdFxcdGlmICh3Yl9oYXNfZGlydHlfaW8od2IpKVxcbiA5MDc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdFxcdGlmICghd2JfdHJ5Z2V0KHdiKSlcXG4gOTEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MTE6XFx0XFxuIDkxMjpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDkxMzpcXHRcXHRcXHRkbyB7XFxuIDkxNDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuIDkxNTpcXHRcXHRcXHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xcbiA5MTY6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0XFx0d2JfcHV0KHdiKTtcXG4gOTE5OlxcdFxcdH1cXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwcm9jZXNzZWQpKVxcbiA5MjI6XFx0XFx0XFx0bGlzdF9zcGxpY2VfdGFpbChcXHUwMDI2cHJvY2Vzc2VkLCBcXHUwMDI2b2ZmbGluZV9jZ3dicyk7XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTI1OlxcdH1cXG4gOTI2OlxcdFxcbiA5Mjc6XFx0LyoqXFxuIDkyODpcXHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2IncyBhc3NvY2lhdGVkIHdpdGggYSBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbiA5Mjk6XFx0ICogQG1lbWNnOiBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbiA5MzA6XFx0ICpcXG4gOTMxOlxcdCAqIEFsc28gcHJldmVudHMgY3JlYXRpb24gb2YgYW55IG5ldyB3YidzIGFzc29jaWF0ZWQgd2l0aCBAbWVtY2cuXFxuIDkzMjpcXHQgKi9cXG4gOTMzOlxcdHZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIDkzNDpcXHR7XFxuIDkzNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICptZW1jZ19jZ3diX2xpc3QgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdDtcXG4gOTM2OlxcdFxcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgKm5leHQ7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDkzOTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2IsIG5leHQsIG1lbWNnX2Nnd2JfbGlzdCwgbWVtY2dfbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDIuOTEyMzU3MjM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0MDQ0ODgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDR1dCIENsZWFudXAgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYGNnd2JzYCB0aGluZyBpcyBjbGVhbmVkIHVwLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgYW5kIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgZml0IGludG8gdGhlIHBpY3R1cmUuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jZSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgd2l0aCBsaW5lcyA4MDAgdG8gODgwIG9mIGBtbS9iYWNraW5nLWRldi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29udGV4dCBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIGFsbG93IG1lIHRvIGRldGVybWluZSB0aGVpciByb2xlIGluIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDQuOTUyODA3NjU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYmFja2luZy1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0XFx0YmxrY2dfY3NzID0gY2dyb3VwX2dldF9lX2NzcyhtZW1jZ19jc3MtXFx1MDAzZWNncm91cCwgXFx1MDAyNmlvX2NncnBfc3Vic3lzKTtcXG4gODAxOlxcdFxcdFxcdGlmICh1bmxpa2VseSh3Yi1cXHUwMDNlYmxrY2dfY3NzICE9IGJsa2NnX2NzcyB8fCAhd2JfdHJ5Z2V0KHdiKSkpXFxuIDgwMjpcXHRcXHRcXHRcXHR3YiA9IE5VTEw7XFxuIDgwMzpcXHRcXHRcXHRjc3NfcHV0KGJsa2NnX2Nzcyk7XFxuIDgwNDpcXHRcXHR9XFxuIDgwNTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0cmV0dXJuIHdiO1xcbiA4MDg6XFx0fVxcbiA4MDk6XFx0XFxuIDgxMDpcXHQvKipcXG4gODExOlxcdCAqIHdiX2dldF9jcmVhdGUgLSBnZXQgd2IgZm9yIGEgZ2l2ZW4gbWVtY2csIGNyZWF0ZSBpZiBuZWNlc3NhcnlcXG4gODEyOlxcdCAqIEBiZGk6IHRhcmdldCBiZGlcXG4gODEzOlxcdCAqIEBtZW1jZ19jc3M6IGNncm91cF9zdWJzeXNfc3RhdGUgb2YgdGhlIHRhcmdldCBtZW1jZyAobXVzdCBoYXZlIHBvc2l0aXZlIHJlZilcXG4gODE0OlxcdCAqIEBnZnA6IGFsbG9jYXRpb24gbWFzayB0byB1c2VcXG4gODE1OlxcdCAqXFxuIDgxNjpcXHQgKiBUcnkgdG8gZ2V0IHRoZSB3YiBmb3IgQG1lbWNnX2NzcyBvbiBAYmRpLiAgSWYgaXQgZG9lc24ndCBleGlzdCwgdHJ5IHRvXFxuIDgxNzpcXHQgKiBjcmVhdGUgb25lLiAgU2VlIHdiX2dldF9sb29rdXAoKSBmb3IgbW9yZSBkZXRhaWxzLlxcbiA4MTg6XFx0ICovXFxuIDgxOTpcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2JfZ2V0X2NyZWF0ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxcbiA4MjA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3MsXFxuIDgyMTpcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbiA4MjI6XFx0e1xcbiA4MjM6XFx0XFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKndiO1xcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRtaWdodF9hbGxvYyhnZnApO1xcbiA4MjY6XFx0XFxuIDgyNzpcXHRcXHRkbyB7XFxuIDgyODpcXHRcXHRcXHR3YiA9IHdiX2dldF9sb29rdXAoYmRpLCBtZW1jZ19jc3MpO1xcbiA4Mjk6XFx0XFx0fSB3aGlsZSAoIXdiIFxcdTAwMjZcXHUwMDI2ICFjZ3diX2NyZWF0ZShiZGksIG1lbWNnX2NzcywgZ2ZwKSk7XFxuIDgzMDpcXHRcXG4gODMxOlxcdFxcdHJldHVybiB3YjtcXG4gODMyOlxcdH1cXG4gODMzOlxcdFxcbiA4MzQ6XFx0c3RhdGljIGludCBjZ3diX2JkaV9pbml0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXFxuIDgzNTpcXHR7XFxuIDgzNjpcXHRcXHRpbnQgcmV0O1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRJTklUX1JBRElYX1RSRUUoXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl90cmVlLCBHRlBfQVRPTUlDKTtcXG4gODM5OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl9yZWxlYXNlX211dGV4KTtcXG4gODQwOlxcdFxcdGluaXRfcndzZW0oXFx1MDAyNmJkaS1cXHUwMDNld2Jfc3dpdGNoX3J3c2VtKTtcXG4gODQxOlxcdFxcbiA4NDI6XFx0XFx0cmV0ID0gd2JfaW5pdChcXHUwMDI2YmRpLVxcdTAwM2V3YiwgYmRpLCBHRlBfS0VSTkVMKTtcXG4gODQzOlxcdFxcdGlmICghcmV0KSB7XFxuIDg0NDpcXHRcXHRcXHRiZGktXFx1MDAzZXdiLm1lbWNnX2NzcyA9IFxcdTAwMjZyb290X21lbV9jZ3JvdXAtXFx1MDAzZWNzcztcXG4gODQ1OlxcdFxcdFxcdGJkaS1cXHUwMDNld2IuYmxrY2dfY3NzID0gYmxrY2dfcm9vdF9jc3M7XFxuIDg0NjpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmJkaS1cXHUwMDNld2Iuc3dpdGNoX3dvcmssIGlub2RlX3N3aXRjaF93YnNfd29ya19mbik7XFxuIDg0NzpcXHRcXHRcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNmJkaS1cXHUwMDNld2Iuc3dpdGNoX3dic19jdHhzKTtcXG4gODQ4OlxcdFxcdH1cXG4gODQ5OlxcdFxcdHJldHVybiByZXQ7XFxuIDg1MDpcXHR9XFxuIDg1MTpcXHRcXG4gODUyOlxcdHN0YXRpYyB2b2lkIGNnd2JfYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSlcXG4gODUzOlxcdHtcXG4gODU0OlxcdFxcdHN0cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRlcjtcXG4gODU1OlxcdFxcdHZvaWQgKipzbG90O1xcbiA4NTY6XFx0XFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKndiO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRXQVJOX09OKHRlc3RfYml0KFdCX3JlZ2lzdGVyZWQsIFxcdTAwMjZiZGktXFx1MDAzZXdiLnN0YXRlKSk7XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg2MTpcXHRcXHRyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl90cmVlLCBcXHUwMDI2aXRlciwgMClcXG4gODYyOlxcdFxcdFxcdGNnd2Jfa2lsbCgqc2xvdCk7XFxuIDg2MzpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl9yZWxlYXNlX211dGV4KTtcXG4gODY2OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg2NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNmJkaS1cXHUwMDNld2JfbGlzdCkpIHtcXG4gODY4OlxcdFxcdFxcdHdiID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2YmRpLVxcdTAwM2V3Yl9saXN0LCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gODY5OlxcdFxcdFxcdFxcdFxcdCAgICAgIGJkaV9ub2RlKTtcXG4gODcwOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gODcxOlxcdFxcdFxcdHdiX3NodXRkb3duKHdiKTtcXG4gODcyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg3MzpcXHRcXHR9XFxuIDg3NDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg3NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl9yZWxlYXNlX211dGV4KTtcXG4gODc2OlxcdH1cXG4gODc3OlxcdFxcbiA4Nzg6XFx0LypcXG4gODc5OlxcdCAqIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4gLSB0cnkgdG8gcmVsZWFzZSBkeWluZyBjZ3dic1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjo0NC45NTI5MDM4NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM0OTMwODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgY2d3YiBDbGVhbnVwIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlZmluaXRpb24gYW5kIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGl0IHJlbGllcyBvbiBmb3IgY2d3YiB3aXRoaW4gdGhlIGBtbS9iYWNraW5nLWRldi5jYCBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgZmlsZSBpdHNlbGYuIEknbGwgcmVhZCB0aHJvdWdoIGBtbS9iYWNraW5nLWRldi5jYCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHdoZXJlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgaXMgZGVmaW5lZC4gVGhlbiwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy5cblxuVG8gZG8gdGhhdCBxdWlja2x5IEknbGwgbmVlZCB0byBnbyBiYWNrIHVwIGluIGBtbS9iYWNraW5nLWRldi5jYCwgb3IgbWF5YmUgSSdsbCBuZWVkIHRvIHJlYWNoIGZvciBgZ3JlcGAuIEknbGwgbG9vayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBsaWtlIGBDT05GSUdfYCBvciBgI2lmZGVmYCB0byBpZGVudGlmeSBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IGNnd2IgaXMgaW50ZWdyYXRlZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkzMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDYuNzg3ODM2OTM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Njg0NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9iYWNraW5nLWRldi5jPTU5OD1zdGF0aWMgTElTVF9IRUFEKG9mZmxpbmVfY2d3YnMpO1xcbm1tL2JhY2tpbmctZGV2LmM6NTk5OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5tbS9iYWNraW5nLWRldi5jOjYwMDpzdGF0aWMgREVDTEFSRV9XT1JLKGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrLCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKTtcXG5tbS9iYWNraW5nLWRldi5jLTYwMS1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9ODUyPXN0YXRpYyB2b2lkIGNnd2JfYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSlcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODc4LS8qXFxubW0vYmFja2luZy1kZXYuYzo4Nzk6ICogY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiAtIHRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzXFxubW0vYmFja2luZy1kZXYuYy04ODAtICpcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODg0LSAqL1xcbm1tL2JhY2tpbmctZGV2LmM6ODg1OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL2JhY2tpbmctZGV2LmMtODg2LXtcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTE0LVxcdFxcdFxcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG5tbS9iYWNraW5nLWRldi5jOjkxNTpcXHRcXHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xcbm1tL2JhY2tpbmctZGV2LmMtOTE2LVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTkzMz12b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy05NDMtXFxubW0vYmFja2luZy1kZXYuYzo5NDQ6XFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmspO1xcbm1tL2JhY2tpbmctZGV2LmMtOTQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDYuODQ0NTI2NTg2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NTc3MjIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBiYWNraW5nLWRldi5jYCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJlaGF2aW9yIG9mIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzLCBvZiBjb3Vyc2UsIHRoZSBzb3VyY2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQuIEknbGwgbmVlZCB0byB0aGVuIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgbW0vYmFja2luZy1kZXYuY2AgZmlsZSB0byBjaGVjayBmb3IgYW55IGAjaWZkZWZgIGJsb2NrcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgY29tcGlsYXRpb24gb3IgZXhlY3V0aW9uLiBJJ20gbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgbWFrZSBpdCBiZWhhdmUgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgY2lyY3Vtc3RhbmNlcy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmYCBibG9ja3MgY2FuIGNhdXNlIHN1YnRsZSBhbmQgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgaWYgeW91IGRvbid0IGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQtZGVwZW5kZW50IGNvZGUgcGF0aHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbidzIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBtaWdodCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgbW9kdWxlIHBhcmFtZXRlcnMsIG9yIGtlcm5lbCBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSBhY3R1YWxseSB3b3JrcyBpbiBkaWZmZXJlbnQgZGVwbG95bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjo0OC45NDAzMDA1MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTQ4MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2JhY2tpbmctZGV2LmM9NjI9c3RhdGljIHZvaWQgY29sbGVjdF93Yl9zdGF0cyhzdHJ1Y3Qgd2Jfc3RhdHMgKnN0YXRzLFxcbi0tXFxubW0vYmFja2luZy1kZXYuYy04NS1cXG5tbS9iYWNraW5nLWRldi5jOjg2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL2JhY2tpbmctZGV2LmMtODctc3RhdGljIHZvaWQgYmRpX2NvbGxlY3Rfc3RhdHMoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9MTU4PXN0YXRpYyB2b2lkIHdiX3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTE3NC1cXHRcXHQgICBcXFwic3RhdGU6ICAgICAgICAgICAgICUxMGx4XFxcXG5cXFxcblxcXCIsXFxubW0vYmFja2luZy1kZXYuYzoxNzU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vYmFja2luZy1kZXYuYy0xNzYtXFx0XFx0ICAgY2dyb3VwX2lubyh3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VjZ3JvdXApLFxcbi0tXFxubW0vYmFja2luZy1kZXYuYz01ODA9c3RhdGljIHZvaWQgd2JfZXhpdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTU4Ni1cXG5tbS9iYWNraW5nLWRldi5jOjU4NzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9iYWNraW5nLWRldi5jLTU4OC1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9OTg1PXN1YnN5c19pbml0Y2FsbChjZ3diX2luaXQpO1xcbm1tL2JhY2tpbmctZGV2LmMtOTg2LVxcbm1tL2JhY2tpbmctZGV2LmM6OTg3OiNlbHNlXFx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cXG5tbS9iYWNraW5nLWRldi5jLTk4OC1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9MTAwMT1zdGF0aWMgdm9pZCBjZ3diX3JlbW92ZV9mcm9tX2JkaV9saXN0KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtMTAwNS1cXG5tbS9iYWNraW5nLWRldi5jOjEwMDY6I2VuZGlmXFx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cXG5tbS9iYWNraW5nLWRldi5jLTEwMDctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTAzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xcbm1tL21lbWNvbnRyb2wuYy0xMDQtXFxubW0vbWVtY29udHJvbC5jOjEwNTojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtMTA2LXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzc2Mj1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM3NzUtXFxubW0vbWVtY29udHJvbC5jOjM3NzY6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTM3NzctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzk0NT12b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzk3MS1cXG5tbS9tZW1jb250cm9sLmM6Mzk3MjojZWxzZVxcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXFxubW0vbWVtY29udHJvbC5jLTM5NzMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzk4Mz1zdGF0aWMgdm9pZCBtZW1jZ193Yl9kb21haW5fc2l6ZV9jaGFuZ2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zOTg2LVxcbm1tL21lbWNvbnRyb2wuYzozOTg3OiNlbmRpZlxcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXFxubW0vbWVtY29udHJvbC5jLTM5ODgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDE0Nz1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjAyLVxcdG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQgPSAtMTtcXG5tbS9tZW1jb250cm9sLmM6NDIwMzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDIwNC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM4Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM4Ny1cXG5tbS9tZW1jb250cm9sLmM6NDM4ODojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDM4OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTExMz1zdHJ1Y3Qgd2JfZG9tYWluIGdsb2JhbF93Yl9kb21haW47XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTEyMS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjEyMjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTEyMy1cXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9MTU1PXN0YXRpYyB2b2lkIHdiX21pbl9tYXhfcmF0aW8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0xODEtXFxubW0vcGFnZS13cml0ZWJhY2suYzoxODI6I2Vsc2VcXHQvKiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSyAqL1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTgzLVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yMDk9c3RhdGljIHZvaWQgd2JfbWluX21heF9yYXRpbyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIxNS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjIxNjojZW5kaWZcXHQvKiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSyAqL1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjE3LVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz02MDk9aW50IHdiX2RvbWFpbl9pbml0KHN0cnVjdCB3Yl9kb21haW4gKmRvbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy02MjEtXFxubW0vcGFnZS13cml0ZWJhY2suYzo2MjI6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vcGFnZS13cml0ZWJhY2suYy02MjMtdm9pZCB3Yl9kb21haW5fZXhpdChzdHJ1Y3Qgd2JfZG9tYWluICpkb20pXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTE0NzA9c3RhdGljIHZvaWQgX193Yl91cGRhdGVfYmFuZHdpZHRoKHN0cnVjdCBkaXJ0eV90aHJvdHRsZV9jb250cm9sICpnZHRjLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0xNDk2LVxcdFxcdC8qXFxubW0vcGFnZS13cml0ZWJhY2suYzoxNDk3OlxcdFxcdCAqIEBtZHRjIGlzIGFsd2F5cyBOVUxMIGlmICFDR1JPVVBfV1JJVEVCQUNLIGJ1dCB0aGVcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE0OTgtXFx0XFx0ICogY29tcGlsZXIgaGFzIG5vIHdheSB0byBmaWd1cmUgdGhhdCBvdXQuICBIZWxwIGl0Llxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTQ5OS1cXHRcXHQgKi9cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjE1MDA6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9XUklURUJBQ0spIFxcdTAwMjZcXHUwMDI2IG1kdGMpIHtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE1MDEtXFx0XFx0XFx0ZG9tYWluX3VwZGF0ZV9kaXJ0eV9saW1pdChtZHRjLCBub3cpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjQwPXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNDMtXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vdm1zY2FuLmM6MjQ0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL3Ztc2Nhbi5jLTI0NS1cXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDguOTkwNDUyNDkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjUzMzk4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0cmFjaW5nIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIGtub3cgaXQncyAqc2luZ3VsYXIqLCBub3QgYSB2YXJpYXRpb24gbGlrZSBgd29ya2ZuYCwgc28gdGhhdCBuYXJyb3dzIHRoZSBzZWFyY2ggc2xpZ2h0bHkuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gd3JpdGViYWNrIG1lY2hhbmlzbXMsIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYGZzL2ZzLXdyaXRlYmFjay5jYC4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0ZWJhY2stcmVsYXRlZCBmdW5jdGlvbnMuIElmIGl0J3MgKm5vdCogaW4gYGZzLXdyaXRlYmFjay5jYCwgdGhlbiBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCwgYnV0IGxldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBpdCB0aGVyZSBmaXJzdCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY5NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjUxLjE1NTc5NTMyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzYzMDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbGVhbnVwX29mZmxpbmVfY2d3YlxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZzLXdyaXRlYmFjay5jPTcyNj1zdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy03NTItICovXFxuZnMvZnMtd3JpdGViYWNrLmM6NzUzOmJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbmZzL2ZzLXdyaXRlYmFjay5jLTc1NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oPTIxMD12b2lkIGNncm91cF93cml0ZWJhY2tfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmluY2x1ZGUvbGludXgvd3JpdGViYWNrLmg6MjExOmJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTtcXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTIxMi1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9ODg1PXN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy05MTQtXFx0XFx0XFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xcbm1tL2JhY2tpbmctZGV2LmM6OTE1OlxcdFxcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XFxubW0vYmFja2luZy1kZXYuYy05MTYtXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NTMuMzIzNDMxMjE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MjQ4MzkyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGFuZCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xc2AgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDc1My4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyB1cCB0byBhbmQsIGNydWNpYWxseSwgKndoeSogdGhleSBjaG9zZSB0byBlbXBsb3kgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgaW4gdGhhdCBjb250ZXh0LiBHaXZlbiB0aGUgZmlsZSdzIHB1cnBvc2UsIGl0J3MgcHJldHR5IGNsZWFyIHdlJ3JlIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgb3BlcmF0aW9ucywgcG9zc2libHkgcmVsYXRlZCB0byBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgZnVuY3Rpb25hbGl0eS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBjZ3JvdXBzIHdpdGggdGhlIGZpbGVzeXN0ZW0gd3JpdGViYWNrIG1lY2hhbmlzbXMgYmVjYXVzZSBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBudWFuY2UgbGllcy4gSSBhbnRpY2lwYXRlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gY2xlYW5pbmcgdXAgb3Igb3RoZXJ3aXNlIG1hbmFnaW5nIHRoZSBzdGF0ZSBvZiBhIGNncm91cCdzIHdyaXRlYmFjayBjb250ZXh0IHdoZW4gdGhhdCBjZ3JvdXAgdHJhbnNpdGlvbnMgdG8gYW4gb2ZmbGluZSBzdGF0ZS4gVGhlIHVzZSBvZiBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xc2AgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlIGludm9sdmluZyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYW5kIGdyYWNlZnVsIHNodXRkb3duLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgaXMgcGxheWluZyBvdXQuIElzIHRoaXMgdG8gcHJldmVudCBkZWFkbG9ja3M/IEFyZSB3ZSBwcm90ZWN0aW5nIGFnYWluc3QgcmFjZXMgd2l0aCB0YXNrcyB0aGF0IG1heSBzdGlsbCBiZSBhY2Nlc3NpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2dyb3VwPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50IGlzIGF0IHBsYXksIHByb2JhYmx5IHRpZWQgaW50byBSQ1UgdXNhZ2UgYW5kIHBvc3NpYmxlIHRhc2sgcmVzY2hlZHVsaW5nLCByZWxhdGVkIHRvIHRoaXMgb2ZmbGluZSB0cmFuc2l0aW9uIGFuZCB0aGUgd3JpdGViYWNrIG9wZXJhdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NTcuMjQ4MjcyNzg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0LyoqXFxuIDc0NjpcXHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xcbiA3NDc6XFx0ICogQHdiOiB0YXJnZXQgd2JcXG4gNzQ4OlxcdCAqXFxuIDc0OTpcXHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvcidzIHdiIGluIG9yZGVyXFxuIDc1MDpcXHQgKiB0byBldmVudHVhbGx5IHJlbGVhc2UgdGhlIGR5aW5nIEB3Yi4gIFJldHVybnMgJXRydWUgaWYgbm90IGFsbCBpbm9kZXMgd2VyZVxcbiA3NTE6XFx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxcbiA3NTI6XFx0ICovXFxuIDc1MzpcXHRib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4gNzU0OlxcdHtcXG4gNzU1OlxcdFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XFxuIDc1NjpcXHRcXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XFxuIDc1NzpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xcbiA3NTg6XFx0XFx0aW50IG5yO1xcbiA3NTk6XFx0XFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XFxuIDc2MDpcXHRcXG4gNzYxOlxcdFxcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIFdCX01BWF9JTk9ERVNfUEVSX0lTVyk7XFxuIDc2MjpcXHRcXHRpZiAoIWlzdylcXG4gNzYzOlxcdFxcdFxcdHJldHVybiByZXN0YXJ0O1xcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0Zm9yIChtZW1jZ19jc3MgPSB3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQ7IG1lbWNnX2NzcztcXG4gNzY4OlxcdFxcdCAgICAgbWVtY2dfY3NzID0gbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQpIHtcXG4gNzY5OlxcdFxcdFxcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXFx1MDAzZWJkaSwgbWVtY2dfY3NzLCBHRlBfS0VSTkVMKTtcXG4gNzcwOlxcdFxcdFxcdGlmIChuZXdfd2IpXFxuIDc3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzcyOlxcdFxcdH1cXG4gNzczOlxcdFxcdGlmICh1bmxpa2VseSghbmV3X3diKSlcXG4gNzc0OlxcdFxcdFxcdG5ld193YiA9IFxcdTAwMjZ3Yi1cXHUwMDNlYmRpLVxcdTAwM2V3YjsgLyogd2JfZ2V0KCkgaXMgbm9vcCBmb3IgYmRpJ3Mgd2IgKi9cXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0bnIgPSAwO1xcbiA3Nzc6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzc4OlxcdFxcdC8qXFxuIDc3OTpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcbiA3ODA6XFx0XFx0ICogY2d3YnMgZm9yIHRob3NlIGlub2RlcyBvbmx5IHdpdGggZGlydHkgdGltZXN0YW1wcy4gT3RoZXJ3aXNlLCB0aG9zZVxcbiA3ODE6XFx0XFx0ICogaW5vZGVzIHdvbid0IGJlIHdyaXR0ZW4gYmFjayBmb3IgYSBsb25nIHRpbWUgd2hlbiBsYXp5dGltZSBpc1xcbiA3ODI6XFx0XFx0ICogZW5hYmxlZCwgYW5kIHRodXMgcGlubmluZyB0aGUgZHlpbmcgY2d3YnMuIEl0IHdvbid0IGJyZWFrIHRoZVxcbiA3ODM6XFx0XFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxcbiA3ODQ6XFx0XFx0ICogYWNjb3VudGVkIGZvci5cXG4gNzg1OlxcdFxcdCAqL1xcbiA3ODY6XFx0XFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFxcdTAwMjZ3Yi1cXHUwMDNlYl9hdHRhY2hlZCwgXFx1MDAyNm5yKTtcXG4gNzg3OlxcdFxcdGlmICghcmVzdGFydClcXG4gNzg4OlxcdFxcdFxcdHJlc3RhcnQgPSBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKG5ld193YiwgaXN3LCBcXHUwMDI2d2ItXFx1MDAzZWJfZGlydHlfdGltZSxcXG4gNzg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bnIpO1xcbiA3OTA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNndiLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHQvKiBubyBhdHRhY2hlZCBpbm9kZXM/IGJhaWwgb3V0ICovXFxuIDc5MzpcXHRcXHRpZiAobnIgPT0gMCkge1xcbiA3OTQ6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjU3LjI0ODQxOTgwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDkzNjAxNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmFja2luZyBEZXZpY2UgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgdGhleSd2ZSB0d2Vha2VkIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCB3aXRoaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhpcyBsb29wIGNvbnN0cnVjdCwgc3BlY2lmaWNhbGx5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9yaWdpbmFsIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHdpdGggdGhpcyBuZXcgc3RydWN0dXJlOlxuXG5gYGBjXG5cdFx0ZG8ge1xuXHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuXHRcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XG5gYGBcblxuQSBmZXcgaW1tZWRpYXRlIG9ic2VydmF0aW9ucyBqdW1wIG91dCwgcmlnaHQ/IEZpcnN0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZXkgYXJlIG5vdyBjYWxsaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgICpiZWZvcmUqIHRoZSBpbml0aWFsIGNhbGwgdG8gYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gUHJldmlvdXNseSwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCB3YXMgZXhlY3V0ZWQgZmlyc3QsIGFuZCBgY29uZF9yZXNjaGVkKClgIHdhcyBvbmx5IGludm9rZWQgaWYgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBzaWduYWxlZCBhIG5lZWQgZm9yIHJlc2NoZWR1bGluZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZSB0byB0aGUgc2NoZWR1bGluZyBiZWhhdmlvci5cblxuU2Vjb25kLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB0aGV5J3JlIHVzaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGBjb25kX3Jlc2NoZWQoKWAuICBHaXZlbiB0aGUgbmFtaW5nLCBJJ20gZ3Vlc3NpbmcgdGhpcyByZWxhdGVzIHRvIFJDVSBxdWllc2NlbnQgc3RhdGUgY2hlY2tzLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB3ZSBhcmUgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIENHUk9VUF9XUklURUJBQ0sgYW5kIFJDVSBoZXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgYENHUk9VUF9XUklURUJBQ0tgIGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udGV4dHMgdGhpcyBpcyBydW5uaW5nIGluIHRvIGJlIGFibGUgdG8gYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MDAuMzQyMDI1MjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjcyMDAzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9XUklURUJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMjU9Y29uZmlnIEJMS19DR1JPVVBcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTQ2LVxcbmluaXQvS2NvbmZpZzoxMTQ3OmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXFxuaW5pdC9LY29uZmlnLTExNDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzowMi4wMDkyMzAzNTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4Nzc0NzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0b3AtbGV2ZWwgb3B0aW9ucy4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byBmb2N1cyBhcm91bmQgbGluZSAxMTQ3LiBUaGF0J3MgYSByZWFzb25hYmxlIGFyZWEgdG8gemVybyBpbiBvbiBmb3IgdGhlIHByb2JsZW0gSSBzdXNwZWN0IHdlJ3JlIHNlZWluZy4gVGltZSB0byBzZWUgd2hhdCdzIGRlZmluZWQgdGhlcmUgYW5kIHN0YXJ0IHBpZWNpbmcgdGhpcyBwdXp6bGUgdG9nZXRoZXIuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MDMuOTk2OTgwMDAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0MDpcXHRcXHRPbmUgbmVlZHMgdG8gYWxzbyBlbmFibGUgYWN0dWFsIElPIGNvbnRyb2xsaW5nIGxvZ2ljL3BvbGljeS4gRm9yXFxuMTE0MTpcXHRcXHRlbmFibGluZyBwcm9wb3J0aW9uYWwgd2VpZ2h0IGRpdmlzaW9uIG9mIGRpc2sgYmFuZHdpZHRoIGluIENGUSwgc2V0XFxuMTE0MjpcXHRcXHRDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQ9eTsgZm9yIGVuYWJsaW5nIHRocm90dGxpbmcgcG9saWN5LCBzZXRcXG4xMTQzOlxcdFxcdENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS5cXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExNDY6XFx0XFxuMTE0NzpcXHRjb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbjExNDg6XFx0XFx0Ym9vbFxcbjExNDk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DRyBcXHUwMDI2XFx1MDAyNiBCTEtfQ0dST1VQXFxuMTE1MDpcXHRcXHRkZWZhdWx0IHlcXG4xMTUxOlxcdFxcbjExNTI6XFx0bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG4xMTUzOlxcdFxcdGJvb2wgXFxcIkNQVSBjb250cm9sbGVyXFxcIlxcbjExNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTE1NTpcXHRcXHRoZWxwXFxuMTE1NjpcXHRcXHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxcbjExNTc6XFx0XFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcXG4xMTU4OlxcdFxcdCAgdGFza3MuXFxuMTE1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MDMuOTk3MDk3MjYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NDQzODM5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBDR1JPVVBfV1JJVEVCQUNLIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENHUk9VUF9XUklURUJBQ0tgLCBkZWZhdWx0aW5nIHRvICd5JyBhbmQgZGVwZW5kaW5nIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCwgd2FycmFudHMgYSB0aG9yb3VnaCBsb29rLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGlzIGJvdGggKnJlYWNoYWJsZSogYW5kICp3b3J0aCBmdXp6aW5nKi5cblxuSSdtIGZvY3VzaW5nIG9uIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgd3JpdGViYWNrIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNncm91cCBjb250ZXh0IChgbW0vYmFja2luZy1kZXYuY2AgYW5kIGFzc29jaWF0ZWQgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCkuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBmZWF0dXJlcyBhcmUgc3RhbmRhcmQgZmFyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0U7IGNncm91cHMgd2l0aCBtZW1jZywgYmxrY2csIGFuZCB3cml0ZWJhY2ssIGFsb25nIHdpdGggY2dyb3VwIG9mZmxpbmluZyBhbmQgd3JpdGViYWNrLCBhcmUgcGF0aHMgdGhhdCBzeXprYWxsZXIgYWN0aXZlbHkgZXhwbG9yZXMuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuXG5cbk5vdywgbGV0J3MgYXNzZXNzIGFnYWluc3QgdGhlIGVzdGFibGlzaGVkIGNyaXRlcmlhLiBTZWN0aW9uIDMgb2YgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBoaWdobGlnaHRzIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMgYXMgYSBrZXkgYXJlYS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHdyaXRlYmFjayBsb2dpYyDigJMgd2hpY2ggaXMgY29yZSBNTSDigJMgdGhpcyBmaXRzIHRoZSBiaWxsLiBSZWZhY3RvcmluZ3MgYW5kIGNvZGUgY2xlYW51cHMsIGFzIHBlciBTZWN0aW9uIDMsIGluICpyZWFjaGFibGUqIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcywgYXJlIGFsc28gdG8gYmUgZnV6emVkLiBBbmQgcGVyIFNlY3Rpb24gMSwgSSBzaG91bGRuJ3QgYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIFwicmVmYWN0b3JpbmcuXCJcblxuVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBhbHNvIGltcG9ydGFudCB0byBjaGVjazogSXMgdGhpcyBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNvZGU/IE5vLiBJcyB0aGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZT8gTm8uIEFyZSB0aGUgZXhlY3V0aW9uIHBhdGhzIHVucmVhY2hhYmxlPyBBbHNvIG5vLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBtb2RpZmljYXRpb25zIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHdyaXRlYmFjayBsb2dpYyB3aXRoaW4gYSByZWFjaGFibGUgY2dyb3VwIGNvbnRleHQsIEknbSBjb25jbHVkaW5nIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIEkgbmVlZCB0byBkZWZpbmUgdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UsIHRoZSBvbmVzIEkgbmVlZCB0byB6ZXJvIGluIG9uLCBhcmUgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpcyBub24tc3RhdGljIChhbmQgdGhlcmVmb3JlIHZpc2libGUpLCB3aGljaCBpdCBpcyAoaXQncyBzdGF0aWMpLiBIb3dldmVyLCB0aGlzIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHdvcmtxdWV1ZSBjYWxsYmFjayBmdW5jdGlvbnMgbGlrZSB0aGlzIGFyZSB2ZXJ5IGxpa2VseSB0byBoYXZlIHN5bWJvbHMgaW4ga2FsbHN5bXMgdW5sZXNzIHRoZXkgYXJlIGlubGluZWQgaW50byBub3RoaW5nIChhbmQgdGhpcyBpc24ndDsgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgcGFzc2VkIHRvIGBJTklUX1dPUktgL2BERUNMQVJFX1dPUktgLCBzbyBpdHMgYWRkcmVzcyBpcyBkZWZpbml0ZWx5IHRha2VuIGFuZCBub3QgaW5saW5lZCEpLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBgd2JfbWVtY2dfb2ZmbGluZWAgYW5kIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5pbmcuIFRoaXMgbmFycm93cyB0aGUgc2NvcGUuIFRoZXkgYXJlIG5vdCB1YmlxdWl0b3VzIGZ1bmN0aW9uczsgdGhleSBhcmUgdmVyeSBzcGVjaWZpYyB0byBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmluZy5cblxuRm9yIHRoZSBgRW5hYmxlQ29uZmlnc2AsIEknbGwgZXhwbGljaXRseSBuZWVkIGBDR1JPVVBfV1JJVEVCQUNLYCAod2hpY2ggZGVwZW5kcyBvbiBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGApLCBgTUVNQ0dgLCBhbmQgYEJMS19DR1JPVVBgLiBFeGFtaW5pbmcgYG1tL2JhY2tpbmctZGV2LmNgLCB0aGUgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgY29uZmlybXMgdGhpcyBkZXBlbmRlbmN5LlxuXG5GaW5hbGx5LCBJJ2xsIGRvdWJsZS1jaGVjazogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHRoZSBkaWZmIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AsIGFuZCB0aGUgcmF0aW9uYWxlIGlzIHNvbGlkOiBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmluZyBjbGVhbnVwIG5vdyB1c2VzIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLCBhbmQgaXQgdG91Y2hlcyBjb3JlIE1NL3dyaXRlYmFjayBsb2dpYyB0aGF0J3MgZXhlcmNpc2VkIHdoZW4gY2dyb3VwcyBhcmUgZGVzdHJveWVkL29mZmxpbmVkIHdpdGggYWN0aXZlIHdyaXRlYmFjay4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAsIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGFuZCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAuXG5cblRpbWUgdG8gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY2MiwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoxMS44NDE0ODMyNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU5OTE2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1dSSVRFQkFDS1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuXCIsXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YlwiLFxuICAgIFwid2JfbWVtY2dfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmUgY2xlYW51cCB3b3JrZXIgbG9vcCBpbiBtbS9iYWNraW5nLWRldi5jLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSBiZWhhdmlvciB2aWEgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGR1cmluZyBvZmZsaW5lIGNnd2IgdGVhcmRvd24uIFRoaXMgY29kZSBpcyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAvIHdyaXRlYmFjayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIHVuZGVyIG1lbW9yeSBhbmQgSS9PIGxvYWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1dSSVRFQkFDS1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuXCIsXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YlwiLFxuICAgIFwid2JfbWVtY2dfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmUgY2xlYW51cCB3b3JrZXIgbG9vcCBpbiBtbS9iYWNraW5nLWRldi5jLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSBiZWhhdmlvciB2aWEgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGR1cmluZyBvZmZsaW5lIGNnd2IgdGVhcmRvd24uIFRoaXMgY29kZSBpcyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAvIHdyaXRlYmFjayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIHVuZGVyIG1lbW9yeSBhbmQgSS9PIGxvYWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA3OjExLjkyMTA4OTExM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NDIyOTIyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoxMS45MjE1OTA1NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQ0MTc4NjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGluIGBtbS9iYWNraW5nLWRldi5jYCBieSBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBsb29wIGZyb20gYHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpIGNvbmRfcmVzY2hlZCgpO2AgdG8gYGRvIHsgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOyB9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO2AuIFRoaXMgY2hhbmdlIGlzIHB1cmVseSByZWxhdGVkIHRvIHRhc2sgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSByZXBvcnRpbmcgZHVyaW5nIHdyaXRlYmFjayBjbGVhbnVwLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDAzMWZmNGI5ODI5ZmE1MTAyNWY2YWUzZDVkMjNhOWJjN2NlMmRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTk6MDY6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuY1xuaW5kZXggY2VjYmNmOTA2MGE2NS4uMThlOTk5MDUzYmFlMCAxMDA2NDRcbi0tLSBhL21tL2JhY2tpbmctZGV2LmNcbisrKyBiL21tL2JhY2tpbmctZGV2LmNcbkBAIC05MTAsOCArOTEwLDkgQEAgc3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuLVx0XHR3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKVxuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRkbyB7XG4rXHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuK1x0XHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4gXG4gXHRcdHdiX3B1dCh3Yik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoxMS45MjE1OTE1NjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ1OTU0ODgxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0IHdhcnJhbnRzIGZpcmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHNlZS4uLiB0aGUgZGlmZiBpcyBpbiBgbW0vYmFja2luZy1kZXYuY2AuIFJpZ2h0LCB0aGF0J3MgdGhlIGJhY2tpbmcgZGV2aWNlIGNvZGUuIFNvIGl0IHNlZW1zIGxpa2UgaXQncyBjaGFuZ2luZyBob3cgdGhlIGNsZWFudXAgb2Ygb2ZmbGluZSBDR1dCcyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBiYWNraW5nIGRldmljZXMuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZXBsYWNlZCBhIHNpbXBsZSBgd2hpbGVgIGxvb3Agd2l0aCBhIGBkby4uLndoaWxlYCBsb29wIGFuZCBhZGRlZCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYC4gVGhhdCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBzdWdnZXN0cyB0aGlzIGlzIGFib3V0IGJlaW5nIG1vcmUgY29vcGVyYXRpdmUgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbSBkdXJpbmcgY2xlYW51cC5cblxuT2theSwgbGV0J3MgZ2V0IGEgYnJvYWRlciB2aWV3LiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgcmVhZC1maWxlIG9yIGdyZXBwZXIgc2VhcmNoIG9uIGBtbS9iYWNraW5nLWRldi5jYCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBhcm91bmQgdGhpcyBmaWxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGFyZWFzIHRoYXQgbWlnaHQgYmUgc2Vuc2l0aXZlIHRvIHRoZSBjaGFuZ2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc2luY2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBjbGVhbnVwIGxvb3AgaW4gYSBjcml0aWNhbCBwYXRoLCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoYXQgYXJlYSB1c2luZyBLTVNBTi4gSXQgbWlnaHQgbm90IGJlIGEgaHVnZSByaXNrLCBidXQgd2l0aCBSQ1UgaW52b2x2ZWQsIGl0J3Mgd29ydGggYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MjYuNTE3MDgyMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYmFja2luZy1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xcbiA4OTM6XFx0XFx0XFx0d2IgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZmxpbmVfbm9kZSk7XFxuIDg5NTpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNndiLVxcdTAwM2VvZmZsaW5lX25vZGUsIFxcdTAwMjZwcm9jZXNzZWQpO1xcbiA4OTY6XFx0XFxuIDg5NzpcXHRcXHRcXHQvKlxcbiA4OTg6XFx0XFx0XFx0ICogSWYgd2IgaXMgZGlydHksIGNsZWFuaW5nIHVwIHRoZSB3cml0ZWJhY2sgYnkgc3dpdGNoaW5nXFxuIDg5OTpcXHRcXHRcXHQgKiBhdHRhY2hlZCBpbm9kZXMgd2lsbCByZXN1bHQgaW4gYW4gZWZmZWN0aXZlIHJlbW92YWwgb2YgYW55XFxuIDkwMDpcXHRcXHRcXHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24ndCB0aGUgZ29hbC4gIEluc3RlYWQsXFxuIDkwMTpcXHRcXHRcXHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXFxuIDkwMjpcXHRcXHRcXHQgKiB3aWxsIGJlIGxpa2VseSBjb21wbGV0ZWQuICBJZiBpbiB0aGUgbWVhbnRpbWUgc29tZSBpbm9kZXNcXG4gOTAzOlxcdFxcdFxcdCAqIHdpbGwgZ2V0IHJlLWRpcnRpZWQsIHRoZXkgc2hvdWxkIGJlIGV2ZW50dWFsbHkgc3dpdGNoZWQgdG9cXG4gOTA0OlxcdFxcdFxcdCAqIGEgbmV3IGNnd2IuXFxuIDkwNTpcXHRcXHRcXHQgKi9cXG4gOTA2OlxcdFxcdFxcdGlmICh3Yl9oYXNfZGlydHlfaW8od2IpKVxcbiA5MDc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdFxcdGlmICghd2JfdHJ5Z2V0KHdiKSlcXG4gOTEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MTE6XFx0XFxuIDkxMjpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDkxMzpcXHRcXHRcXHRkbyB7XFxuIDkxNDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuIDkxNTpcXHRcXHRcXHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xcbiA5MTY6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0XFx0d2JfcHV0KHdiKTtcXG4gOTE5OlxcdFxcdH1cXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwcm9jZXNzZWQpKVxcbiA5MjI6XFx0XFx0XFx0bGlzdF9zcGxpY2VfdGFpbChcXHUwMDI2cHJvY2Vzc2VkLCBcXHUwMDI2b2ZmbGluZV9jZ3dicyk7XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTI1OlxcdH1cXG4gOTI2OlxcdFxcbiA5Mjc6XFx0LyoqXFxuIDkyODpcXHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2IncyBhc3NvY2lhdGVkIHdpdGggYSBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbiA5Mjk6XFx0ICogQG1lbWNnOiBtZW1jZyBiZWluZyBvZmZsaW5lZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoyNi41MTcxODI5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ2MTczMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2hhbmdlIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG9wdGltaXppbmcgdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgd2UgaGFkIGEgYHdoaWxlYCBsb29wIGNhbGxpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKWAgYW5kIGBjb25kX3Jlc2NoZWQoKWAuIE5vdywgaXQncyBhIGBkby13aGlsZWAgbG9vcCB3aXRoIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGluc2lkZS4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIHF1aWVzY2VudCBzdGF0ZXMgYW5kIHZvbHVudGFyeSBzY2hlZHVsaW5nIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLlxuXG5NeSBleHBlcnQgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzc3Vlcy4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOlxuXG4xLiAgKipVc2VyLXNwYWNlIGludGVyYWN0aW9uPyoqIE5vLCBub3RoaW5nIGhlcmUgaW52b2x2ZXMgcGFzc2luZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgY291bGQgY2F1c2UgYSBwcm9ibGVtLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vcGUuIFRoZSBjb2RlJ3MgZmxvdyBkb2Vzbid0IHJlbHkgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB0byBtYWtlIGRlY2lzaW9ucy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24/KiogTm8gY29tcGxleCBhbGxvY2F0aW9ucyBpbiB0aGlzIHNuaXBwZXQsIHNvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZW4ndCBhIGNvbmNlcm4uXG40LiAgKipCdWZmZXIgbWFuaXB1bGF0aW9ucyBvciBvdXQtb2YtYm91bmRzIHJlYWRzPyoqIEFic29sdXRlbHkgbm90LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc2NoZWR1bGluZyBhbmQgUkNVIHN0YXRlcy4gTm8gYnVmZmVyIGhhbmRsaW5nIGlzIGdvaW5nIG9uIGhlcmUuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoZSBLTVNBTiBjaGVjayBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIGlzIGEgcHVyZWx5IGludGVybmFsIHR3ZWFrIGZvciBzY2hlZHVsaW5nIHdpdGhpbiBhIHdvcmtxdWV1ZSB3b3JrZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBubyB1c2VyLXNwYWNlIGNvcGllcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgaXQncyBzYWZlIHRvIHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIGFuZCB0aGVuIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2MSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzozMS4zNjMzNTk4MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 19:02:56 +0000 UTC FinishedAt: 2026-09-09 19:07:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "893e11787f78e43b534e252249ac3fff4d1333f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_WRITEBACK", "MEMCG", "BLK_CGROUP" ], "series_id": "d94b4759-eaf7-413c-84bb-4b594c4fd396" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "cleanup_offline_cgwbs_workfn", "cleanup_offline_cgwb", "wb_memcg_offline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2ImIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5lIGNsZWFudXAgd29ya2VyIGxvb3AgaW4gbW0vYmFja2luZy1kZXYuYywgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgYmVoYXZpb3IgdmlhIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBkdXJpbmcgb2ZmbGluZSBjZ3diIHRlYXJkb3duLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgLyB3cml0ZWJhY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiB1bmRlciBtZW1vcnkgYW5kIEkvTyBsb2FkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDAzMWZmNGI5ODI5ZmE1MTAyNWY2YWUzZDVkMjNhOWJjN2NlMmRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTk6MDY6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmNcbmluZGV4IGNlY2JjZjkwNjBhNjUuLjE4ZTk5OTA1M2JhZTAgMTAwNjQ0XG4tLS0gYS9tbS9iYWNraW5nLWRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9iYWNraW5nLWRldi5jXG5AQCAtOTEwLDggJiM0Mzs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4tXHRcdHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiYjNDM7XHRcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiBcbiBcdFx0d2JfcHV0KHdiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuJiMzNDssCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3diJiMzNDssCiAgICAmIzM0O3diX21lbWNnX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB3cml0ZWJhY2sgb2ZmbGluZSBjbGVhbnVwIHdvcmtlciBsb29wIGluIG1tL2JhY2tpbmctZGV2LmMsIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIGJlaGF2aW9yIHZpYSBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCkgZHVyaW5nIG9mZmxpbmUgY2d3YiB0ZWFyZG93bi4gVGhpcyBjb2RlIGlzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IC8gd3JpdGViYWNrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gdW5kZXIgbWVtb3J5IGFuZCBJL08gbG9hZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAwMzFmZjRiOTgyOWZhNTEwMjVmNmFlM2Q1ZDIzYTliYzdjZTJkYjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE5OjA2OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggY2VjYmNmOTA2MGE2NS4uMThlOTk5MDUzYmFlMCAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9iYWNraW5nLWRldi5jCkBAIC05MTAsOCAmIzQzOzkxMCw5IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7Y2d3Yl9sb2NrKTsKLQkJd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSkKLQkJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkJZG8gewomIzQzOwkJCWNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsKJiM0MzsJCX0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtjZ3diX2xvY2spOwogCiAJCXdiX3B1dCh3Yik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRpZmZgLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGFsdGVyZWQgaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQgYXJvdW5kIGxpbmUgOTEwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgYHdoaWxlYCBsb29wIHdpdGggYGNvbmRfcmVzY2hlZCgpYCBpbnNpZGUuIE5vdywgaXQmIzM5O3MgYSBgZG8uLi53aGlsZWAgbG9vcCwgYW5kIHRoZSBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBmdW5jdGlvbiBoYXMgYmVlbiBzd2FwcGVkIGluLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgYmxvY2tpbmcgaXNzdWVzIGluIHRoZSBvbGQgbG9vcCwgcG9zc2libHkgcmVsYXRlZCB0byBob2xkaW5nIGEgbG9jayAoYGNnd2JfbG9ja2ApLiBUaGUgc3dpdGNoIHRvIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIHN1Z2dlc3RzIHRoaXMgY2hhbmdlIGlzIGFpbWVkIGF0IGFsbG93aW5nIG90aGVyIHRhc2tzIHRvIHJ1biBtb3JlIG9mdGVuLCBhbmQgdGhpcyBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgc2VlbXMgdG8gZGVhbCB3aXRoIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgc2NlbmFyaW9zLiBUbyBnZXQgYSBiZXR0ZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgcmVhZCB0aGUgZmlsZSBhcm91bmQgdGhpcyBzZWN0aW9uLiBDb250ZXh0IGlzIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvY2tpbmcgbWVjaGFuaXNtcyB0byBmdWxseSBhcHByZWNpYXRlIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBjb21taXQgbWVzc2FnZXMgb3IgZG9jdW1lbnRhdGlvbjsgdGhpcyBzdWJ0bGUgc2hpZnQgaW4gYmVoYXZpb3IgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODA6XHQgKlxuIDg4MTpcdCAqIFRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzIGJ5IHN3aXRjaGluZyBhdHRhY2hlZCBpbm9kZXMgdG8gdGhlIG5lYXJlc3RcbiA4ODI6XHQgKiBsaXZpbmcgYW5jZXN0b3ImIzM5O3Mgd3JpdGViYWNrLiBQcm9jZXNzZWQgd2JzIGFyZSBwbGFjZWQgYXQgdGhlIGVuZFxuIDg4MzpcdCAqIG9mIHRoZSBsaXN0IHRvIGd1YXJhbnRlZSB0aGUgZm9yd2FyZCBwcm9ncmVzcy5cbiA4ODQ6XHQgKi9cbiA4ODU6XHRzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiA4ODY6XHR7XG4gODg3Olx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XG4gODg4Olx0XHRMSVNUX0hFQUQocHJvY2Vzc2VkKTtcbiA4ODk6XHRcbiA4OTA6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4OTE6XHRcbiA4OTI6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xuIDg5MzpcdFx0XHR3YiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b2ZmbGluZV9jZ3dicywgc3RydWN0IGJkaV93cml0ZWJhY2ssXG4gODk0Olx0XHRcdFx0XHQgICAgICBvZmZsaW5lX25vZGUpO1xuIDg5NTpcdFx0XHRsaXN0X21vdmUoXHUwMDI2d2ItXHUwMDNlb2ZmbGluZV9ub2RlLCBcdTAwMjZwcm9jZXNzZWQpO1xuIDg5NjpcdFxuIDg5NzpcdFx0XHQvKlxuIDg5ODpcdFx0XHQgKiBJZiB3YiBpcyBkaXJ0eSwgY2xlYW5pbmcgdXAgdGhlIHdyaXRlYmFjayBieSBzd2l0Y2hpbmdcbiA4OTk6XHRcdFx0ICogYXR0YWNoZWQgaW5vZGVzIHdpbGwgcmVzdWx0IGluIGFuIGVmZmVjdGl2ZSByZW1vdmFsIG9mIGFueVxuIDkwMDpcdFx0XHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24mIzM5O3QgdGhlIGdvYWwuICBJbnN0ZWFkLFxuIDkwMTpcdFx0XHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXG4gOTAyOlx0XHRcdCAqIHdpbGwgYmUgbGlrZWx5IGNvbXBsZXRlZC4gIElmIGluIHRoZSBtZWFudGltZSBzb21lIGlub2Rlc1xuIDkwMzpcdFx0XHQgKiB3aWxsIGdldCByZS1kaXJ0aWVkLCB0aGV5IHNob3VsZCBiZSBldmVudHVhbGx5IHN3aXRjaGVkIHRvXG4gOTA0Olx0XHRcdCAqIGEgbmV3IGNnd2IuXG4gOTA1Olx0XHRcdCAqL1xuIDkwNjpcdFx0XHRpZiAod2JfaGFzX2RpcnR5X2lvKHdiKSlcbiA5MDc6XHRcdFx0XHRjb250aW51ZTtcbiA5MDg6XHRcbiA5MDk6XHRcdFx0aWYgKCF3Yl90cnlnZXQod2IpKVxuIDkxMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDkxMTpcdFxuIDkxMjpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA5MTM6XHRcdFx0ZG8ge1xuIDkxNDpcdFx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiA5MTU6XHRcdFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcbiA5MTY6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkxNzpcdFxuIDkxODpcdFx0XHR3Yl9wdXQod2IpO1xuIDkxOTpcdFx0fVxuIDkyMDpcdFxuIDkyMTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnByb2Nlc3NlZCkpXG4gOTIyOlx0XHRcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2cHJvY2Vzc2VkLCBcdTAwMjZvZmZsaW5lX2Nnd2JzKTtcbiA5MjM6XHRcbiA5MjQ6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkyNTpcdH1cbiA5MjY6XHRcbiA5Mjc6XHQvKipcbiA5Mjg6XHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtY2cgYmVpbmcgb2ZmbGluZWRcbiA5Mjk6XHQgKiBAbWVtY2c6IG1lbWNnIGJlaW5nIG9mZmxpbmVkXG4gOTMwOlx0ICpcbiA5MzE6XHQgKiBBbHNvIHByZXZlbnRzIGNyZWF0aW9uIG9mIGFueSBuZXcgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIEBtZW1jZy5cbiA5MzI6XHQgKi9cbiA5MzM6XHR2b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIDkzNDpcdHtcbiA5MzU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1lbWNnX2Nnd2JfbGlzdCA9IFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdDtcbiA5MzY6XHRcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgKm5leHQ7XG4gOTM3Olx0XG4gOTM4Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4gOTM5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2IsIG5leHQsIG1lbWNnX2Nnd2JfbGlzdCwgbWVtY2dfbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDR1dCIENsZWFudXAgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGBjZ3dic2AgdGhpbmcgaXMgY2xlYW5lZCB1cCwgYW5kIHNwZWNpZmljYWxseSBob3cgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGZpdCBpbnRvIHRoZSBwaWN0dXJlLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2UsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCB3aXRoIGxpbmVzIDgwMCB0byA4ODAgb2YgYG1tL2JhY2tpbmctZGV2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYWxsb3cgbWUgdG8gZGV0ZXJtaW5lIHRoZWlyIHJvbGUgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vYmFja2luZy1kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XHRcdGJsa2NnX2NzcyA9IGNncm91cF9nZXRfZV9jc3MobWVtY2dfY3NzLVx1MDAzZWNncm91cCwgXHUwMDI2aW9fY2dycF9zdWJzeXMpO1xuIDgwMTpcdFx0XHRpZiAodW5saWtlbHkod2ItXHUwMDNlYmxrY2dfY3NzICE9IGJsa2NnX2NzcyB8fCAhd2JfdHJ5Z2V0KHdiKSkpXG4gODAyOlx0XHRcdFx0d2IgPSBOVUxMO1xuIDgwMzpcdFx0XHRjc3NfcHV0KGJsa2NnX2Nzcyk7XG4gODA0Olx0XHR9XG4gODA1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4MDY6XHRcbiA4MDc6XHRcdHJldHVybiB3YjtcbiA4MDg6XHR9XG4gODA5Olx0XG4gODEwOlx0LyoqXG4gODExOlx0ICogd2JfZ2V0X2NyZWF0ZSAtIGdldCB3YiBmb3IgYSBnaXZlbiBtZW1jZywgY3JlYXRlIGlmIG5lY2Vzc2FyeVxuIDgxMjpcdCAqIEBiZGk6IHRhcmdldCBiZGlcbiA4MTM6XHQgKiBAbWVtY2dfY3NzOiBjZ3JvdXBfc3Vic3lzX3N0YXRlIG9mIHRoZSB0YXJnZXQgbWVtY2cgKG11c3QgaGF2ZSBwb3NpdGl2ZSByZWYpXG4gODE0Olx0ICogQGdmcDogYWxsb2NhdGlvbiBtYXNrIHRvIHVzZVxuIDgxNTpcdCAqXG4gODE2Olx0ICogVHJ5IHRvIGdldCB0aGUgd2IgZm9yIEBtZW1jZ19jc3Mgb24gQGJkaS4gIElmIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCB0cnkgdG9cbiA4MTc6XHQgKiBjcmVhdGUgb25lLiAgU2VlIHdiX2dldF9sb29rdXAoKSBmb3IgbW9yZSBkZXRhaWxzLlxuIDgxODpcdCAqL1xuIDgxOTpcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yl9nZXRfY3JlYXRlKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksXG4gODIwOlx0XHRcdFx0XHQgICAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm1lbWNnX2NzcyxcbiA4MjE6XHRcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4gODIyOlx0e1xuIDgyMzpcdFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKndiO1xuIDgyNDpcdFxuIDgyNTpcdFx0bWlnaHRfYWxsb2MoZ2ZwKTtcbiA4MjY6XHRcbiA4Mjc6XHRcdGRvIHtcbiA4Mjg6XHRcdFx0d2IgPSB3Yl9nZXRfbG9va3VwKGJkaSwgbWVtY2dfY3NzKTtcbiA4Mjk6XHRcdH0gd2hpbGUgKCF3YiBcdTAwMjZcdTAwMjYgIWNnd2JfY3JlYXRlKGJkaSwgbWVtY2dfY3NzLCBnZnApKTtcbiA4MzA6XHRcbiA4MzE6XHRcdHJldHVybiB3YjtcbiA4MzI6XHR9XG4gODMzOlx0XG4gODM0Olx0c3RhdGljIGludCBjZ3diX2JkaV9pbml0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXG4gODM1Olx0e1xuIDgzNjpcdFx0aW50IHJldDtcbiA4Mzc6XHRcbiA4Mzg6XHRcdElOSVRfUkFESVhfVFJFRShcdTAwMjZiZGktXHUwMDNlY2d3Yl90cmVlLCBHRlBfQVRPTUlDKTtcbiA4Mzk6XHRcdG11dGV4X2luaXQoXHUwMDI2YmRpLVx1MDAzZWNnd2JfcmVsZWFzZV9tdXRleCk7XG4gODQwOlx0XHRpbml0X3J3c2VtKFx1MDAyNmJkaS1cdTAwM2V3Yl9zd2l0Y2hfcndzZW0pO1xuIDg0MTpcdFxuIDg0MjpcdFx0cmV0ID0gd2JfaW5pdChcdTAwMjZiZGktXHUwMDNld2IsIGJkaSwgR0ZQX0tFUk5FTCk7XG4gODQzOlx0XHRpZiAoIXJldCkge1xuIDg0NDpcdFx0XHRiZGktXHUwMDNld2IubWVtY2dfY3NzID0gXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVx1MDAzZWNzcztcbiA4NDU6XHRcdFx0YmRpLVx1MDAzZXdiLmJsa2NnX2NzcyA9IGJsa2NnX3Jvb3RfY3NzO1xuIDg0NjpcdFx0XHRJTklUX1dPUksoXHUwMDI2YmRpLVx1MDAzZXdiLnN3aXRjaF93b3JrLCBpbm9kZV9zd2l0Y2hfd2JzX3dvcmtfZm4pO1xuIDg0NzpcdFx0XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2YmRpLVx1MDAzZXdiLnN3aXRjaF93YnNfY3R4cyk7XG4gODQ4Olx0XHR9XG4gODQ5Olx0XHRyZXR1cm4gcmV0O1xuIDg1MDpcdH1cbiA4NTE6XHRcbiA4NTI6XHRzdGF0aWMgdm9pZCBjZ3diX2JkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXG4gODUzOlx0e1xuIDg1NDpcdFx0c3RydWN0IHJhZGl4X3RyZWVfaXRlciBpdGVyO1xuIDg1NTpcdFx0dm9pZCAqKnNsb3Q7XG4gODU2Olx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XG4gODU3Olx0XG4gODU4Olx0XHRXQVJOX09OKHRlc3RfYml0KFdCX3JlZ2lzdGVyZWQsIFx1MDAyNmJkaS1cdTAwM2V3Yi5zdGF0ZSkpO1xuIDg1OTpcdFxuIDg2MDpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDg2MTpcdFx0cmFkaXhfdHJlZV9mb3JfZWFjaF9zbG90KHNsb3QsIFx1MDAyNmJkaS1cdTAwM2VjZ3diX3RyZWUsIFx1MDAyNml0ZXIsIDApXG4gODYyOlx0XHRcdGNnd2Jfa2lsbCgqc2xvdCk7XG4gODYzOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4NjQ6XHRcbiA4NjU6XHRcdG11dGV4X2xvY2soXHUwMDI2YmRpLVx1MDAzZWNnd2JfcmVsZWFzZV9tdXRleCk7XG4gODY2Olx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4gODY3Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2YmRpLVx1MDAzZXdiX2xpc3QpKSB7XG4gODY4Olx0XHRcdHdiID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZiZGktXHUwMDNld2JfbGlzdCwgc3RydWN0IGJkaV93cml0ZWJhY2ssXG4gODY5Olx0XHRcdFx0XHQgICAgICBiZGlfbm9kZSk7XG4gODcwOlx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDg3MTpcdFx0XHR3Yl9zaHV0ZG93bih3Yik7XG4gODcyOlx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4NzM6XHRcdH1cbiA4NzQ6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDg3NTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJkaS1cdTAwM2VjZ3diX3JlbGVhc2VfbXV0ZXgpO1xuIDg3NjpcdH1cbiA4Nzc6XHRcbiA4Nzg6XHQvKlxuIDg3OTpcdCAqIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4gLSB0cnkgdG8gcmVsZWFzZSBkeWluZyBjZ3dic1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGNnd2IgQ2xlYW51cCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlZmluaXRpb24gYW5kIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGl0IHJlbGllcyBvbiBmb3IgY2d3YiB3aXRoaW4gdGhlIGBtbS9iYWNraW5nLWRldi5jYCBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIHJlYWQgdGhyb3VnaCBgbW0vYmFja2luZy1kZXYuY2AgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB3aGVyZSBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGlzIGRlZmluZWQuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLgoKVG8gZG8gdGhhdCBxdWlja2x5IEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayB1cCBpbiBgbW0vYmFja2luZy1kZXYuY2AsIG9yIG1heWJlIEkmIzM5O2xsIG5lZWQgdG8gcmVhY2ggZm9yIGBncmVwYC4gSSYjMzk7bGwgbG9vayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBsaWtlIGBDT05GSUdfYCBvciBgI2lmZGVmYCB0byBpZGVudGlmeSBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IGNnd2IgaXMgaW50ZWdyYXRlZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jPTU5OD1zdGF0aWMgTElTVF9IRUFEKG9mZmxpbmVfY2d3YnMpO1xubW0vYmFja2luZy1kZXYuYzo1OTk6c3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubW0vYmFja2luZy1kZXYuYzo2MDA6c3RhdGljIERFQ0xBUkVfV09SSyhjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29yaywgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbik7XG5tbS9iYWNraW5nLWRldi5jLTYwMS1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTg1Mj1zdGF0aWMgdm9pZCBjZ3diX2JkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXG4tLVxubW0vYmFja2luZy1kZXYuYy04NzgtLypcbm1tL2JhY2tpbmctZGV2LmM6ODc5OiAqIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4gLSB0cnkgdG8gcmVsZWFzZSBkeWluZyBjZ3dic1xubW0vYmFja2luZy1kZXYuYy04ODAtICpcbi0tXG5tbS9iYWNraW5nLWRldi5jLTg4NC0gKi9cbm1tL2JhY2tpbmctZGV2LmM6ODg1OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0vYmFja2luZy1kZXYuYy04ODYte1xuLS1cbm1tL2JhY2tpbmctZGV2LmMtOTE0LVx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbm1tL2JhY2tpbmctZGV2LmM6OTE1Olx0XHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xubW0vYmFja2luZy1kZXYuYy05MTYtXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbi0tXG5tbS9iYWNraW5nLWRldi5jPTkzMz12b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtOTQzLVxubW0vYmFja2luZy1kZXYuYzo5NDQ6XHRxdWV1ZV93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNmNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrKTtcbm1tL2JhY2tpbmctZGV2LmMtOTQ1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njc2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBiYWNraW5nLWRldi5jYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiZWhhdmlvciBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcywgb2YgY291cnNlLCB0aGUgc291cmNlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIHRoZW4gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGBtbS9iYWNraW5nLWRldi5jYCBmaWxlIHRvIGNoZWNrIGZvciBhbnkgYCNpZmRlZmAgYmxvY2tzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBjb21waWxhdGlvbiBvciBleGVjdXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgbWFrZSBpdCBiZWhhdmUgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgY2lyY3Vtc3RhbmNlcy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmYCBibG9ja3MgY2FuIGNhdXNlIHN1YnRsZSBhbmQgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgaWYgeW91IGRvbiYjMzk7dCBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LWRlcGVuZGVudCBjb2RlIHBhdGhzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24mIzM5O3MgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yIG1pZ2h0IGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIGVudmlyb25tZW50LCBtb2R1bGUgcGFyYW1ldGVycywgb3Iga2VybmVsIGZlYXR1cmVzIHRoYXQgYXJlIGVuYWJsZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGFjdHVhbGx5IHdvcmtzIGluIGRpZmZlcmVudCBkZXBsb3ltZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jPTYyPXN0YXRpYyB2b2lkIGNvbGxlY3Rfd2Jfc3RhdHMoc3RydWN0IHdiX3N0YXRzICpzdGF0cyxcbi0tXG5tbS9iYWNraW5nLWRldi5jLTg1LVxubW0vYmFja2luZy1kZXYuYzo4NjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL2JhY2tpbmctZGV2LmMtODctc3RhdGljIHZvaWQgYmRpX2NvbGxlY3Rfc3RhdHMoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcbi0tXG5tbS9iYWNraW5nLWRldi5jPTE1OD1zdGF0aWMgdm9pZCB3Yl9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuLS1cbm1tL2JhY2tpbmctZGV2LmMtMTc0LVx0XHQgICBcJiMzNDtzdGF0ZTogICAgICAgICAgICAgJTEwbHhcXG5cXG5cJiMzNDssXG5tbS9iYWNraW5nLWRldi5jOjE3NTojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL2JhY2tpbmctZGV2LmMtMTc2LVx0XHQgICBjZ3JvdXBfaW5vKHdiLVx1MDAzZW1lbWNnX2Nzcy1cdTAwM2VjZ3JvdXApLFxuLS1cbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNTg2LVxubW0vYmFja2luZy1kZXYuYzo1ODc6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS9iYWNraW5nLWRldi5jLTU4OC1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTk4NT1zdWJzeXNfaW5pdGNhbGwoY2d3Yl9pbml0KTtcbm1tL2JhY2tpbmctZGV2LmMtOTg2LVxubW0vYmFja2luZy1kZXYuYzo5ODc6I2Vsc2VcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXG5tbS9iYWNraW5nLWRldi5jLTk4OC1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTEwMDE9c3RhdGljIHZvaWQgY2d3Yl9yZW1vdmVfZnJvbV9iZGlfbGlzdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4tLVxubW0vYmFja2luZy1kZXYuYy0xMDA1LVxubW0vYmFja2luZy1kZXYuYzoxMDA2OiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbm1tL2JhY2tpbmctZGV2LmMtMTAwNy1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTAzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xubW0vbWVtY29udHJvbC5jLTEwNC1cbm1tL21lbWNvbnRyb2wuYzoxMDU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS9tZW1jb250cm9sLmMtMTA2LXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3NjI9c3RhdGljIHZvaWQgbWVtY2dfb2ZmbGluZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzc3NS1cbm1tL21lbWNvbnRyb2wuYzozNzc2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vbWVtY29udHJvbC5jLTM3NzctXG4tLVxubW0vbWVtY29udHJvbC5jPTM5NDU9dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zOTcxLVxubW0vbWVtY29udHJvbC5jOjM5NzI6I2Vsc2VcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXG5tbS9tZW1jb250cm9sLmMtMzk3My1cbi0tXG5tbS9tZW1jb250cm9sLmM9Mzk4Mz1zdGF0aWMgdm9pZCBtZW1jZ193Yl9kb21haW5fc2l6ZV9jaGFuZ2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzk4Ni1cbm1tL21lbWNvbnRyb2wuYzozOTg3OiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbm1tL21lbWNvbnRyb2wuYy0zOTg4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00MTQ3PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjAyLVx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG5tbS9tZW1jb250cm9sLmM6NDIwMzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00MjA0LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlY2d3Yl9saXN0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM4Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzODctXG5tbS9tZW1jb250cm9sLmM6NDM4ODojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL21lbWNvbnRyb2wuYy00Mzg5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOylcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTExMz1zdHJ1Y3Qgd2JfZG9tYWluIGdsb2JhbF93Yl9kb21haW47XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0xMjEtXG5tbS9wYWdlLXdyaXRlYmFjay5jOjEyMjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTIzLVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MTU1PXN0YXRpYyB2b2lkIHdiX21pbl9tYXhfcmF0aW8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTgxLVxubW0vcGFnZS13cml0ZWJhY2suYzoxODI6I2Vsc2VcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE4My1cbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTIwOT1zdGF0aWMgdm9pZCB3Yl9taW5fbWF4X3JhdGlvKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yixcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIxNS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjE2OiNlbmRpZlx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjE3LVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9NjA5PWludCB3Yl9kb21haW5faW5pdChzdHJ1Y3Qgd2JfZG9tYWluICpkb20sIGdmcF90IGdmcClcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTYyMS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6NjIyOiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vcGFnZS13cml0ZWJhY2suYy02MjMtdm9pZCB3Yl9kb21haW5fZXhpdChzdHJ1Y3Qgd2JfZG9tYWluICpkb20pXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0xNDcwPXN0YXRpYyB2b2lkIF9fd2JfdXBkYXRlX2JhbmR3aWR0aChzdHJ1Y3QgZGlydHlfdGhyb3R0bGVfY29udHJvbCAqZ2R0Yyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE0OTYtXHRcdC8qXG5tbS9wYWdlLXdyaXRlYmFjay5jOjE0OTc6XHRcdCAqIEBtZHRjIGlzIGFsd2F5cyBOVUxMIGlmICFDR1JPVVBfV1JJVEVCQUNLIGJ1dCB0aGVcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTQ5OC1cdFx0ICogY29tcGlsZXIgaGFzIG5vIHdheSB0byBmaWd1cmUgdGhhdCBvdXQuICBIZWxwIGl0LlxubW0vcGFnZS13cml0ZWJhY2suYy0xNDk5LVx0XHQgKi9cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MTUwMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9XUklURUJBQ0spIFx1MDAyNlx1MDAyNiBtZHRjKSB7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTE1MDEtXHRcdFx0ZG9tYWluX3VwZGF0ZV9kaXJ0eV9saW1pdChtZHRjLCBub3cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI0MD1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI0My1cdFx0cmV0dXJuIHRydWU7XG5tbS92bXNjYW4uYzoyNDQ6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS92bXNjYW4uYy0yNDUtXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdHJhY2luZyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gRGVmaW5pdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIGtub3cgaXQmIzM5O3MgKnNpbmd1bGFyKiwgbm90IGEgdmFyaWF0aW9uIGxpa2UgYHdvcmtmbmAsIHNvIHRoYXQgbmFycm93cyB0aGUgc2VhcmNoIHNsaWdodGx5LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIHdyaXRlYmFjayBtZWNoYW5pc21zLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgZnMvZnMtd3JpdGViYWNrLmNgLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0ZWJhY2stcmVsYXRlZCBmdW5jdGlvbnMuIElmIGl0JiMzOTtzICpub3QqIGluIGBmcy13cml0ZWJhY2suY2AsIHRoZW4gSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2VhcmNoLCBidXQgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBpdCB0aGVyZSBmaXJzdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2JcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnMtd3JpdGViYWNrLmM9NzI2PXN0YXRpYyBib29sIGlzd19wcmVwYXJlX3dic19zd2l0Y2goc3RydWN0IGJkaV93cml0ZWJhY2sgKm5ld193Yixcbi0tXG5mcy9mcy13cml0ZWJhY2suYy03NTItICovXG5mcy9mcy13cml0ZWJhY2suYzo3NTM6Ym9vbCBjbGVhbnVwX29mZmxpbmVfY2d3YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG5mcy9mcy13cml0ZWJhY2suYy03NTQte1xuLS1cbmluY2x1ZGUvbGludXgvd3JpdGViYWNrLmg9MjEwPXZvaWQgY2dyb3VwX3dyaXRlYmFja191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oOjIxMTpib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTIxMi1cbi0tXG5tbS9iYWNraW5nLWRldi5jPTg4NT1zdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9iYWNraW5nLWRldi5jLTkxNC1cdFx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG5tbS9iYWNraW5nLWRldi5jOjkxNTpcdFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcbm1tL2JhY2tpbmctZGV2LmMtOTE2LVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBhbmQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXNgIGluIGBmcy9mcy13cml0ZWJhY2suY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDc1My4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyB1cCB0byBhbmQsIGNydWNpYWxseSwgKndoeSogdGhleSBjaG9zZSB0byBlbXBsb3kgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgaW4gdGhhdCBjb250ZXh0LiBHaXZlbiB0aGUgZmlsZSYjMzk7cyBwdXJwb3NlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgb3BlcmF0aW9ucywgcG9zc2libHkgcmVsYXRlZCB0byBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgY2dyb3VwcyB3aXRoIHRoZSBmaWxlc3lzdGVtIHdyaXRlYmFjayBtZWNoYW5pc21zIGJlY2F1c2UgSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG51YW5jZSBsaWVzLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjbGVhbmluZyB1cCBvciBvdGhlcndpc2UgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIGEgY2dyb3VwJiMzOTtzIHdyaXRlYmFjayBjb250ZXh0IHdoZW4gdGhhdCBjZ3JvdXAgdHJhbnNpdGlvbnMgdG8gYW4gb2ZmbGluZSBzdGF0ZS4gVGhlIHVzZSBvZiBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xc2AgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlIGludm9sdmluZyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYW5kIGdyYWNlZnVsIHNodXRkb3duLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGlzIGlzIHBsYXlpbmcgb3V0LiBJcyB0aGlzIHRvIHByZXZlbnQgZGVhZGxvY2tzPyBBcmUgd2UgcHJvdGVjdGluZyBhZ2FpbnN0IHJhY2VzIHdpdGggdGFza3MgdGhhdCBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNncm91cD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBjcml0aWNhbCBzZWN0aW9uIG1hbmFnZW1lbnQgaXMgYXQgcGxheSwgcHJvYmFibHkgdGllZCBpbnRvIFJDVSB1c2FnZSBhbmQgcG9zc2libGUgdGFzayByZXNjaGVkdWxpbmcsIHJlbGF0ZWQgdG8gdGhpcyBvZmZsaW5lIHRyYW5zaXRpb24gYW5kIHRoZSB3cml0ZWJhY2sgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDU6XHQvKipcbiA3NDY6XHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xuIDc0NzpcdCAqIEB3YjogdGFyZ2V0IHdiXG4gNzQ4Olx0ICpcbiA3NDk6XHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvciYjMzk7cyB3YiBpbiBvcmRlclxuIDc1MDpcdCAqIHRvIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgZHlpbmcgQHdiLiAgUmV0dXJucyAldHJ1ZSBpZiBub3QgYWxsIGlub2RlcyB3ZXJlXG4gNzUxOlx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxuIDc1MjpcdCAqL1xuIDc1MzpcdGJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIDc1NDpcdHtcbiA3NTU6XHRcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XG4gNzU2Olx0XHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XG4gNzU3Olx0XHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xuIDc1ODpcdFx0aW50IG5yO1xuIDc1OTpcdFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XG4gNzYwOlx0XG4gNzYxOlx0XHRpc3cgPSBremFsbG9jX2ZsZXgoKmlzdywgaW5vZGVzLCBXQl9NQVhfSU5PREVTX1BFUl9JU1cpO1xuIDc2MjpcdFx0aWYgKCFpc3cpXG4gNzYzOlx0XHRcdHJldHVybiByZXN0YXJ0O1xuIDc2NDpcdFxuIDc2NTpcdFx0YXRvbWljX2luYyhcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcbiA3NjY6XHRcbiA3Njc6XHRcdGZvciAobWVtY2dfY3NzID0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZXBhcmVudDsgbWVtY2dfY3NzO1xuIDc2ODpcdFx0ICAgICBtZW1jZ19jc3MgPSBtZW1jZ19jc3MtXHUwMDNlcGFyZW50KSB7XG4gNzY5Olx0XHRcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXHUwMDNlYmRpLCBtZW1jZ19jc3MsIEdGUF9LRVJORUwpO1xuIDc3MDpcdFx0XHRpZiAobmV3X3diKVxuIDc3MTpcdFx0XHRcdGJyZWFrO1xuIDc3MjpcdFx0fVxuIDc3MzpcdFx0aWYgKHVubGlrZWx5KCFuZXdfd2IpKVxuIDc3NDpcdFx0XHRuZXdfd2IgPSBcdTAwMjZ3Yi1cdTAwM2ViZGktXHUwMDNld2I7IC8qIHdiX2dldCgpIGlzIG5vb3AgZm9yIGJkaSYjMzk7cyB3YiAqL1xuIDc3NTpcdFxuIDc3NjpcdFx0bnIgPSAwO1xuIDc3NzpcdFx0c3Bpbl9sb2NrKFx1MDAyNndiLVx1MDAzZWxpc3RfbG9jayk7XG4gNzc4Olx0XHQvKlxuIDc3OTpcdFx0ICogSW4gYWRkaXRpb24gdG8gdGhlIGlub2RlcyB0aGF0IGhhdmUgY29tcGxldGVkIHdyaXRlYmFjaywgYWxzbyBzd2l0Y2hcbiA3ODA6XHRcdCAqIGNnd2JzIGZvciB0aG9zZSBpbm9kZXMgb25seSB3aXRoIGRpcnR5IHRpbWVzdGFtcHMuIE90aGVyd2lzZSwgdGhvc2VcbiA3ODE6XHRcdCAqIGlub2RlcyB3b24mIzM5O3QgYmUgd3JpdHRlbiBiYWNrIGZvciBhIGxvbmcgdGltZSB3aGVuIGxhenl0aW1lIGlzXG4gNzgyOlx0XHQgKiBlbmFibGVkLCBhbmQgdGh1cyBwaW5uaW5nIHRoZSBkeWluZyBjZ3dicy4gSXQgd29uJiMzOTt0IGJyZWFrIHRoZVxuIDc4MzpcdFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxuIDc4NDpcdFx0ICogYWNjb3VudGVkIGZvci5cbiA3ODU6XHRcdCAqL1xuIDc4NjpcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfYXR0YWNoZWQsIFx1MDAyNm5yKTtcbiA3ODc6XHRcdGlmICghcmVzdGFydClcbiA3ODg6XHRcdFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFx1MDAyNndiLVx1MDAzZWJfZGlydHlfdGltZSxcbiA3ODk6XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnIpO1xuIDc5MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2d2ItXHUwMDNlbGlzdF9sb2NrKTtcbiA3OTE6XHRcbiA3OTI6XHRcdC8qIG5vIGF0dGFjaGVkIGlub2Rlcz8gYmFpbCBvdXQgKi9cbiA3OTM6XHRcdGlmIChuciA9PSAwKSB7XG4gNzk0Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmFja2luZyBEZXZpY2UgQ2xlYW51cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSB0aGV5JiMzOTt2ZSB0d2Vha2VkIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCB3aXRoaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhpcyBsb29wIGNvbnN0cnVjdCwgc3BlY2lmaWNhbGx5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9yaWdpbmFsIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHdpdGggdGhpcyBuZXcgc3RydWN0dXJlOgoKYGBgYwoJCWRvIHsKCQkJY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOwoJCX0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7CmBgYAoKQSBmZXcgaW1tZWRpYXRlIG9ic2VydmF0aW9ucyBqdW1wIG91dCwgcmlnaHQ/IEZpcnN0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZXkgYXJlIG5vdyBjYWxsaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgICpiZWZvcmUqIHRoZSBpbml0aWFsIGNhbGwgdG8gYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gUHJldmlvdXNseSwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCB3YXMgZXhlY3V0ZWQgZmlyc3QsIGFuZCBgY29uZF9yZXNjaGVkKClgIHdhcyBvbmx5IGludm9rZWQgaWYgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBzaWduYWxlZCBhIG5lZWQgZm9yIHJlc2NoZWR1bGluZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZSB0byB0aGUgc2NoZWR1bGluZyBiZWhhdmlvci4KClNlY29uZCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgdGhleSYjMzk7cmUgdXNpbmcgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgYGNvbmRfcmVzY2hlZCgpYC4gIEdpdmVuIHRoZSBuYW1pbmcsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyByZWxhdGVzIHRvIFJDVSBxdWllc2NlbnQgc3RhdGUgY2hlY2tzLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB3ZSBhcmUgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIENHUk9VUF9XUklURUJBQ0sgYW5kIFJDVSBoZXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlIGBDR1JPVVBfV1JJVEVCQUNLYCBmZWF0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnRleHRzIHRoaXMgaXMgcnVubmluZyBpbiB0byBiZSBhYmxlIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1dSSVRFQkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEyNT1jb25maWcgQkxLX0NHUk9VUFxuLS1cbmluaXQvS2NvbmZpZy0xMTQ2LVxuaW5pdC9LY29uZmlnOjExNDc6Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcbmluaXQvS2NvbmZpZy0xMTQ4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZT8gR2l2ZW4gdGhlIG5hdHVyZSBvZiB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGgsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdG9wLWxldmVsIG9wdGlvbnMuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gZm9jdXMgYXJvdW5kIGxpbmUgMTE0Ny4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXJlYSB0byB6ZXJvIGluIG9uIGZvciB0aGUgcHJvYmxlbSBJIHN1c3BlY3Qgd2UmIzM5O3JlIHNlZWluZy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlIGFuZCBzdGFydCBwaWVjaW5nIHRoaXMgcHV6emxlIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdE9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3JcbjExNDE6XHRcdGVuYWJsaW5nIHByb3BvcnRpb25hbCB3ZWlnaHQgZGl2aXNpb24gb2YgZGlzayBiYW5kd2lkdGggaW4gQ0ZRLCBzZXRcbjExNDI6XHRcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxuMTE0MzpcdFx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuMTE0NDpcdFxuMTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYyCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IENHUk9VUF9XUklURUJBQ0sgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBDR1JPVVBfV1JJVEVCQUNLYCwgZGVmYXVsdGluZyB0byAmIzM5O3kmIzM5OyBhbmQgZGVwZW5kaW5nIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCwgd2FycmFudHMgYSB0aG9yb3VnaCBsb29rLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGlzIGJvdGggKnJlYWNoYWJsZSogYW5kICp3b3J0aCBmdXp6aW5nKi4KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB3cml0ZWJhY2sgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY2dyb3VwIGNvbnRleHQgKGBtbS9iYWNraW5nLWRldi5jYCBhbmQgYXNzb2NpYXRlZCBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgKS4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXNlIGZlYXR1cmVzIGFyZSBzdGFuZGFyZCBmYXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRTsgY2dyb3VwcyB3aXRoIG1lbWNnLCBibGtjZywgYW5kIHdyaXRlYmFjaywgYWxvbmcgd2l0aCBjZ3JvdXAgb2ZmbGluaW5nIGFuZCB3cml0ZWJhY2ssIGFyZSBwYXRocyB0aGF0IHN5emthbGxlciBhY3RpdmVseSBleHBsb3Jlcy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgYWdhaW5zdCB0aGUgZXN0YWJsaXNoZWQgY3JpdGVyaWEuIFNlY3Rpb24gMyBvZiB0aGUgZnV6emluZyBndWlkZWxpbmVzIGhpZ2hsaWdodHMgbWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucyBhcyBhIGtleSBhcmVhLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHdyaXRlYmFjayBsb2dpYyDigJMgd2hpY2ggaXMgY29yZSBNTSDigJMgdGhpcyBmaXRzIHRoZSBiaWxsLiBSZWZhY3RvcmluZ3MgYW5kIGNvZGUgY2xlYW51cHMsIGFzIHBlciBTZWN0aW9uIDMsIGluICpyZWFjaGFibGUqIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcywgYXJlIGFsc28gdG8gYmUgZnV6emVkLiBBbmQgcGVyIFNlY3Rpb24gMSwgSSBzaG91bGRuJiMzOTt0IGJsaW5kbHkgdHJ1c3QgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciAmIzM0O3JlZmFjdG9yaW5nLiYjMzQ7CgpUaGUgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIGFsc28gaW1wb3J0YW50IHRvIGNoZWNrOiBJcyB0aGlzIG5vbi1rZXJuZWwvbm9uLWV4ZWN1dGFibGUgY29kZT8gTm8uIElzIHRoaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlPyBOby4gQXJlIHRoZSBleGVjdXRpb24gcGF0aHMgdW5yZWFjaGFibGU/IEFsc28gbm8uCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBtb2RpZmljYXRpb25zIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHdyaXRlYmFjayBsb2dpYyB3aXRoaW4gYSByZWFjaGFibGUgY2dyb3VwIGNvbnRleHQsIEkmIzM5O20gY29uY2x1ZGluZyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgSSBuZWVkIHRvIGRlZmluZSB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4KClRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UsIHRoZSBvbmVzIEkgbmVlZCB0byB6ZXJvIGluIG9uLCBhcmUgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpcyBub24tc3RhdGljIChhbmQgdGhlcmVmb3JlIHZpc2libGUpLCB3aGljaCBpdCBpcyAoaXQmIzM5O3Mgc3RhdGljKS4gSG93ZXZlciwgdGhpcyBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB3b3JrcXVldWUgY2FsbGJhY2sgZnVuY3Rpb25zIGxpa2UgdGhpcyBhcmUgdmVyeSBsaWtlbHkgdG8gaGF2ZSBzeW1ib2xzIGluIGthbGxzeW1zIHVubGVzcyB0aGV5IGFyZSBpbmxpbmVkIGludG8gbm90aGluZyAoYW5kIHRoaXMgaXNuJiMzOTt0OyBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIgcGFzc2VkIHRvIGBJTklUX1dPUktgL2BERUNMQVJFX1dPUktgLCBzbyBpdHMgYWRkcmVzcyBpcyBkZWZpbml0ZWx5IHRha2VuIGFuZCBub3QgaW5saW5lZCEpLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBgd2JfbWVtY2dfb2ZmbGluZWAgYW5kIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5pbmcuIFRoaXMgbmFycm93cyB0aGUgc2NvcGUuIFRoZXkgYXJlIG5vdCB1YmlxdWl0b3VzIGZ1bmN0aW9uczsgdGhleSBhcmUgdmVyeSBzcGVjaWZpYyB0byBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmluZy4KCkZvciB0aGUgYEVuYWJsZUNvbmZpZ3NgLCBJJiMzOTtsbCBleHBsaWNpdGx5IG5lZWQgYENHUk9VUF9XUklURUJBQ0tgICh3aGljaCBkZXBlbmRzIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCksIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAuIEV4YW1pbmluZyBgbW0vYmFja2luZy1kZXYuY2AsIHRoZSBgI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBjb25maXJtcyB0aGlzIGRlcGVuZGVuY3kuCgpGaW5hbGx5LCBJJiMzOTtsbCBkb3VibGUtY2hlY2s6IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB0aGUgZGlmZiBtb2RpZmllcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgaW4gYG1tL2JhY2tpbmctZGV2LmNgLCBhbmQgdGhlIHJhdGlvbmFsZSBpcyBzb2xpZDogY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5pbmcgY2xlYW51cCBub3cgdXNlcyBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCwgYW5kIGl0IHRvdWNoZXMgY29yZSBNTS93cml0ZWJhY2sgbG9naWMgdGhhdCYjMzk7cyBleGVyY2lzZWQgd2hlbiBjZ3JvdXBzIGFyZSBkZXN0cm95ZWQvb2ZmbGluZWQgd2l0aCBhY3RpdmUgd3JpdGViYWNrLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCwgYW5kIGB3Yl9tZW1jZ19vZmZsaW5lYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYW5kIGBCTEtfQ0dST1VQYC4KClRpbWUgdG8gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtjbGVhbnVwX29mZmxpbmVfY2d3YiYjMzQ7LAogICAgJiMzNDt3Yl9tZW1jZ19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmUgY2xlYW51cCB3b3JrZXIgbG9vcCBpbiBtbS9iYWNraW5nLWRldi5jLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSBiZWhhdmlvciB2aWEgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGR1cmluZyBvZmZsaW5lIGNnd2IgdGVhcmRvd24uIFRoaXMgY29kZSBpcyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAvIHdyaXRlYmFjayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIHVuZGVyIG1lbW9yeSBhbmQgSS9PIGxvYWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4mIzM0OywKICAgICYjMzQ7Y2xlYW51cF9vZmZsaW5lX2Nnd2ImIzM0OywKICAgICYjMzQ7d2JfbWVtY2dfb2ZmbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5lIGNsZWFudXAgd29ya2VyIGxvb3AgaW4gbW0vYmFja2luZy1kZXYuYywgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgYmVoYXZpb3IgdmlhIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBkdXJpbmcgb2ZmbGluZSBjZ3diIHRlYXJkb3duLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgLyB3cml0ZWJhY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiB1bmRlciBtZW1vcnkgYW5kIEkvTyBsb2FkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGluIGBtbS9iYWNraW5nLWRldi5jYCBieSBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBsb29wIGZyb20gYHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpIGNvbmRfcmVzY2hlZCgpO2AgdG8gYGRvIHsgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOyB9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO2AuIFRoaXMgY2hhbmdlIGlzIHB1cmVseSByZWxhdGVkIHRvIHRhc2sgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSByZXBvcnRpbmcgZHVyaW5nIHdyaXRlYmFjayBjbGVhbnVwLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDMxZmY0Yjk4MjlmYTUxMDI1ZjZhZTNkNWQyM2E5YmM3Y2UyZGI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxOTowNjozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IGNlY2JjZjkwNjBhNjUuLjE4ZTk5OTA1M2JhZTAgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYmFja2luZy1kZXYuYwpAQCAtOTEwLDggJiM0Mzs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2Nnd2JfbG9jayk7Ci0JCXdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpCi0JCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCWRvIHsKJiM0MzsJCQljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiYjNDM7CQl9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpOwogCQlzcGluX2xvY2tfaXJxKCZhbXA7Y2d3Yl9sb2NrKTsKIAogCQl3Yl9wdXQod2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBmaXJpbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGlzIGluIGBtbS9iYWNraW5nLWRldi5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGJhY2tpbmcgZGV2aWNlIGNvZGUuIFNvIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgY2hhbmdpbmcgaG93IHRoZSBjbGVhbnVwIG9mIG9mZmxpbmUgQ0dXQnMgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYmFja2luZyBkZXZpY2VzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgc2ltcGxlIGB3aGlsZWAgbG9vcCB3aXRoIGEgYGRvLi4ud2hpbGVgIGxvb3AgYW5kIGFkZGVkIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLiBUaGF0IGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgYmVpbmcgbW9yZSBjb29wZXJhdGl2ZSB3aXRoIHRoZSBSQ1UgbWVjaGFuaXNtIGR1cmluZyBjbGVhbnVwLgoKT2theSwgbGV0JiMzOTtzIGdldCBhIGJyb2FkZXIgdmlldy4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayByZWFkLWZpbGUgb3IgZ3JlcHBlciBzZWFyY2ggb24gYG1tL2JhY2tpbmctZGV2LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFyb3VuZCB0aGlzIGZpbGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgdGhhdCBtaWdodCBiZSBzZW5zaXRpdmUgdG8gdGhlIGNoYW5nZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzaW5jZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjbGVhbnVwIGxvb3AgaW4gYSBjcml0aWNhbCBwYXRoLCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoYXQgYXJlYSB1c2luZyBLTVNBTi4gSXQgbWlnaHQgbm90IGJlIGEgaHVnZSByaXNrLCBidXQgd2l0aCBSQ1UgaW52b2x2ZWQsIGl0JiMzOTtzIHdvcnRoIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9iYWNraW5nLWRldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4OTA6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA4OTE6XHRcbiA4OTI6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xuIDg5MzpcdFx0XHR3YiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2b2ZmbGluZV9jZ3dicywgc3RydWN0IGJkaV93cml0ZWJhY2ssXG4gODk0Olx0XHRcdFx0XHQgICAgICBvZmZsaW5lX25vZGUpO1xuIDg5NTpcdFx0XHRsaXN0X21vdmUoXHUwMDI2d2ItXHUwMDNlb2ZmbGluZV9ub2RlLCBcdTAwMjZwcm9jZXNzZWQpO1xuIDg5NjpcdFxuIDg5NzpcdFx0XHQvKlxuIDg5ODpcdFx0XHQgKiBJZiB3YiBpcyBkaXJ0eSwgY2xlYW5pbmcgdXAgdGhlIHdyaXRlYmFjayBieSBzd2l0Y2hpbmdcbiA4OTk6XHRcdFx0ICogYXR0YWNoZWQgaW5vZGVzIHdpbGwgcmVzdWx0IGluIGFuIGVmZmVjdGl2ZSByZW1vdmFsIG9mIGFueVxuIDkwMDpcdFx0XHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24mIzM5O3QgdGhlIGdvYWwuICBJbnN0ZWFkLFxuIDkwMTpcdFx0XHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXG4gOTAyOlx0XHRcdCAqIHdpbGwgYmUgbGlrZWx5IGNvbXBsZXRlZC4gIElmIGluIHRoZSBtZWFudGltZSBzb21lIGlub2Rlc1xuIDkwMzpcdFx0XHQgKiB3aWxsIGdldCByZS1kaXJ0aWVkLCB0aGV5IHNob3VsZCBiZSBldmVudHVhbGx5IHN3aXRjaGVkIHRvXG4gOTA0Olx0XHRcdCAqIGEgbmV3IGNnd2IuXG4gOTA1Olx0XHRcdCAqL1xuIDkwNjpcdFx0XHRpZiAod2JfaGFzX2RpcnR5X2lvKHdiKSlcbiA5MDc6XHRcdFx0XHRjb250aW51ZTtcbiA5MDg6XHRcbiA5MDk6XHRcdFx0aWYgKCF3Yl90cnlnZXQod2IpKVxuIDkxMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDkxMTpcdFxuIDkxMjpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiA5MTM6XHRcdFx0ZG8ge1xuIDkxNDpcdFx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiA5MTU6XHRcdFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcbiA5MTY6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkxNzpcdFxuIDkxODpcdFx0XHR3Yl9wdXQod2IpO1xuIDkxOTpcdFx0fVxuIDkyMDpcdFxuIDkyMTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnByb2Nlc3NlZCkpXG4gOTIyOlx0XHRcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2cHJvY2Vzc2VkLCBcdTAwMjZvZmZsaW5lX2Nnd2JzKTtcbiA5MjM6XHRcbiA5MjQ6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuIDkyNTpcdH1cbiA5MjY6XHRcbiA5Mjc6XHQvKipcbiA5Mjg6XHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2ImIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtY2cgYmVpbmcgb2ZmbGluZWRcbiA5Mjk6XHQgKiBAbWVtY2c6IG1lbWNnIGJlaW5nIG9mZmxpbmVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjEKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgY29kZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgd2UgaGFkIGEgYHdoaWxlYCBsb29wIGNhbGxpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKWAgYW5kIGBjb25kX3Jlc2NoZWQoKWAuIE5vdywgaXQmIzM5O3MgYSBgZG8td2hpbGVgIGxvb3Agd2l0aCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBpbnNpZGUuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIFJDVSBxdWllc2NlbnQgc3RhdGVzIGFuZCB2b2x1bnRhcnkgc2NoZWR1bGluZyBkdXJpbmcgdGhlIGNsZWFudXAgcHJvY2Vzcy4KCk15IGV4cGVydCBpbnN0aW5jdCBpcyB0byBjaGVjayBmb3IgcG90ZW50aWFsIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXNzdWVzLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOgoKMS4gICoqVXNlci1zcGFjZSBpbnRlcmFjdGlvbj8qKiBObywgbm90aGluZyBoZXJlIGludm9sdmVzIHBhc3Npbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGNhdXNlIGEgcHJvYmxlbS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vcGUuIFRoZSBjb2RlJiMzOTtzIGZsb3cgZG9lc24mIzM5O3QgcmVseSBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIHRvIG1ha2UgZGVjaXNpb25zLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uPyoqIE5vIGNvbXBsZXggYWxsb2NhdGlvbnMgaW4gdGhpcyBzbmlwcGV0LCBzbyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmVuJiMzOTt0IGEgY29uY2Vybi4KNC4gICoqQnVmZmVyIG1hbmlwdWxhdGlvbnMgb3Igb3V0LW9mLWJvdW5kcyByZWFkcz8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHNjaGVkdWxpbmcgYW5kIFJDVSBzdGF0ZXMuIE5vIGJ1ZmZlciBoYW5kbGluZyBpcyBnb2luZyBvbiBoZXJlLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIEtNU0FOIGNoZWNrIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoaXMgcGF0Y2ggaXMgYSBwdXJlbHkgaW50ZXJuYWwgdHdlYWsgZm9yIHNjaGVkdWxpbmcgd2l0aGluIGEgd29ya3F1ZXVlIHdvcmtlciBmdW5jdGlvbi4gVGhlcmUgYXJlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIG5vIHVzZXItc3BhY2UgY29waWVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzYWZlIHRvIHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgYW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgaW4gYG1tL2JhY2tpbmctZGV2LmNgIGJ5IGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGxvb3AgZnJvbSBgd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSkgY29uZF9yZXNjaGVkKCk7YCB0byBgZG8geyBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7IH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7YC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IHJlbGF0ZWQgdG8gdGFzayBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIHJlcG9ydGluZyBkdXJpbmcgd3JpdGViYWNrIGNsZWFudXAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjozNS42MTk1OTU3NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc0Mzc5NDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gICAgXCJ3Yl9tZW1jZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgaW4gYG1tL2JhY2tpbmctZGV2LmNgIGJ5IGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGxvb3AgZnJvbSBgd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSkgY29uZF9yZXNjaGVkKCk7YCB0byBgZG8geyBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7IH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7YC4gVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IHJlbGF0ZWQgdG8gdGFzayBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIHJlcG9ydGluZyBkdXJpbmcgd3JpdGViYWNrIGNsZWFudXAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5lIGNsZWFudXAgd29ya2VyIGxvb3AgaW4gbW0vYmFja2luZy1kZXYuYywgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgYmVoYXZpb3IgdmlhIGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKSBkdXJpbmcgb2ZmbGluZSBjZ3diIHRlYXJkb3duLiBUaGlzIGNvZGUgaXMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgLyB3cml0ZWJhY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgZHVyaW5nIGNncm91cCBkZXN0cnVjdGlvbiB1bmRlciBtZW1vcnkgYW5kIEkvTyBsb2FkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjozNS42MTk2MDAzNTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjI4ODAzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMDMxZmY0Yjk4MjlmYTUxMDI1ZjZhZTNkNWQyM2E5YmM3Y2UyZGI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTk6MDY6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmNcXG5pbmRleCBjZWNiY2Y5MDYwYTY1Li4xOGU5OTkwNTNiYWUwIDEwMDY0NFxcbi0tLSBhL21tL2JhY2tpbmctZGV2LmNcXG4rKysgYi9tbS9iYWNraW5nLWRldi5jXFxuQEAgLTkxMCw4ICs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuLVxcdFxcdHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpXFxuLVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG4rXFx0XFx0fSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gXFxuIFxcdFxcdHdiX3B1dCh3Yik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjM3LjA0MzE0NDc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDg3Nzk0MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5cIixcbiAgICBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gICAgXCJ3Yl9tZW1jZ19vZmZsaW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB3cml0ZWJhY2sgb2ZmbGluZSBjbGVhbnVwIHdvcmtlciBsb29wIGluIG1tL2JhY2tpbmctZGV2LmMsIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGFuZCBSQ1UgcXVpZXNjZW50IHN0YXRlIGJlaGF2aW9yIHZpYSBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCkgZHVyaW5nIG9mZmxpbmUgY2d3YiB0ZWFyZG93bi4gVGhpcyBjb2RlIGlzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IC8gd3JpdGViYWNrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGR1cmluZyBjZ3JvdXAgZGVzdHJ1Y3Rpb24gdW5kZXIgbWVtb3J5IGFuZCBJL08gbG9hZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDMxZmY0Yjk4MjlmYTUxMDI1ZjZhZTNkNWQyM2E5YmM3Y2UyZGI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxOTowNjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jXG5pbmRleCBjZWNiY2Y5MDYwYTY1Li4xOGU5OTkwNTNiYWUwIDEwMDY0NFxuLS0tIGEvbW0vYmFja2luZy1kZXYuY1xuKysrIGIvbW0vYmFja2luZy1kZXYuY1xuQEAgLTkxMCw4ICs5MTAsOSBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4tXHRcdHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpXG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdGRvIHtcbitcdFx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4rXHRcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2d3Yl9sb2NrKTtcbiBcbiBcdFx0d2JfcHV0KHdiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjM3LjA0MzE0NjAxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NjkxMjE4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkaWZmYC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGFsdGVyZWQgaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29kZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQgYXJvdW5kIGxpbmUgOTEwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgYHdoaWxlYCBsb29wIHdpdGggYGNvbmRfcmVzY2hlZCgpYCBpbnNpZGUuIE5vdywgaXQncyBhIGBkby4uLndoaWxlYCBsb29wLCBhbmQgdGhlIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGZ1bmN0aW9uIGhhcyBiZWVuIHN3YXBwZWQgaW4sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlIHdlcmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBibG9ja2luZyBpc3N1ZXMgaW4gdGhlIG9sZCBsb29wLCBwb3NzaWJseSByZWxhdGVkIHRvIGhvbGRpbmcgYSBsb2NrIChgY2d3Yl9sb2NrYCkuIFRoZSBzd2l0Y2ggdG8gYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgc3VnZ2VzdHMgdGhpcyBjaGFuZ2UgaXMgYWltZWQgYXQgYWxsb3dpbmcgb3RoZXIgdGFza3MgdG8gcnVuIG1vcmUgb2Z0ZW4sIGFuZCB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBzZWVtcyB0byBkZWFsIHdpdGggUkNVIChSZWFkLUNvcHktVXBkYXRlKSBzY2VuYXJpb3MuIFRvIGdldCBhIGJldHRlciBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgcXVpY2tseSByZWFkIHRoZSBmaWxlIGFyb3VuZCB0aGlzIHNlY3Rpb24uIENvbnRleHQgaXMga2V5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9ja2luZyBtZWNoYW5pc21zIHRvIGZ1bGx5IGFwcHJlY2lhdGUgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgY29tbWl0IG1lc3NhZ2VzIG9yIGRvY3VtZW50YXRpb247IHRoaXMgc3VidGxlIHNoaWZ0IGluIGJlaGF2aW9yIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDIuOTEyMjY5ODc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYmFja2luZy1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4ODA6XFx0ICpcXG4gODgxOlxcdCAqIFRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzIGJ5IHN3aXRjaGluZyBhdHRhY2hlZCBpbm9kZXMgdG8gdGhlIG5lYXJlc3RcXG4gODgyOlxcdCAqIGxpdmluZyBhbmNlc3RvcidzIHdyaXRlYmFjay4gUHJvY2Vzc2VkIHdicyBhcmUgcGxhY2VkIGF0IHRoZSBlbmRcXG4gODgzOlxcdCAqIG9mIHRoZSBsaXN0IHRvIGd1YXJhbnRlZSB0aGUgZm9yd2FyZCBwcm9ncmVzcy5cXG4gODg0OlxcdCAqL1xcbiA4ODU6XFx0c3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDg4NjpcXHR7XFxuIDg4NzpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XFxuIDg4ODpcXHRcXHRMSVNUX0hFQUQocHJvY2Vzc2VkKTtcXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xcbiA4OTM6XFx0XFx0XFx0d2IgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZmxpbmVfbm9kZSk7XFxuIDg5NTpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNndiLVxcdTAwM2VvZmZsaW5lX25vZGUsIFxcdTAwMjZwcm9jZXNzZWQpO1xcbiA4OTY6XFx0XFxuIDg5NzpcXHRcXHRcXHQvKlxcbiA4OTg6XFx0XFx0XFx0ICogSWYgd2IgaXMgZGlydHksIGNsZWFuaW5nIHVwIHRoZSB3cml0ZWJhY2sgYnkgc3dpdGNoaW5nXFxuIDg5OTpcXHRcXHRcXHQgKiBhdHRhY2hlZCBpbm9kZXMgd2lsbCByZXN1bHQgaW4gYW4gZWZmZWN0aXZlIHJlbW92YWwgb2YgYW55XFxuIDkwMDpcXHRcXHRcXHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24ndCB0aGUgZ29hbC4gIEluc3RlYWQsXFxuIDkwMTpcXHRcXHRcXHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXFxuIDkwMjpcXHRcXHRcXHQgKiB3aWxsIGJlIGxpa2VseSBjb21wbGV0ZWQuICBJZiBpbiB0aGUgbWVhbnRpbWUgc29tZSBpbm9kZXNcXG4gOTAzOlxcdFxcdFxcdCAqIHdpbGwgZ2V0IHJlLWRpcnRpZWQsIHRoZXkgc2hvdWxkIGJlIGV2ZW50dWFsbHkgc3dpdGNoZWQgdG9cXG4gOTA0OlxcdFxcdFxcdCAqIGEgbmV3IGNnd2IuXFxuIDkwNTpcXHRcXHRcXHQgKi9cXG4gOTA2OlxcdFxcdFxcdGlmICh3Yl9oYXNfZGlydHlfaW8od2IpKVxcbiA5MDc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdFxcdGlmICghd2JfdHJ5Z2V0KHdiKSlcXG4gOTEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MTE6XFx0XFxuIDkxMjpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDkxMzpcXHRcXHRcXHRkbyB7XFxuIDkxNDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuIDkxNTpcXHRcXHRcXHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xcbiA5MTY6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0XFx0d2JfcHV0KHdiKTtcXG4gOTE5OlxcdFxcdH1cXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwcm9jZXNzZWQpKVxcbiA5MjI6XFx0XFx0XFx0bGlzdF9zcGxpY2VfdGFpbChcXHUwMDI2cHJvY2Vzc2VkLCBcXHUwMDI2b2ZmbGluZV9jZ3dicyk7XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTI1OlxcdH1cXG4gOTI2OlxcdFxcbiA5Mjc6XFx0LyoqXFxuIDkyODpcXHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2IncyBhc3NvY2lhdGVkIHdpdGggYSBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbiA5Mjk6XFx0ICogQG1lbWNnOiBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbiA5MzA6XFx0ICpcXG4gOTMxOlxcdCAqIEFsc28gcHJldmVudHMgY3JlYXRpb24gb2YgYW55IG5ldyB3YidzIGFzc29jaWF0ZWQgd2l0aCBAbWVtY2cuXFxuIDkzMjpcXHQgKi9cXG4gOTMzOlxcdHZvaWQgd2JfbWVtY2dfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIDkzNDpcXHR7XFxuIDkzNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICptZW1jZ19jZ3diX2xpc3QgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdDtcXG4gOTM2OlxcdFxcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgKm5leHQ7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDkzOTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2IsIG5leHQsIG1lbWNnX2Nnd2JfbGlzdCwgbWVtY2dfbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDIuOTEyMzU3MjM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0MDQ0ODgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDR1dCIENsZWFudXAgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYGNnd2JzYCB0aGluZyBpcyBjbGVhbmVkIHVwLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAgYW5kIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgZml0IGludG8gdGhlIHBpY3R1cmUuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jZSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgd2l0aCBsaW5lcyA4MDAgdG8gODgwIG9mIGBtbS9iYWNraW5nLWRldi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29udGV4dCBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIGFsbG93IG1lIHRvIGRldGVybWluZSB0aGVpciByb2xlIGluIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDQuOTUyODA3NjU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYmFja2luZy1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0XFx0YmxrY2dfY3NzID0gY2dyb3VwX2dldF9lX2NzcyhtZW1jZ19jc3MtXFx1MDAzZWNncm91cCwgXFx1MDAyNmlvX2NncnBfc3Vic3lzKTtcXG4gODAxOlxcdFxcdFxcdGlmICh1bmxpa2VseSh3Yi1cXHUwMDNlYmxrY2dfY3NzICE9IGJsa2NnX2NzcyB8fCAhd2JfdHJ5Z2V0KHdiKSkpXFxuIDgwMjpcXHRcXHRcXHRcXHR3YiA9IE5VTEw7XFxuIDgwMzpcXHRcXHRcXHRjc3NfcHV0KGJsa2NnX2Nzcyk7XFxuIDgwNDpcXHRcXHR9XFxuIDgwNTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0cmV0dXJuIHdiO1xcbiA4MDg6XFx0fVxcbiA4MDk6XFx0XFxuIDgxMDpcXHQvKipcXG4gODExOlxcdCAqIHdiX2dldF9jcmVhdGUgLSBnZXQgd2IgZm9yIGEgZ2l2ZW4gbWVtY2csIGNyZWF0ZSBpZiBuZWNlc3NhcnlcXG4gODEyOlxcdCAqIEBiZGk6IHRhcmdldCBiZGlcXG4gODEzOlxcdCAqIEBtZW1jZ19jc3M6IGNncm91cF9zdWJzeXNfc3RhdGUgb2YgdGhlIHRhcmdldCBtZW1jZyAobXVzdCBoYXZlIHBvc2l0aXZlIHJlZilcXG4gODE0OlxcdCAqIEBnZnA6IGFsbG9jYXRpb24gbWFzayB0byB1c2VcXG4gODE1OlxcdCAqXFxuIDgxNjpcXHQgKiBUcnkgdG8gZ2V0IHRoZSB3YiBmb3IgQG1lbWNnX2NzcyBvbiBAYmRpLiAgSWYgaXQgZG9lc24ndCBleGlzdCwgdHJ5IHRvXFxuIDgxNzpcXHQgKiBjcmVhdGUgb25lLiAgU2VlIHdiX2dldF9sb29rdXAoKSBmb3IgbW9yZSBkZXRhaWxzLlxcbiA4MTg6XFx0ICovXFxuIDgxOTpcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2JfZ2V0X2NyZWF0ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLFxcbiA4MjA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3MsXFxuIDgyMTpcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbiA4MjI6XFx0e1xcbiA4MjM6XFx0XFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKndiO1xcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRtaWdodF9hbGxvYyhnZnApO1xcbiA4MjY6XFx0XFxuIDgyNzpcXHRcXHRkbyB7XFxuIDgyODpcXHRcXHRcXHR3YiA9IHdiX2dldF9sb29rdXAoYmRpLCBtZW1jZ19jc3MpO1xcbiA4Mjk6XFx0XFx0fSB3aGlsZSAoIXdiIFxcdTAwMjZcXHUwMDI2ICFjZ3diX2NyZWF0ZShiZGksIG1lbWNnX2NzcywgZ2ZwKSk7XFxuIDgzMDpcXHRcXG4gODMxOlxcdFxcdHJldHVybiB3YjtcXG4gODMyOlxcdH1cXG4gODMzOlxcdFxcbiA4MzQ6XFx0c3RhdGljIGludCBjZ3diX2JkaV9pbml0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpXFxuIDgzNTpcXHR7XFxuIDgzNjpcXHRcXHRpbnQgcmV0O1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRJTklUX1JBRElYX1RSRUUoXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl90cmVlLCBHRlBfQVRPTUlDKTtcXG4gODM5OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl9yZWxlYXNlX211dGV4KTtcXG4gODQwOlxcdFxcdGluaXRfcndzZW0oXFx1MDAyNmJkaS1cXHUwMDNld2Jfc3dpdGNoX3J3c2VtKTtcXG4gODQxOlxcdFxcbiA4NDI6XFx0XFx0cmV0ID0gd2JfaW5pdChcXHUwMDI2YmRpLVxcdTAwM2V3YiwgYmRpLCBHRlBfS0VSTkVMKTtcXG4gODQzOlxcdFxcdGlmICghcmV0KSB7XFxuIDg0NDpcXHRcXHRcXHRiZGktXFx1MDAzZXdiLm1lbWNnX2NzcyA9IFxcdTAwMjZyb290X21lbV9jZ3JvdXAtXFx1MDAzZWNzcztcXG4gODQ1OlxcdFxcdFxcdGJkaS1cXHUwMDNld2IuYmxrY2dfY3NzID0gYmxrY2dfcm9vdF9jc3M7XFxuIDg0NjpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmJkaS1cXHUwMDNld2Iuc3dpdGNoX3dvcmssIGlub2RlX3N3aXRjaF93YnNfd29ya19mbik7XFxuIDg0NzpcXHRcXHRcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNmJkaS1cXHUwMDNld2Iuc3dpdGNoX3dic19jdHhzKTtcXG4gODQ4OlxcdFxcdH1cXG4gODQ5OlxcdFxcdHJldHVybiByZXQ7XFxuIDg1MDpcXHR9XFxuIDg1MTpcXHRcXG4gODUyOlxcdHN0YXRpYyB2b2lkIGNnd2JfYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSlcXG4gODUzOlxcdHtcXG4gODU0OlxcdFxcdHN0cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRlcjtcXG4gODU1OlxcdFxcdHZvaWQgKipzbG90O1xcbiA4NTY6XFx0XFx0c3RydWN0IGJkaV93cml0ZWJhY2sgKndiO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRXQVJOX09OKHRlc3RfYml0KFdCX3JlZ2lzdGVyZWQsIFxcdTAwMjZiZGktXFx1MDAzZXdiLnN0YXRlKSk7XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg2MTpcXHRcXHRyYWRpeF90cmVlX2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl90cmVlLCBcXHUwMDI2aXRlciwgMClcXG4gODYyOlxcdFxcdFxcdGNnd2Jfa2lsbCgqc2xvdCk7XFxuIDg2MzpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl9yZWxlYXNlX211dGV4KTtcXG4gODY2OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg2NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNmJkaS1cXHUwMDNld2JfbGlzdCkpIHtcXG4gODY4OlxcdFxcdFxcdHdiID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2YmRpLVxcdTAwM2V3Yl9saXN0LCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gODY5OlxcdFxcdFxcdFxcdFxcdCAgICAgIGJkaV9ub2RlKTtcXG4gODcwOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gODcxOlxcdFxcdFxcdHdiX3NodXRkb3duKHdiKTtcXG4gODcyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg3MzpcXHRcXHR9XFxuIDg3NDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDg3NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJkaS1cXHUwMDNlY2d3Yl9yZWxlYXNlX211dGV4KTtcXG4gODc2OlxcdH1cXG4gODc3OlxcdFxcbiA4Nzg6XFx0LypcXG4gODc5OlxcdCAqIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4gLSB0cnkgdG8gcmVsZWFzZSBkeWluZyBjZ3dic1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjo0NC45NTI5MDM4NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM0OTMwODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgY2d3YiBDbGVhbnVwIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlZmluaXRpb24gYW5kIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGl0IHJlbGllcyBvbiBmb3IgY2d3YiB3aXRoaW4gdGhlIGBtbS9iYWNraW5nLWRldi5jYCBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgZmlsZSBpdHNlbGYuIEknbGwgcmVhZCB0aHJvdWdoIGBtbS9iYWNraW5nLWRldi5jYCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHdoZXJlIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgaXMgZGVmaW5lZC4gVGhlbiwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy5cblxuVG8gZG8gdGhhdCBxdWlja2x5IEknbGwgbmVlZCB0byBnbyBiYWNrIHVwIGluIGBtbS9iYWNraW5nLWRldi5jYCwgb3IgbWF5YmUgSSdsbCBuZWVkIHRvIHJlYWNoIGZvciBgZ3JlcGAuIEknbGwgbG9vayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBsaWtlIGBDT05GSUdfYCBvciBgI2lmZGVmYCB0byBpZGVudGlmeSBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IGNnd2IgaXMgaW50ZWdyYXRlZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkzMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDYuNzg3ODM2OTM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Njg0NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFudXBfb2ZmbGluZV9jZ3diXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9iYWNraW5nLWRldi5jPTU5OD1zdGF0aWMgTElTVF9IRUFEKG9mZmxpbmVfY2d3YnMpO1xcbm1tL2JhY2tpbmctZGV2LmM6NTk5OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5tbS9iYWNraW5nLWRldi5jOjYwMDpzdGF0aWMgREVDTEFSRV9XT1JLKGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrLCBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuKTtcXG5tbS9iYWNraW5nLWRldi5jLTYwMS1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9ODUyPXN0YXRpYyB2b2lkIGNnd2JfYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSlcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODc4LS8qXFxubW0vYmFja2luZy1kZXYuYzo4Nzk6ICogY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbiAtIHRyeSB0byByZWxlYXNlIGR5aW5nIGNnd2JzXFxubW0vYmFja2luZy1kZXYuYy04ODAtICpcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtODg0LSAqL1xcbm1tL2JhY2tpbmctZGV2LmM6ODg1OnN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL2JhY2tpbmctZGV2LmMtODg2LXtcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtOTE0LVxcdFxcdFxcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG5tbS9iYWNraW5nLWRldi5jOjkxNTpcXHRcXHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xcbm1tL2JhY2tpbmctZGV2LmMtOTE2LVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuLS1cXG5tbS9iYWNraW5nLWRldi5jPTkzMz12b2lkIHdiX21lbWNnX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy05NDMtXFxubW0vYmFja2luZy1kZXYuYzo5NDQ6XFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2Y2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmspO1xcbm1tL2JhY2tpbmctZGV2LmMtOTQ1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDYuODQ0NTI2NTg2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NTc3MjIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAgYW5kIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBiYWNraW5nLWRldi5jYCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJlaGF2aW9yIG9mIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzLCBvZiBjb3Vyc2UsIHRoZSBzb3VyY2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQuIEknbGwgbmVlZCB0byB0aGVuIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgbW0vYmFja2luZy1kZXYuY2AgZmlsZSB0byBjaGVjayBmb3IgYW55IGAjaWZkZWZgIGJsb2NrcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgY29tcGlsYXRpb24gb3IgZXhlY3V0aW9uLiBJJ20gbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgbWFrZSBpdCBiZWhhdmUgZGlmZmVyZW50bHkgdW5kZXIgY2VydGFpbiBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgY2lyY3Vtc3RhbmNlcy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmYCBibG9ja3MgY2FuIGNhdXNlIHN1YnRsZSBhbmQgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgaWYgeW91IGRvbid0IGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQtZGVwZW5kZW50IGNvZGUgcGF0aHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbidzIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBtaWdodCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgbW9kdWxlIHBhcmFtZXRlcnMsIG9yIGtlcm5lbCBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSBhY3R1YWxseSB3b3JrcyBpbiBkaWZmZXJlbnQgZGVwbG95bWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNjo0OC45NDAzMDA1MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTQ4MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNHUk9VUF9XUklURUJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2JhY2tpbmctZGV2LmM9NjI9c3RhdGljIHZvaWQgY29sbGVjdF93Yl9zdGF0cyhzdHJ1Y3Qgd2Jfc3RhdHMgKnN0YXRzLFxcbi0tXFxubW0vYmFja2luZy1kZXYuYy04NS1cXG5tbS9iYWNraW5nLWRldi5jOjg2OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL2JhY2tpbmctZGV2LmMtODctc3RhdGljIHZvaWQgYmRpX2NvbGxlY3Rfc3RhdHMoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSxcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9MTU4PXN0YXRpYyB2b2lkIHdiX3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTE3NC1cXHRcXHQgICBcXFwic3RhdGU6ICAgICAgICAgICAgICUxMGx4XFxcXG5cXFxcblxcXCIsXFxubW0vYmFja2luZy1kZXYuYzoxNzU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vYmFja2luZy1kZXYuYy0xNzYtXFx0XFx0ICAgY2dyb3VwX2lubyh3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VjZ3JvdXApLFxcbi0tXFxubW0vYmFja2luZy1kZXYuYz01ODA9c3RhdGljIHZvaWQgd2JfZXhpdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9iYWNraW5nLWRldi5jLTU4Ni1cXG5tbS9iYWNraW5nLWRldi5jOjU4NzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9iYWNraW5nLWRldi5jLTU4OC1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9OTg1PXN1YnN5c19pbml0Y2FsbChjZ3diX2luaXQpO1xcbm1tL2JhY2tpbmctZGV2LmMtOTg2LVxcbm1tL2JhY2tpbmctZGV2LmM6OTg3OiNlbHNlXFx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cXG5tbS9iYWNraW5nLWRldi5jLTk4OC1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9MTAwMT1zdGF0aWMgdm9pZCBjZ3diX3JlbW92ZV9mcm9tX2JkaV9saXN0KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmMtMTAwNS1cXG5tbS9iYWNraW5nLWRldi5jOjEwMDY6I2VuZGlmXFx0LyogQ09ORklHX0NHUk9VUF9XUklURUJBQ0sgKi9cXG5tbS9iYWNraW5nLWRldi5jLTEwMDctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTAzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xcbm1tL21lbWNvbnRyb2wuYy0xMDQtXFxubW0vbWVtY29udHJvbC5jOjEwNTojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtMTA2LXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzc2Mj1zdGF0aWMgdm9pZCBtZW1jZ19vZmZsaW5lX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM3NzUtXFxubW0vbWVtY29udHJvbC5jOjM3NzY6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vbWVtY29udHJvbC5jLTM3NzctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzk0NT12b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzk3MS1cXG5tbS9tZW1jb250cm9sLmM6Mzk3MjojZWxzZVxcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXFxubW0vbWVtY29udHJvbC5jLTM5NzMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mzk4Mz1zdGF0aWMgdm9pZCBtZW1jZ193Yl9kb21haW5fc2l6ZV9jaGFuZ2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zOTg2LVxcbm1tL21lbWNvbnRyb2wuYzozOTg3OiNlbmRpZlxcdC8qIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLICovXFxubW0vbWVtY29udHJvbC5jLTM5ODgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDE0Nz1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjAyLVxcdG1lbWNnLVxcdTAwM2VrbWVtY2dfaWQgPSAtMTtcXG5tbS9tZW1jb250cm9sLmM6NDIwMzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDIwNC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM4Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM4Ny1cXG5tbS9tZW1jb250cm9sLmM6NDM4ODojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9tZW1jb250cm9sLmMtNDM4OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTExMz1zdHJ1Y3Qgd2JfZG9tYWluIGdsb2JhbF93Yl9kb21haW47XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTEyMS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjEyMjojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTEyMy1cXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9MTU1PXN0YXRpYyB2b2lkIHdiX21pbl9tYXhfcmF0aW8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0xODEtXFxubW0vcGFnZS13cml0ZWJhY2suYzoxODI6I2Vsc2VcXHQvKiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSyAqL1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTgzLVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yMDk9c3RhdGljIHZvaWQgd2JfbWluX21heF9yYXRpbyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIxNS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjIxNjojZW5kaWZcXHQvKiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSyAqL1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjE3LVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz02MDk9aW50IHdiX2RvbWFpbl9pbml0KHN0cnVjdCB3Yl9kb21haW4gKmRvbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy02MjEtXFxubW0vcGFnZS13cml0ZWJhY2suYzo2MjI6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vcGFnZS13cml0ZWJhY2suYy02MjMtdm9pZCB3Yl9kb21haW5fZXhpdChzdHJ1Y3Qgd2JfZG9tYWluICpkb20pXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTE0NzA9c3RhdGljIHZvaWQgX193Yl91cGRhdGVfYmFuZHdpZHRoKHN0cnVjdCBkaXJ0eV90aHJvdHRsZV9jb250cm9sICpnZHRjLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0xNDk2LVxcdFxcdC8qXFxubW0vcGFnZS13cml0ZWJhY2suYzoxNDk3OlxcdFxcdCAqIEBtZHRjIGlzIGFsd2F5cyBOVUxMIGlmICFDR1JPVVBfV1JJVEVCQUNLIGJ1dCB0aGVcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE0OTgtXFx0XFx0ICogY29tcGlsZXIgaGFzIG5vIHdheSB0byBmaWd1cmUgdGhhdCBvdXQuICBIZWxwIGl0Llxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTQ5OS1cXHRcXHQgKi9cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjE1MDA6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9XUklURUJBQ0spIFxcdTAwMjZcXHUwMDI2IG1kdGMpIHtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE1MDEtXFx0XFx0XFx0ZG9tYWluX3VwZGF0ZV9kaXJ0eV9saW1pdChtZHRjLCBub3cpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjQwPXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNDMtXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vdm1zY2FuLmM6MjQ0OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbm1tL3Ztc2Nhbi5jLTI0NS1cXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NDguOTkwNDUyNDkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjUzMzk4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0cmFjaW5nIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIGtub3cgaXQncyAqc2luZ3VsYXIqLCBub3QgYSB2YXJpYXRpb24gbGlrZSBgd29ya2ZuYCwgc28gdGhhdCBuYXJyb3dzIHRoZSBzZWFyY2ggc2xpZ2h0bHkuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gd3JpdGViYWNrIG1lY2hhbmlzbXMsIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYGZzL2ZzLXdyaXRlYmFjay5jYC4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0ZWJhY2stcmVsYXRlZCBmdW5jdGlvbnMuIElmIGl0J3MgKm5vdCogaW4gYGZzLXdyaXRlYmFjay5jYCwgdGhlbiBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCwgYnV0IGxldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBpdCB0aGVyZSBmaXJzdCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY5NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjUxLjE1NTc5NTMyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzYzMDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbGVhbnVwX29mZmxpbmVfY2d3YlxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZzLXdyaXRlYmFjay5jPTcyNj1zdGF0aWMgYm9vbCBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKHN0cnVjdCBiZGlfd3JpdGViYWNrICpuZXdfd2IsXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy03NTItICovXFxuZnMvZnMtd3JpdGViYWNrLmM6NzUzOmJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbmZzL2ZzLXdyaXRlYmFjay5jLTc1NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oPTIxMD12b2lkIGNncm91cF93cml0ZWJhY2tfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmluY2x1ZGUvbGludXgvd3JpdGViYWNrLmg6MjExOmJvb2wgY2xlYW51cF9vZmZsaW5lX2Nnd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTtcXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTIxMi1cXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9ODg1PXN0YXRpYyB2b2lkIGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy05MTQtXFx0XFx0XFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xcbm1tL2JhY2tpbmctZGV2LmM6OTE1OlxcdFxcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XFxubW0vYmFja2luZy1kZXYuYy05MTYtXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NTMuMzIzNDMxMjE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MjQ4MzkyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgIGFuZCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xc2AgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgZnMvZnMtd3JpdGViYWNrLmNgIGFyb3VuZCBsaW5lIDc1My4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBpcyB1cCB0byBhbmQsIGNydWNpYWxseSwgKndoeSogdGhleSBjaG9zZSB0byBlbXBsb3kgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgaW4gdGhhdCBjb250ZXh0LiBHaXZlbiB0aGUgZmlsZSdzIHB1cnBvc2UsIGl0J3MgcHJldHR5IGNsZWFyIHdlJ3JlIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgb3BlcmF0aW9ucywgcG9zc2libHkgcmVsYXRlZCB0byBvZmZsaW5lIGNncm91cCB3cml0ZWJhY2sgZnVuY3Rpb25hbGl0eS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBjZ3JvdXBzIHdpdGggdGhlIGZpbGVzeXN0ZW0gd3JpdGViYWNrIG1lY2hhbmlzbXMgYmVjYXVzZSBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBudWFuY2UgbGllcy4gSSBhbnRpY2lwYXRlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gY2xlYW5pbmcgdXAgb3Igb3RoZXJ3aXNlIG1hbmFnaW5nIHRoZSBzdGF0ZSBvZiBhIGNncm91cCdzIHdyaXRlYmFjayBjb250ZXh0IHdoZW4gdGhhdCBjZ3JvdXAgdHJhbnNpdGlvbnMgdG8gYW4gb2ZmbGluZSBzdGF0ZS4gVGhlIHVzZSBvZiBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xc2AgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlIGludm9sdmluZyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYW5kIGdyYWNlZnVsIHNodXRkb3duLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoaXMgaXMgcGxheWluZyBvdXQuIElzIHRoaXMgdG8gcHJldmVudCBkZWFkbG9ja3M/IEFyZSB3ZSBwcm90ZWN0aW5nIGFnYWluc3QgcmFjZXMgd2l0aCB0YXNrcyB0aGF0IG1heSBzdGlsbCBiZSBhY2Nlc3NpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2dyb3VwPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50IGlzIGF0IHBsYXksIHByb2JhYmx5IHRpZWQgaW50byBSQ1UgdXNhZ2UgYW5kIHBvc3NpYmxlIHRhc2sgcmVzY2hlZHVsaW5nLCByZWxhdGVkIHRvIHRoaXMgb2ZmbGluZSB0cmFuc2l0aW9uIGFuZCB0aGUgd3JpdGViYWNrIG9wZXJhdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDY6NTcuMjQ4MjcyNzg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mcy13cml0ZWJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0LyoqXFxuIDc0NjpcXHQgKiBjbGVhbnVwX29mZmxpbmVfY2d3YiAtIGRldGFjaCBhc3NvY2lhdGVkIGlub2Rlc1xcbiA3NDc6XFx0ICogQHdiOiB0YXJnZXQgd2JcXG4gNzQ4OlxcdCAqXFxuIDc0OTpcXHQgKiBTd2l0Y2ggYWxsIGlub2RlcyBhdHRhY2hlZCB0byBAd2IgdG8gYSBuZWFyZXN0IGxpdmluZyBhbmNlc3RvcidzIHdiIGluIG9yZGVyXFxuIDc1MDpcXHQgKiB0byBldmVudHVhbGx5IHJlbGVhc2UgdGhlIGR5aW5nIEB3Yi4gIFJldHVybnMgJXRydWUgaWYgbm90IGFsbCBpbm9kZXMgd2VyZVxcbiA3NTE6XFx0ICogc3dpdGNoZWQgYW5kIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgcmVzdGFydGVkLlxcbiA3NTI6XFx0ICovXFxuIDc1MzpcXHRib29sIGNsZWFudXBfb2ZmbGluZV9jZ3diKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4gNzU0OlxcdHtcXG4gNzU1OlxcdFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1jZ19jc3M7XFxuIDc1NjpcXHRcXHRzdHJ1Y3QgaW5vZGVfc3dpdGNoX3dic19jb250ZXh0ICppc3c7XFxuIDc1NzpcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbmV3X3diO1xcbiA3NTg6XFx0XFx0aW50IG5yO1xcbiA3NTk6XFx0XFx0Ym9vbCByZXN0YXJ0ID0gZmFsc2U7XFxuIDc2MDpcXHRcXG4gNzYxOlxcdFxcdGlzdyA9IGt6YWxsb2NfZmxleCgqaXN3LCBpbm9kZXMsIFdCX01BWF9JTk9ERVNfUEVSX0lTVyk7XFxuIDc2MjpcXHRcXHRpZiAoIWlzdylcXG4gNzYzOlxcdFxcdFxcdHJldHVybiByZXN0YXJ0O1xcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpc3dfbnJfaW5fZmxpZ2h0KTtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0Zm9yIChtZW1jZ19jc3MgPSB3Yi1cXHUwMDNlbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQ7IG1lbWNnX2NzcztcXG4gNzY4OlxcdFxcdCAgICAgbWVtY2dfY3NzID0gbWVtY2dfY3NzLVxcdTAwM2VwYXJlbnQpIHtcXG4gNzY5OlxcdFxcdFxcdG5ld193YiA9IHdiX2dldF9jcmVhdGUod2ItXFx1MDAzZWJkaSwgbWVtY2dfY3NzLCBHRlBfS0VSTkVMKTtcXG4gNzcwOlxcdFxcdFxcdGlmIChuZXdfd2IpXFxuIDc3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzcyOlxcdFxcdH1cXG4gNzczOlxcdFxcdGlmICh1bmxpa2VseSghbmV3X3diKSlcXG4gNzc0OlxcdFxcdFxcdG5ld193YiA9IFxcdTAwMjZ3Yi1cXHUwMDNlYmRpLVxcdTAwM2V3YjsgLyogd2JfZ2V0KCkgaXMgbm9vcCBmb3IgYmRpJ3Mgd2IgKi9cXG4gNzc1OlxcdFxcbiA3NzY6XFx0XFx0bnIgPSAwO1xcbiA3Nzc6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ3Yi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gNzc4OlxcdFxcdC8qXFxuIDc3OTpcXHRcXHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBjb21wbGV0ZWQgd3JpdGViYWNrLCBhbHNvIHN3aXRjaFxcbiA3ODA6XFx0XFx0ICogY2d3YnMgZm9yIHRob3NlIGlub2RlcyBvbmx5IHdpdGggZGlydHkgdGltZXN0YW1wcy4gT3RoZXJ3aXNlLCB0aG9zZVxcbiA3ODE6XFx0XFx0ICogaW5vZGVzIHdvbid0IGJlIHdyaXR0ZW4gYmFjayBmb3IgYSBsb25nIHRpbWUgd2hlbiBsYXp5dGltZSBpc1xcbiA3ODI6XFx0XFx0ICogZW5hYmxlZCwgYW5kIHRodXMgcGlubmluZyB0aGUgZHlpbmcgY2d3YnMuIEl0IHdvbid0IGJyZWFrIHRoZVxcbiA3ODM6XFx0XFx0ICogYmFuZHdpZHRoIHJlc3RyaWN0aW9ucywgYXMgd3JpdGViYWNrIG9mIGlub2RlIG1ldGFkYXRhIGlzIG5vdFxcbiA3ODQ6XFx0XFx0ICogYWNjb3VudGVkIGZvci5cXG4gNzg1OlxcdFxcdCAqL1xcbiA3ODY6XFx0XFx0cmVzdGFydCA9IGlzd19wcmVwYXJlX3dic19zd2l0Y2gobmV3X3diLCBpc3csIFxcdTAwMjZ3Yi1cXHUwMDNlYl9hdHRhY2hlZCwgXFx1MDAyNm5yKTtcXG4gNzg3OlxcdFxcdGlmICghcmVzdGFydClcXG4gNzg4OlxcdFxcdFxcdHJlc3RhcnQgPSBpc3dfcHJlcGFyZV93YnNfc3dpdGNoKG5ld193YiwgaXN3LCBcXHUwMDI2d2ItXFx1MDAzZWJfZGlydHlfdGltZSxcXG4gNzg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bnIpO1xcbiA3OTA6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNndiLVxcdTAwM2VsaXN0X2xvY2spO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHQvKiBubyBhdHRhY2hlZCBpbm9kZXM/IGJhaWwgb3V0ICovXFxuIDc5MzpcXHRcXHRpZiAobnIgPT0gMCkge1xcbiA3OTQ6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXN3X25yX2luX2ZsaWdodCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA2OjU3LjI0ODQxOTgwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDkzNjAxNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmFja2luZyBEZXZpY2UgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgdGhleSd2ZSB0d2Vha2VkIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCB3aXRoaW4gYG1tL2JhY2tpbmctZGV2LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhpcyBsb29wIGNvbnN0cnVjdCwgc3BlY2lmaWNhbGx5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9yaWdpbmFsIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHdpdGggdGhpcyBuZXcgc3RydWN0dXJlOlxuXG5gYGBjXG5cdFx0ZG8ge1xuXHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuXHRcdH0gd2hpbGUgKGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKSk7XG5gYGBcblxuQSBmZXcgaW1tZWRpYXRlIG9ic2VydmF0aW9ucyBqdW1wIG91dCwgcmlnaHQ/IEZpcnN0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZXkgYXJlIG5vdyBjYWxsaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgICpiZWZvcmUqIHRoZSBpbml0aWFsIGNhbGwgdG8gYGNsZWFudXBfb2ZmbGluZV9jZ3diYC4gUHJldmlvdXNseSwgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCB3YXMgZXhlY3V0ZWQgZmlyc3QsIGFuZCBgY29uZF9yZXNjaGVkKClgIHdhcyBvbmx5IGludm9rZWQgaWYgYGNsZWFudXBfb2ZmbGluZV9jZ3diYCBzaWduYWxlZCBhIG5lZWQgZm9yIHJlc2NoZWR1bGluZy4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZSB0byB0aGUgc2NoZWR1bGluZyBiZWhhdmlvci5cblxuU2Vjb25kLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB0aGV5J3JlIHVzaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGBjb25kX3Jlc2NoZWQoKWAuICBHaXZlbiB0aGUgbmFtaW5nLCBJJ20gZ3Vlc3NpbmcgdGhpcyByZWxhdGVzIHRvIFJDVSBxdWllc2NlbnQgc3RhdGUgY2hlY2tzLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB3ZSBhcmUgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIENHUk9VUF9XUklURUJBQ0sgYW5kIFJDVSBoZXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgYENHUk9VUF9XUklURUJBQ0tgIGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udGV4dHMgdGhpcyBpcyBydW5uaW5nIGluIHRvIGJlIGFibGUgdG8gYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MDAuMzQyMDI1MjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjcyMDAzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9XUklURUJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMjU9Y29uZmlnIEJMS19DR1JPVVBcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTQ2LVxcbmluaXQvS2NvbmZpZzoxMTQ3OmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXFxuaW5pdC9LY29uZmlnLTExNDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzowMi4wMDkyMzAzNTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4Nzc0NzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBJdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0b3AtbGV2ZWwgb3B0aW9ucy4gSSBzcGVjaWZpY2FsbHkgd2FudCB0byBmb2N1cyBhcm91bmQgbGluZSAxMTQ3LiBUaGF0J3MgYSByZWFzb25hYmxlIGFyZWEgdG8gemVybyBpbiBvbiBmb3IgdGhlIHByb2JsZW0gSSBzdXNwZWN0IHdlJ3JlIHNlZWluZy4gVGltZSB0byBzZWUgd2hhdCdzIGRlZmluZWQgdGhlcmUgYW5kIHN0YXJ0IHBpZWNpbmcgdGhpcyBwdXp6bGUgdG9nZXRoZXIuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MDMuOTk2OTgwMDAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0MDpcXHRcXHRPbmUgbmVlZHMgdG8gYWxzbyBlbmFibGUgYWN0dWFsIElPIGNvbnRyb2xsaW5nIGxvZ2ljL3BvbGljeS4gRm9yXFxuMTE0MTpcXHRcXHRlbmFibGluZyBwcm9wb3J0aW9uYWwgd2VpZ2h0IGRpdmlzaW9uIG9mIGRpc2sgYmFuZHdpZHRoIGluIENGUSwgc2V0XFxuMTE0MjpcXHRcXHRDT05GSUdfQkZRX0dST1VQX0lPU0NIRUQ9eTsgZm9yIGVuYWJsaW5nIHRocm90dGxpbmcgcG9saWN5LCBzZXRcXG4xMTQzOlxcdFxcdENPTkZJR19CTEtfREVWX1RIUk9UVExJTkc9eS5cXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExNDY6XFx0XFxuMTE0NzpcXHRjb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbjExNDg6XFx0XFx0Ym9vbFxcbjExNDk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DRyBcXHUwMDI2XFx1MDAyNiBCTEtfQ0dST1VQXFxuMTE1MDpcXHRcXHRkZWZhdWx0IHlcXG4xMTUxOlxcdFxcbjExNTI6XFx0bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG4xMTUzOlxcdFxcdGJvb2wgXFxcIkNQVSBjb250cm9sbGVyXFxcIlxcbjExNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTE1NTpcXHRcXHRoZWxwXFxuMTE1NjpcXHRcXHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxcbjExNTc6XFx0XFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcXG4xMTU4OlxcdFxcdCAgdGFza3MuXFxuMTE1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MDMuOTk3MDk3MjYyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NDQzODM5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBDR1JPVVBfV1JJVEVCQUNLIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENHUk9VUF9XUklURUJBQ0tgLCBkZWZhdWx0aW5nIHRvICd5JyBhbmQgZGVwZW5kaW5nIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCwgd2FycmFudHMgYSB0aG9yb3VnaCBsb29rLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGlzIGJvdGggKnJlYWNoYWJsZSogYW5kICp3b3J0aCBmdXp6aW5nKi5cblxuSSdtIGZvY3VzaW5nIG9uIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgd3JpdGViYWNrIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNncm91cCBjb250ZXh0IChgbW0vYmFja2luZy1kZXYuY2AgYW5kIGFzc29jaWF0ZWQgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCkuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBmZWF0dXJlcyBhcmUgc3RhbmRhcmQgZmFyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0U7IGNncm91cHMgd2l0aCBtZW1jZywgYmxrY2csIGFuZCB3cml0ZWJhY2ssIGFsb25nIHdpdGggY2dyb3VwIG9mZmxpbmluZyBhbmQgd3JpdGViYWNrLCBhcmUgcGF0aHMgdGhhdCBzeXprYWxsZXIgYWN0aXZlbHkgZXhwbG9yZXMuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuXG5cbk5vdywgbGV0J3MgYXNzZXNzIGFnYWluc3QgdGhlIGVzdGFibGlzaGVkIGNyaXRlcmlhLiBTZWN0aW9uIDMgb2YgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBoaWdobGlnaHRzIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMgYXMgYSBrZXkgYXJlYS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHdyaXRlYmFjayBsb2dpYyDigJMgd2hpY2ggaXMgY29yZSBNTSDigJMgdGhpcyBmaXRzIHRoZSBiaWxsLiBSZWZhY3RvcmluZ3MgYW5kIGNvZGUgY2xlYW51cHMsIGFzIHBlciBTZWN0aW9uIDMsIGluICpyZWFjaGFibGUqIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcywgYXJlIGFsc28gdG8gYmUgZnV6emVkLiBBbmQgcGVyIFNlY3Rpb24gMSwgSSBzaG91bGRuJ3QgYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIG9yIFwicmVmYWN0b3JpbmcuXCJcblxuVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBhbHNvIGltcG9ydGFudCB0byBjaGVjazogSXMgdGhpcyBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNvZGU/IE5vLiBJcyB0aGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZT8gTm8uIEFyZSB0aGUgZXhlY3V0aW9uIHBhdGhzIHVucmVhY2hhYmxlPyBBbHNvIG5vLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBtb2RpZmljYXRpb25zIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHdyaXRlYmFjayBsb2dpYyB3aXRoaW4gYSByZWFjaGFibGUgY2dyb3VwIGNvbnRleHQsIEknbSBjb25jbHVkaW5nIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIEkgbmVlZCB0byBkZWZpbmUgdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UsIHRoZSBvbmVzIEkgbmVlZCB0byB6ZXJvIGluIG9uLCBhcmUgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gLCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFuZCBgY2xlYW51cF9vZmZsaW5lX2Nnd2JgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpcyBub24tc3RhdGljIChhbmQgdGhlcmVmb3JlIHZpc2libGUpLCB3aGljaCBpdCBpcyAoaXQncyBzdGF0aWMpLiBIb3dldmVyLCB0aGlzIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHdvcmtxdWV1ZSBjYWxsYmFjayBmdW5jdGlvbnMgbGlrZSB0aGlzIGFyZSB2ZXJ5IGxpa2VseSB0byBoYXZlIHN5bWJvbHMgaW4ga2FsbHN5bXMgdW5sZXNzIHRoZXkgYXJlIGlubGluZWQgaW50byBub3RoaW5nIChhbmQgdGhpcyBpc24ndDsgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgcGFzc2VkIHRvIGBJTklUX1dPUktgL2BERUNMQVJFX1dPUktgLCBzbyBpdHMgYWRkcmVzcyBpcyBkZWZpbml0ZWx5IHRha2VuIGFuZCBub3QgaW5saW5lZCEpLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBgd2JfbWVtY2dfb2ZmbGluZWAgYW5kIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gY2dyb3VwIHdyaXRlYmFjayBvZmZsaW5pbmcuIFRoaXMgbmFycm93cyB0aGUgc2NvcGUuIFRoZXkgYXJlIG5vdCB1YmlxdWl0b3VzIGZ1bmN0aW9uczsgdGhleSBhcmUgdmVyeSBzcGVjaWZpYyB0byBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmluZy5cblxuRm9yIHRoZSBgRW5hYmxlQ29uZmlnc2AsIEknbGwgZXhwbGljaXRseSBuZWVkIGBDR1JPVVBfV1JJVEVCQUNLYCAod2hpY2ggZGVwZW5kcyBvbiBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGApLCBgTUVNQ0dgLCBhbmQgYEJMS19DR1JPVVBgLiBFeGFtaW5pbmcgYG1tL2JhY2tpbmctZGV2LmNgLCB0aGUgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgY29uZmlybXMgdGhpcyBkZXBlbmRlbmN5LlxuXG5GaW5hbGx5LCBJJ2xsIGRvdWJsZS1jaGVjazogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHRoZSBkaWZmIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AsIGFuZCB0aGUgcmF0aW9uYWxlIGlzIHNvbGlkOiBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmluZyBjbGVhbnVwIG5vdyB1c2VzIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLCBhbmQgaXQgdG91Y2hlcyBjb3JlIE1NL3dyaXRlYmFjayBsb2dpYyB0aGF0J3MgZXhlcmNpc2VkIHdoZW4gY2dyb3VwcyBhcmUgZGVzdHJveWVkL29mZmxpbmVkIHdpdGggYWN0aXZlIHdyaXRlYmFjay4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbmAsIGBjbGVhbnVwX29mZmxpbmVfY2d3YmAsIGFuZCBgd2JfbWVtY2dfb2ZmbGluZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGFuZCBgQkxLX0NHUk9VUGAuXG5cblRpbWUgdG8gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY2MiwiT3V0cHV0VG9rZW5zIjoxNjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoxMS44NDE0ODMyNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU5OTE2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1dSSVRFQkFDS1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuXCIsXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YlwiLFxuICAgIFwid2JfbWVtY2dfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmUgY2xlYW51cCB3b3JrZXIgbG9vcCBpbiBtbS9iYWNraW5nLWRldi5jLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSBiZWhhdmlvciB2aWEgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGR1cmluZyBvZmZsaW5lIGNnd2IgdGVhcmRvd24uIFRoaXMgY29kZSBpcyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAvIHdyaXRlYmFjayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIHVuZGVyIG1lbW9yeSBhbmQgSS9PIGxvYWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1dSSVRFQkFDS1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuXCIsXG4gICAgXCJjbGVhbnVwX29mZmxpbmVfY2d3YlwiLFxuICAgIFwid2JfbWVtY2dfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgd3JpdGViYWNrIG9mZmxpbmUgY2xlYW51cCB3b3JrZXIgbG9vcCBpbiBtbS9iYWNraW5nLWRldi5jLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSBiZWhhdmlvciB2aWEgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpIGR1cmluZyBvZmZsaW5lIGNnd2IgdGVhcmRvd24uIFRoaXMgY29kZSBpcyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAvIHdyaXRlYmFjayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uIHVuZGVyIG1lbW9yeSBhbmQgSS9PIGxvYWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjA3OjExLjkyMTA4OTExM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NDIyOTIyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoxMS45MjE1OTA1NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQ0MTc4NjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNsZWFudXBfb2ZmbGluZV9jZ3dic193b3JrZm5gIGluIGBtbS9iYWNraW5nLWRldi5jYCBieSBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBsb29wIGZyb20gYHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpIGNvbmRfcmVzY2hlZCgpO2AgdG8gYGRvIHsgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOyB9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO2AuIFRoaXMgY2hhbmdlIGlzIHB1cmVseSByZWxhdGVkIHRvIHRhc2sgc2NoZWR1bGluZyBhbmQgUkNVIHF1aWVzY2VudCBzdGF0ZSByZXBvcnRpbmcgZHVyaW5nIHdyaXRlYmFjayBjbGVhbnVwLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb24uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDAzMWZmNGI5ODI5ZmE1MTAyNWY2YWUzZDVkMjNhOWJjN2NlMmRiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTk6MDY6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuY1xuaW5kZXggY2VjYmNmOTA2MGE2NS4uMThlOTk5MDUzYmFlMCAxMDA2NDRcbi0tLSBhL21tL2JhY2tpbmctZGV2LmNcbisrKyBiL21tL2JhY2tpbmctZGV2LmNcbkBAIC05MTAsOCArOTEwLDkgQEAgc3RhdGljIHZvaWQgY2xlYW51cF9vZmZsaW5lX2Nnd2JzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjZ3diX2xvY2spO1xuLVx0XHR3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKVxuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRkbyB7XG4rXHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuK1x0XHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNnd2JfbG9jayk7XG4gXG4gXHRcdHdiX3B1dCh3Yik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoxMS45MjE1OTE1NjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ1OTU0ODgxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0IHdhcnJhbnRzIGZpcmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHNlZS4uLiB0aGUgZGlmZiBpcyBpbiBgbW0vYmFja2luZy1kZXYuY2AuIFJpZ2h0LCB0aGF0J3MgdGhlIGJhY2tpbmcgZGV2aWNlIGNvZGUuIFNvIGl0IHNlZW1zIGxpa2UgaXQncyBjaGFuZ2luZyBob3cgdGhlIGNsZWFudXAgb2Ygb2ZmbGluZSBDR1dCcyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBiYWNraW5nIGRldmljZXMuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZXBsYWNlZCBhIHNpbXBsZSBgd2hpbGVgIGxvb3Agd2l0aCBhIGBkby4uLndoaWxlYCBsb29wIGFuZCBhZGRlZCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYC4gVGhhdCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBzdWdnZXN0cyB0aGlzIGlzIGFib3V0IGJlaW5nIG1vcmUgY29vcGVyYXRpdmUgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbSBkdXJpbmcgY2xlYW51cC5cblxuT2theSwgbGV0J3MgZ2V0IGEgYnJvYWRlciB2aWV3LiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgcmVhZC1maWxlIG9yIGdyZXBwZXIgc2VhcmNoIG9uIGBtbS9iYWNraW5nLWRldi5jYCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBhcm91bmQgdGhpcyBmaWxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGFyZWFzIHRoYXQgbWlnaHQgYmUgc2Vuc2l0aXZlIHRvIHRoZSBjaGFuZ2UuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc2luY2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBjbGVhbnVwIGxvb3AgaW4gYSBjcml0aWNhbCBwYXRoLCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoYXQgYXJlYSB1c2luZyBLTVNBTi4gSXQgbWlnaHQgbm90IGJlIGEgaHVnZSByaXNrLCBidXQgd2l0aCBSQ1UgaW52b2x2ZWQsIGl0J3Mgd29ydGggYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MDc6MjYuNTE3MDgyMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYmFja2luZy1kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gODkxOlxcdFxcbiA4OTI6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzKSkge1xcbiA4OTM6XFx0XFx0XFx0d2IgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZvZmZsaW5lX2Nnd2JzLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZmxpbmVfbm9kZSk7XFxuIDg5NTpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNndiLVxcdTAwM2VvZmZsaW5lX25vZGUsIFxcdTAwMjZwcm9jZXNzZWQpO1xcbiA4OTY6XFx0XFxuIDg5NzpcXHRcXHRcXHQvKlxcbiA4OTg6XFx0XFx0XFx0ICogSWYgd2IgaXMgZGlydHksIGNsZWFuaW5nIHVwIHRoZSB3cml0ZWJhY2sgYnkgc3dpdGNoaW5nXFxuIDg5OTpcXHRcXHRcXHQgKiBhdHRhY2hlZCBpbm9kZXMgd2lsbCByZXN1bHQgaW4gYW4gZWZmZWN0aXZlIHJlbW92YWwgb2YgYW55XFxuIDkwMDpcXHRcXHRcXHQgKiBiYW5kd2lkdGggcmVzdHJpY3Rpb25zLCB3aGljaCBpc24ndCB0aGUgZ29hbC4gIEluc3RlYWQsXFxuIDkwMTpcXHRcXHRcXHQgKiBpdCBjYW4gYmUgcG9zdHBvbmVkIHVudGlsIHRoZSBuZXh0IHRpbWUsIHdoZW4gYWxsIGlvXFxuIDkwMjpcXHRcXHRcXHQgKiB3aWxsIGJlIGxpa2VseSBjb21wbGV0ZWQuICBJZiBpbiB0aGUgbWVhbnRpbWUgc29tZSBpbm9kZXNcXG4gOTAzOlxcdFxcdFxcdCAqIHdpbGwgZ2V0IHJlLWRpcnRpZWQsIHRoZXkgc2hvdWxkIGJlIGV2ZW50dWFsbHkgc3dpdGNoZWQgdG9cXG4gOTA0OlxcdFxcdFxcdCAqIGEgbmV3IGNnd2IuXFxuIDkwNTpcXHRcXHRcXHQgKi9cXG4gOTA2OlxcdFxcdFxcdGlmICh3Yl9oYXNfZGlydHlfaW8od2IpKVxcbiA5MDc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdFxcdGlmICghd2JfdHJ5Z2V0KHdiKSlcXG4gOTEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MTE6XFx0XFxuIDkxMjpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNnd2JfbG9jayk7XFxuIDkxMzpcXHRcXHRcXHRkbyB7XFxuIDkxNDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuIDkxNTpcXHRcXHRcXHR9IHdoaWxlIChjbGVhbnVwX29mZmxpbmVfY2d3Yih3YikpO1xcbiA5MTY6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0XFx0d2JfcHV0KHdiKTtcXG4gOTE5OlxcdFxcdH1cXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwcm9jZXNzZWQpKVxcbiA5MjI6XFx0XFx0XFx0bGlzdF9zcGxpY2VfdGFpbChcXHUwMDI2cHJvY2Vzc2VkLCBcXHUwMDI2b2ZmbGluZV9jZ3dicyk7XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2d3Yl9sb2NrKTtcXG4gOTI1OlxcdH1cXG4gOTI2OlxcdFxcbiA5Mjc6XFx0LyoqXFxuIDkyODpcXHQgKiB3Yl9tZW1jZ19vZmZsaW5lIC0ga2lsbCBhbGwgd2IncyBhc3NvY2lhdGVkIHdpdGggYSBtZW1jZyBiZWluZyBvZmZsaW5lZFxcbiA5Mjk6XFx0ICogQG1lbWNnOiBtZW1jZyBiZWluZyBvZmZsaW5lZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzoyNi41MTcxODI5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ2MTczMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2hhbmdlIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG9wdGltaXppbmcgdGhlIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBmdW5jdGlvbi4gUHJldmlvdXNseSwgd2UgaGFkIGEgYHdoaWxlYCBsb29wIGNhbGxpbmcgYGNsZWFudXBfb2ZmbGluZV9jZ3diKHdiKWAgYW5kIGBjb25kX3Jlc2NoZWQoKWAuIE5vdywgaXQncyBhIGBkby13aGlsZWAgbG9vcCB3aXRoIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgIGluc2lkZS4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIHF1aWVzY2VudCBzdGF0ZXMgYW5kIHZvbHVudGFyeSBzY2hlZHVsaW5nIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLlxuXG5NeSBleHBlcnQgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzc3Vlcy4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOlxuXG4xLiAgKipVc2VyLXNwYWNlIGludGVyYWN0aW9uPyoqIE5vLCBub3RoaW5nIGhlcmUgaW52b2x2ZXMgcGFzc2luZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgY291bGQgY2F1c2UgYSBwcm9ibGVtLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vcGUuIFRoZSBjb2RlJ3MgZmxvdyBkb2Vzbid0IHJlbHkgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB0byBtYWtlIGRlY2lzaW9ucy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24/KiogTm8gY29tcGxleCBhbGxvY2F0aW9ucyBpbiB0aGlzIHNuaXBwZXQsIHNvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZW4ndCBhIGNvbmNlcm4uXG40LiAgKipCdWZmZXIgbWFuaXB1bGF0aW9ucyBvciBvdXQtb2YtYm91bmRzIHJlYWRzPyoqIEFic29sdXRlbHkgbm90LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc2NoZWR1bGluZyBhbmQgUkNVIHN0YXRlcy4gTm8gYnVmZmVyIGhhbmRsaW5nIGlzIGdvaW5nIG9uIGhlcmUuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoZSBLTVNBTiBjaGVjayBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIGlzIGEgcHVyZWx5IGludGVybmFsIHR3ZWFrIGZvciBzY2hlZHVsaW5nIHdpdGhpbiBhIHdvcmtxdWV1ZSB3b3JrZXIgZnVuY3Rpb24uIFRoZXJlIGFyZSBubyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBubyB1c2VyLXNwYWNlIGNvcGllcywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgaXQncyBzYWZlIHRvIHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIGFuZCB0aGVuIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2MSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTowNzozMS4zNjMzNTk4MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjbGVhbnVwX29mZmxpbmVfY2d3YnNfd29ya2ZuYCBpbiBgbW0vYmFja2luZy1kZXYuY2AgYnkgY2hhbmdpbmcgdGhlIHNjaGVkdWxpbmcgbG9vcCBmcm9tIGB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKSBjb25kX3Jlc2NoZWQoKTtgIHRvIGBkbyB7IGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTsgfSB3aGlsZSAoY2xlYW51cF9vZmZsaW5lX2Nnd2Iod2IpKTtgLiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgcmVsYXRlZCB0byB0YXNrIHNjaGVkdWxpbmcgYW5kIFJDVSBxdWllc2NlbnQgc3RhdGUgcmVwb3J0aW5nIGR1cmluZyB3cml0ZWJhY2sgY2xlYW51cC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9uLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[1] Phase: Succeeded StartedAt: 2026-09-09 19:07:43 +0000 UTC FinishedAt: 2026-09-09 19:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 19:07:43 +0000 UTC FinishedAt: 2026-09-09 19:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2] Phase: Succeeded StartedAt: 2026-09-09 19:07:43 +0000 UTC FinishedAt: 2026-09-09 19:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-09 19:07:43 +0000 UTC FinishedAt: 2026-09-09 19:49:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 19:07:43 +0000 UTC FinishedAt: 2026-09-09 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 19:07:43 +0000 UTC FinishedAt: 2026-09-09 19:07:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowrfjr7/series-workflowrfjr7-convert-artifact-2256182665/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 19:07:53 +0000 UTC FinishedAt: 2026-09-09 19:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 19:07:53 +0000 UTC FinishedAt: 2026-09-09 19:24:22 +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:*3c7be035-afd9-4a74-b49d-c834c7514e23,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-workflowrfjr7/series-workflowrfjr7-convert-artifact-2256182665/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": "ab8bec18-4af4-4ee6-9573-aede79609246", "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-workflowrfjr7/series-workflowrfjr7-build-action-2333300327/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 19:07:53 +0000 UTC FinishedAt: 2026-09-09 19:24:12 +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:*3c7be035-afd9-4a74-b49d-c834c7514e23,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-workflowrfjr7/series-workflowrfjr7-convert-artifact-2256182665/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": "ab8bec18-4af4-4ee6-9573-aede79609246", "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-workflowrfjr7/series-workflowrfjr7-build-action-2333300327/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 19:24:22 +0000 UTC FinishedAt: 2026-09-09 19:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 19:24:22 +0000 UTC FinishedAt: 2026-09-09 19:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 19:24:22 +0000 UTC FinishedAt: 2026-09-09 19:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 19:24:22 +0000 UTC FinishedAt: 2026-09-09 19:24:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowrfjr7/series-workflowrfjr7-convert-artifact-624288924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 19:24:33 +0000 UTC FinishedAt: 2026-09-09 19:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 19:24:33 +0000 UTC FinishedAt: 2026-09-09 19:26:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab8bec18-4af4-4ee6-9573-aede79609246,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-workflowrfjr7/series-workflowrfjr7-build-action-2333300327/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-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 19:26:13 +0000 UTC FinishedAt: 2026-09-09 19:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 19:26:13 +0000 UTC FinishedAt: 2026-09-09 19:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 19:26:13 +0000 UTC FinishedAt: 2026-09-09 19:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 19:26:13 +0000 UTC FinishedAt: 2026-09-09 19:42:44 +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:*3c7be035-afd9-4a74-b49d-c834c7514e23,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-workflowrfjr7/series-workflowrfjr7-convert-artifact-624288924/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": "17696b66-25dd-47d7-b0d5-414c412121ad", "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-workflowrfjr7/series-workflowrfjr7-build-action-2502658040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 19:26:13 +0000 UTC FinishedAt: 2026-09-09 19:42:34 +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:*3c7be035-afd9-4a74-b49d-c834c7514e23,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-workflowrfjr7/series-workflowrfjr7-convert-artifact-624288924/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": "17696b66-25dd-47d7-b0d5-414c412121ad", "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-workflowrfjr7/series-workflowrfjr7-build-action-2502658040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 19:42:44 +0000 UTC FinishedAt: 2026-09-09 19:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 19:42:44 +0000 UTC FinishedAt: 2026-09-09 19:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 19:42:44 +0000 UTC FinishedAt: 2026-09-09 19:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 19:42:44 +0000 UTC FinishedAt: 2026-09-09 19:44:36 +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:*17696b66-25dd-47d7-b0d5-414c412121ad,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-workflowrfjr7/series-workflowrfjr7-build-action-2502658040/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-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:49:39 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},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:*ab8bec18-4af4-4ee6-9573-aede79609246,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17696b66-25dd-47d7-b0d5-414c412121ad,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-workflowrfjr7/series-workflowrfjr7-build-action-2333300327/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-workflowrfjr7/series-workflowrfjr7-build-action-2502658040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:44:42 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},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-workflowrfjr7/series-workflowrfjr7-convert-artifact-3748339813/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 19:44:39 +0000 UTC FinishedAt: 2026-09-09 19:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-09-09 19:44:49 +0000 UTC FinishedAt: 2026-09-09 19:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfjr7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["cleanup_offline_cgwbs_workfn","cleanup_offline_cgwb","wb_memcg_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893e11787f78e43b534e252249ac3fff4d1333f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_WRITEBACK","MEMCG","BLK_CGROUP"],"series_id":"d94b4759-eaf7-413c-84bb-4b594c4fd396","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Failed StartedAt: 2026-09-09 19:44:49 +0000 UTC FinishedAt: 2026-09-09 19:49:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab8bec18-4af4-4ee6-9573-aede79609246,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17696b66-25dd-47d7-b0d5-414c412121ad,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-workflowrfjr7/series-workflowrfjr7-build-action-2333300327/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-workflowrfjr7/series-workflowrfjr7-build-action-2502658040/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-workflowrfjr7/series-workflowrfjr7-convert-artifact-3748339813/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:*1,}