Name: series-workflowbc97l Phase: Succeeded StartedAt: 2026-08-12 05:40:48 +0000 UTC FinishedAt: 2026-08-12 09:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[0] Phase: Succeeded StartedAt: 2026-08-12 05:40:48 +0000 UTC FinishedAt: 2026-08-12 06:00:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 05:40:48 +0000 UTC FinishedAt: 2026-08-12 06:00:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "4a49f77e-c3bd-499a-96f2-3508daf03bef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pktgen_if_write", "pktgen_if_show", "pktgen_thread_worker" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3Nob3cmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zIGFuZCBjYWNoaW5nIHRoZSB2YWx1ZSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBjZmxvd3NgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlY2Y1OTYyMTAxZTM1OGVkZTc3NTU4YTBlOWIyY2UyZWNmYmFmNGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNTo1ODo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BrdGdlbi5jXG5AQCAtNTY2LDYgJiM0Mzs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHtcbiBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNmbG93cyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cyk7XG4gXHRrdGltZV90IHN0b3BwZWQ7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdHU2NCBpZGxlO1xuQEAgLTU5MCw3ICYjNDM7NTkxLDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdFx0ICAgcGt0X2Rldi1cdTAwM2VuZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXHUwMDNlZGVsYXksXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiLCBwa3RfZGV2LVx1MDAzZW9kZXZuYW1lKTtcbiBcbi1cdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxcblwmIzM0OywgcGt0X2Rldi1cdTAwM2VjZmxvd3MsXG4mIzQzO1x0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XFxuXCYjMzQ7LCBjZmxvd3MsXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlbGZsb3cpO1xuIFxuIFx0c2VxX3ByaW50ZihzZXEsXG5AQCAtNjc1LDcgJiM0Mzs2NzYsNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfUEtUX0ZMQUdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoaSA9PSBGTE9XX1NFUV9TSElGVClcbi1cdFx0XHRpZiAoIXBrdF9kZXYtXHUwMDNlY2Zsb3dzKVxuJiM0MztcdFx0XHRpZiAoIWNmbG93cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpKSB7XG5AQCAtMTYzMiw4ICYjNDM7MTYzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKHZhbHVlIFx1MDAzZSBNQVhfQ0ZMT1dTKVxuIFx0XHRcdHZhbHVlID0gTUFYX0NGTE9XUztcbiBcbi1cdFx0cGt0X2Rldi1cdTAwM2VjZmxvd3MgPSB2YWx1ZTtcbi1cdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiBmbG93cz0ldVwmIzM0OywgcGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuJiM0MztcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cywgdmFsdWUpO1xuJiM0MztcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiBmbG93cz0ldVwmIzM0OywgKHVuc2lnbmVkIGludCl2YWx1ZSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC0yMzczLDcgJiM0MzsyMzc0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZl9zZWVuKGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgZmxvdylcbiBcdHJldHVybiAhIShwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIFx1MDAyNiBGX0lOSVQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgdW5zaWduZWQgaW50IGNmbG93cylcbiB7XG4gXHRpbnQgZmxvdyA9IHBrdF9kZXYtXHUwMDNlY3VyZmw7XG4gXG5AQCAtMjM4MywxMSAmIzQzOzIzODQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY291bnQgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgJiM0Mzs9IDE7XG4tXHRcdFx0aWYgKHBrdF9kZXYtXHUwMDNlY3VyZmwgXHUwMDNlPSBwa3RfZGV2LVx1MDAzZWNmbG93cylcbiYjNDM7XHRcdFx0aWYgKHBrdF9kZXYtXHUwMDNlY3VyZmwgXHUwMDNlPSBjZmxvd3MpXG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cmZsID0gMDsgLypyZXNldCAqL1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3cocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuJiM0MztcdFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KGNmbG93cyk7XG4gXHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgPSBmbG93O1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jb3VudCBcdTAwM2UgcGt0X2Rldi1cdTAwM2VsZmxvdykge1xuQEAgLTI0NjEsMTIgJiM0MzsyNDYyLDE0IEBAIHN0YXRpYyB2b2lkIHNldF9jdXJfcXVldWVfbWFwKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuICAqL1xuIHN0YXRpYyB2b2lkIG1vZF9jdXJfaGVhZGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNmbG93cztcbiBcdF9fdTMyIGltbjtcbiBcdF9fdTMyIGlteDtcbiBcdGludCBmbG93ID0gMDtcbiBcbi1cdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cylcbi1cdFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2KTtcbiYjNDM7XHRjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuJiM0MztcdGlmIChjZmxvd3MpXG4mIzQzO1x0XHRmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7XG4gXG4gXHQvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi9cbiBcdGlmIChwa3RfZGV2LVx1MDAzZXNyY19tYWNfY291bnQgXHUwMDNlIDEpIHtcbkBAIC0yNTgyLDcgJiM0MzsyNTg1LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX3NhZGRyID0gaHRvbmwodCk7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHBrdF9kZXYtXHUwMDNlY2Zsb3dzIFx1MDAyNlx1MDAyNiBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHtcbiYjNDM7XHRcdGlmIChjZmxvd3MgXHUwMDI2XHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyID0gcGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aW1uID0gbnRvaGwocGt0X2Rldi1cdTAwM2VkYWRkcl9taW4pO1xuQEAgLTI2MTEsNyAmIzQzOzI2MTQsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyID0gaHRvbmwodCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cykge1xuJiM0MztcdFx0XHRpZiAoY2Zsb3dzKSB7XG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY3VyX2RhZGRyID1cbiBcdFx0XHRcdCAgICBwa3RfZGV2LVx1MDAzZWN1cl9kYWRkcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BrdGdlbl9pZl93cml0ZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfc2hvdyYjMzQ7LAogICAgJiMzNDtwa3RnZW5fdGhyZWFkX3dvcmtlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGJ5IHVzaW5nIFJFQURfT05DRSBhbmQgV1JJVEVfT05DRS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbmNvbnNpc3RlbnQgc3RhdGUgd2hlbiBgY2Zsb3dzYCBpcyBtb2RpZmllZCBjb25jdXJyZW50bHkgdmlhIHByb2NmcyB3aGlsZSB0aGUgcGt0Z2VuIHRocmVhZCBpcyBydW5uaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGVjZjU5NjIxMDFlMzU4ZWRlNzc1NThhMGU5YjJjZTJlY2ZiYWY0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA1OjU4OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtNTY2LDYgJiM0Mzs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHsKIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKIAlrdGltZV90IHN0b3BwZWQ7CiAJdW5zaWduZWQgaW50IGk7CiAJdTY0IGlkbGU7CkBAIC01OTAsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJCSAgIHBrdF9kZXYtJmd0O25mcmFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0mZ3Q7ZGVsYXksCiAJCSAgIHBrdF9kZXYtJmd0O2Nsb25lX3NrYiwgcGt0X2Rldi0mZ3Q7b2Rldm5hbWUpOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiYjMzQ7LCBwa3RfZGV2LSZndDtjZmxvd3MsCiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XG4mIzM0OywgY2Zsb3dzLAogCQkgICBwa3RfZGV2LSZndDtsZmxvdyk7CiAKIAlzZXFfcHJpbnRmKHNlcSwKQEAgLTY3NSw3ICYjNDM7Njc2LDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9QS1RfRkxBR1M7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpID09IEZMT1dfU0VRX1NISUZUKQotCQkJaWYgKCFwa3RfZGV2LSZndDtjZmxvd3MpCiYjNDM7CQkJaWYgKCFjZmxvd3MpCiAJCQkJY29udGludWU7CiAKIAkJaWYgKHBrdF9kZXYtJmd0O2ZsYWdzICZhbXA7ICgxICZsdDsmbHQ7IGkpKSB7CkBAIC0xNjMyLDggJiM0MzsxNjMzLDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQlpZiAodmFsdWUgJmd0OyBNQVhfQ0ZMT1dTKQogCQkJdmFsdWUgPSBNQVhfQ0ZMT1dTOwogCi0JCXBrdF9kZXYtJmd0O2NmbG93cyA9IHZhbHVlOwotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgcGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzLCB2YWx1ZSk7CiYjNDM7CQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgKHVuc2lnbmVkIGludCl2YWx1ZSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiAjaWZkZWYgQ09ORklHX1hGUk0KQEAgLTIzNzMsNyAmIzQzOzIzNzQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmX3NlZW4oY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KQogCXJldHVybiAhIShwa3RfZGV2LSZndDtmbG93c1tmbG93XS5mbGFncyAmYW1wOyBGX0lOSVQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCB1bnNpZ25lZCBpbnQgY2Zsb3dzKQogewogCWludCBmbG93ID0gcGt0X2Rldi0mZ3Q7Y3VyZmw7CiAKQEAgLTIzODMsMTEgJiM0MzsyMzg0LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmNvdW50ID0gMDsKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzID0gMDsKIAkJCXBrdF9kZXYtJmd0O2N1cmZsICYjNDM7PSAxOwotCQkJaWYgKHBrdF9kZXYtJmd0O2N1cmZsICZndDs9IHBrdF9kZXYtJmd0O2NmbG93cykKJiM0MzsJCQlpZiAocGt0X2Rldi0mZ3Q7Y3VyZmwgJmd0Oz0gY2Zsb3dzKQogCQkJCXBrdF9kZXYtJmd0O2N1cmZsID0gMDsgLypyZXNldCAqLwogCQl9CiAJfSBlbHNlIHsKLQkJZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CQlmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coY2Zsb3dzKTsKIAkJcGt0X2Rldi0mZ3Q7Y3VyZmwgPSBmbG93OwogCiAJCWlmIChwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jb3VudCAmZ3Q7IHBrdF9kZXYtJmd0O2xmbG93KSB7CkBAIC0yNDYxLDEyICYjNDM7MjQ2MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKICAqLwogc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewomIzQzOwl1bnNpZ25lZCBpbnQgY2Zsb3dzOwogCV9fdTMyIGltbjsKIAlfX3UzMiBpbXg7CiAJaW50IGZsb3cgPSAwOwogCi0JaWYgKHBrdF9kZXYtJmd0O2NmbG93cykKLQkJZmxvdyA9IGZfcGljayhwa3RfZGV2KTsKJiM0MzsJY2Zsb3dzID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CWlmIChjZmxvd3MpCiYjNDM7CQlmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7CiAKIAkvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi8KIAlpZiAocGt0X2Rldi0mZ3Q7c3JjX21hY19jb3VudCAmZ3Q7IDEpIHsKQEAgLTI1ODIsNyAmIzQzOzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiAJCQlwa3RfZGV2LSZndDtjdXJfc2FkZHIgPSBodG9ubCh0KTsKIAkJfQogCi0JCWlmIChwa3RfZGV2LSZndDtjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKJiM0MzsJCWlmIChjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKIAkJCXBrdF9kZXYtJmd0O2N1cl9kYWRkciA9IHBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmN1cl9kYWRkcjsKIAkJfSBlbHNlIHsKIAkJCWltbiA9IG50b2hsKHBrdF9kZXYtJmd0O2RhZGRyX21pbik7CkBAIC0yNjExLDcgJiM0MzsyNjE0LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCQkJCQlwa3RfZGV2LSZndDtjdXJfZGFkZHIgPSBodG9ubCh0KTsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocGt0X2Rldi0mZ3Q7Y2Zsb3dzKSB7CiYjNDM7CQkJaWYgKGNmbG93cykgewogCQkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDsKIAkJCQlwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jdXJfZGFkZHIgPQogCQkJCSAgICBwa3RfZGV2LSZndDtjdXJfZGFkZHI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBwa3RnZW4uYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0b3VjaGluZyBgbmV0L2NvcmUvcGt0Z2VuLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHJhY2UgZml4LCBjaGFuZ2luZyBhY2Nlc3NlcyB0byBgcGt0X2Rldi0mZ3Q7Y2Zsb3dzYCB0byB1c2UgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8KCkluaXRpYWxseSwgbXkgdGhvdWdodCB3YXMsICYjMzQ7aXQmIzM5O3MganVzdCBhIGJ1ZyBmaXgsJiMzNDsgc28gcHJvYmFibHkgbm90LiBJdCYjMzk7cyBub3QgKmFkZGluZyogbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBCdXQgdGhlbiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGluc3RydWN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IGxheSBvdXQgYSBzZXJpZXMgb2YgdGVzdHMuCgpGaXJzdCBJIHJ1biB0aHJvdWdoIHRoZSBleGNsdXNpb25zLiBEb2N1bWVudGF0aW9uPyBOb3BlLiBMb2dnaW5nIG9yIGRlY29yYXRpdmUgY2hhbmdlcz8gTm9wZS4gTnVtZXJpYyBjb25zdGFudCBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGZsb3c/IE5vcGUuIFVucmVhY2hhYmxlIGNvZGU/IE5vcGUuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZT8gTm9wZS4gVGVhcmRvd24gY2FsbGJhY2tzPyBOb3BlLgoKU28sIGRvZXMgaXQgZnVuY3Rpb25hbGx5IGNoYW5nZSB0aGUga2VybmVsPyBXZWxsLCBpdCYjMzk7cyAqdGVjaG5pY2FsbHkqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3csIGJ5IHByZXZlbnRpbmcgdGhlIGNvbXBpbGVyIGZyb20gbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IHRoZSB2b2xhdGlsZSB2YXJpYWJsZS4gSXQmIzM5O3MgYWJvdXQgZGF0YSBpbnRlZ3JpdHkuIEJ1dCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBidWcgZml4ZXMgYXJlIHdvcnRoIGZ1enppbmcuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIGlzIHRoZSBhZmZlY3RlZCBjb2RlIHJlYWNoYWJsZT8gVGhhdCYjMzk7cyB0aGUga2V5LiBRdWljayBjaGVjaywgYW5kIHllcywgYC9wcm9jL25ldC9wa3RnZW4vYCBpcyBhIHRoaW5nLiBTbywgaXQmIzM5O3MgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljISBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgaGVyZTogaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCB0aGVuIHdlIHNob3VsZCBmdXp6LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvcGt0Z2VuLmNgIHRvIGJlIHN1cmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgYHBrdGdlbl9pZl9zaG93YCwgYHBrdGdlbl9pZl93cml0ZWAsIGFuZCBgbW9kX2N1cl9oZWFkZXJzYC4KCkJhc2VkIG9uIGFsbCBvZiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgd29ydGggZnV6emluZy4gSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9pZl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTk1Nj1zdGF0aWMgX191MzIgcGt0Z2VuX3JlYWRfZmxhZyhjb25zdCBjaGFyICpmLCBib29sICpkaXNhYmxlKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTk4NC1cbm5ldC9jb3JlL3BrdGdlbi5jOjk4NTpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy05ODYtXHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTE4Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5faWZfcHJvY19vcHMgPSB7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMTg4MS1cdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2Vlayxcbm5ldC9jb3JlL3BrdGdlbi5jOjE4ODI6XHQucHJvY193cml0ZVx0PSBwa3RnZW5faWZfd3JpdGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xODgzLVx0LnByb2NfcmVsZWFzZVx0PSBzaW5nbGVfcmVsZWFzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBhbmQgSGVhZGVyIE1vZGlmaWNhdGlvbioqCgpSaWdodCwgYHBrdGdlbl9pZl93cml0ZWAuLi4gdGhhdCYjMzk7cyBhIGBwcm9jX3dyaXRlYCBjYWxsYmFjaywgc28gaXQmIzM5O3MgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyBgbW9kX2N1cl9oZWFkZXJzYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcGt0Z2VuX3htaXRgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgbGlrZWx5IGR1cmluZyB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBCdXQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBHb3R0YSBkZWx2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSBgbW9kX2N1cl9oZWFkZXJzYCBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRob3NlIGZ1bmN0aW9ucyBjb2xsYWJvcmF0ZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kX2N1cl9oZWFkZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9MjQzOT1zdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yNDYyLSAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MjQ2MzpzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0yNDY0LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0yOTMwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yOTU0LVx0ICovXG5uZXQvY29yZS9wa3RnZW4uYzoyOTU1Olx0bW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjk1Ni1cdHF1ZXVlX21hcCA9IHBrdF9kZXYtXHUwMDNlY3VyX3F1ZXVlX21hcDtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zMDU4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMDgyLVx0ICovXG5uZXQvY29yZS9wa3RnZW4uYzozMDgzOlx0bW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzA4NC1cdHF1ZXVlX21hcCA9IHBrdF9kZXYtXHUwMDNlY3VyX3F1ZXVlX21hcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgbW9kX2N1cl9oZWFkZXJzYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBzZWVpbmcgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgZmlsbF9wYWNrZXRfaXB2NGAgYW5kIGBmaWxsX3BhY2tldF9pcHY2YC4gVGhhdCBzdWdnZXN0cyBhIGNlbnRyYWwgcm9sZSBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBhY2tldCBoZWFkZXJzLCBubyBkb3VidC4gVGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyB0aGF0IGFsbG93IHRoZSBwYWNrZXQgZ2VuZXJhdGlvbiBzeXN0ZW0gdG8gcnVuLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBXaGF0IHZhcmlhYmxlcyBvciBmbGFncyBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIGBwa3RnZW5gPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHNlZSB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgcGFja2V0IGdlbmVyYXRpb24uIEtub3dpbmcgKnRoYXQqIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBmdW5jdGlvbiB3b3Jrcy4gVGhpcyBpbml0aWFsIHRyYWNpbmcgd2lsbCBhbGxvdyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBiZWhhdmlvdXIgb2YgYG1vZF9jdXJfaGVhZGVyc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1BLVEdFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLCBpdCYjMzk7cyBoaWdobHkgcHJvYmFibGUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEhvd2V2ZXIsIHNvbWV0aW1lcyB0aGUgbW9yZSBmaW5lLWdyYWluZWQgb3IgY29yZSBuZXR3b3JrIHNldHRpbmdzIHJlc2lkZSBkZWVwZXIuIFNvLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGluIHRoZSBzYW1lIHNlY3Rpb24sIEkgc2hvdWxkIGFsc28gY2hlY2sgYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhlIG1ha2VmaWxlcyBmcmVxdWVudGx5IGNvbnRhaW4gaW5jbHVkZSBkaXJlY3RpdmVzIHRoYXQgcG9pbnQgdG8gS2NvbmZpZyBmaWxlcyBvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gR29pbmcgc3RyYWlnaHQgdG8gdGhlIG1ha2VmaWxlIHdvdWxkIGJlIGEgZ29vZCBzZWNvbmQgY2hlY2suIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmVjdGl2ZSBwYXRoIEkgY2FuIHRha2UgYXQgdGhlIG1vbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBuZXQtcHJvY2ZzLm9cbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSAmIzQzOz0gcGt0Z2VuLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRmluZGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgTkVUX1BLVEdFTmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgTkVUX1BLVEdFTmAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNvbW1vbiB0YXNrIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlYmFzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBhIHByZXByb2Nlc3NvciBtYWNybywgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgZnVuY3Rpb24gb3Igc3RydWN0dXJlIG5hbWUgdGhhdCYjMzk7cyBiZWVuIGNvbnNpc3RlbnRseSB1c2VkIHRocm91Z2hvdXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBhIHRvb2wgdGhhdCYjMzk7cyBkZXNpZ25lZCBmb3IgZXhhY3RseSB0aGlzLiBJIGNvdWxkIHVzZSBncmVwLCBhY2ssIHJpcGdyZXAgKHJnKSwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBwcm9qZWN0LiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgY2FzZSBzZW5zaXRpdml0eSBhbmQgd2lsZGNhcmRzIGluIG15IHNlYXJjaCBzdHJpbmcsIGlmIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIHByb2plY3QgSSBhbSB3b3JraW5nIG9uLiBJdCYjMzk7cyBhbHNvIGxpa2VseSBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggc2V2ZXJhbCBwb3RlbnRpYWwgcGF0aHM6IHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5jbHVkZSBwYXRocywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlIHZhcmlvdXMgcmVzdWx0cyBhbmQgYXNzZXNzIHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbiBvZiB0aGUgYWN0dWFsIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfUEtUR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBORVRfUEtUR0VOYCBtb2R1bGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgc28gYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRvd25zdHJlYW0gYW5kIHVwc3RyZWFtIGxpbmthZ2VzIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYSBjaGFuZ2UsIGV2YWx1YXRpbmcgYSBuZXcgaW50ZWdyYXRpb24sIG9yIHRyb3VibGVzaG9vdGluZyBhbiBpc3N1ZS4gSeKAmWxsIHN0YXJ0IGJ5IGxpc3Rpbmcgb3V0IHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMg4oCTIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVuY2llcy4gT2Z0ZW4gdGhlIGNhc2NhZGluZyBpbXBhY3Qgb24gdGhvc2UgZGVlcGVyIGVsZW1lbnRzIGFyZSB0aGUgc291cmNlIG9mIG1vc3Qgc3lzdGVtIGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBtb2R1bGUgcmVsaWVzIG9uIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlicmFyaWVzLCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMsIGtlcm5lbCBpbnRlcmZhY2VzLCBvciBldmVuIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgZXh0ZXJuYWwgdG9vbHMuIFdoYXQgdmVyc2lvbnMgb2YgdGhlIGRlcGVuZGVudCBsaWJzIGFyZSBuZWVkZWQ/IElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgZGVwZW5kZW50IGxpYnMgaW5zdGFsbGVkLCBJIG5lZWQgdG8ga25vdyB3aGljaCBpcyBjYWxsZWQ/IFRoZSB2ZXJzaW9uaW5nIGlzIHZpdGFsLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHNoYXJlZCByZXNvdXJjZXMgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gVGhpcyBkZXBlbmRlbmN5IGF1ZGl0IGlzIHN0ZXAgb25lLCBiZWZvcmUgSSBiZWdpbiB0aGUgYWN0dWFsIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NjpcdGNvbmZpZyBORVRfUEtUR0VOXG4gMzg3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuIDM4ODpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG4gMzg5Olx0XHRoZWxwXG4gMzkwOlx0XHQgIFRoaXMgbW9kdWxlIHdpbGwgaW5qZWN0IHByZWNvbmZpZ3VyZWQgcGFja2V0cywgYXQgYSBjb25maWd1cmFibGVcbiAzOTE6XHRcdCAgcmF0ZSwgb3V0IG9mIGEgZ2l2ZW4gaW50ZXJmYWNlLiAgSXQgaXMgdXNlZCBmb3IgbmV0d29yayBpbnRlcmZhY2VcbiAzOTI6XHRcdCAgc3RyZXNzIHRlc3RpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiAgSWYgeW91IGRvbiYjMzk7dCB1bmRlcnN0YW5kXG4gMzkzOlx0XHQgIHdoYXQgd2FzIGp1c3Qgc2FpZCwgeW91IGRvbiYjMzk7dCBuZWVkIGl0OiBzYXkgTi5cbiAzOTQ6XHRcbiAzOTU6XHRcdCAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIGNhbiBiZSBmb3VuZFxuIDM5NjpcdFx0ICBhdCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4ucnN0XHUwMDNlLlxuIDM5NzpcdFxuIDM5ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMzk5Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwa3RnZW4uXG4gNDAwOlx0XG4gNDAxOlx0Y29uZmlnIE5FVF9EUk9QX01PTklUT1JcbiA0MDI6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBuZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2VcJiMzNDtcbiA0MDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgVFJBQ0VQT0lOVFNcbiA0MDQ6XHRcdGhlbHBcbiA0MDU6XHRcdCAgVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGFsZXJ0aW5nIHNlcnZpY2UgdG8gdXNlcnNwYWNlIGluIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBQYWNrZXQgR2VuZXJhdGlvbiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlc3NlbnRpYWwgY29tcG9uZW50cyBmb3IgcGFja2V0IGdlbmVyYXRpb24gd2l0aGluIHRoaXMgc3lzdGVtLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBgSU5FVGAgYW5kIGBQUk9DX0ZTYCwgYm90aCBvZiB3aGljaCBhcmUgcHJldHR5IHN0YW5kYXJkLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoYXQgaW1wbGllcyBJIGNhbiBlbmFibGUgdGhlIHBhY2tldCBnZW5lcmF0b3Igd2l0aCB0aGUgYE5FVF9QS1RHRU5gIGNvbmZpZyBvcHRpb24uCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9pZl9zaG93YCwgYGZpbGxfcGFja2V0X2lwdjRgLCBhbmQgYGZpbGxfcGFja2V0X2lwdjZgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGVzIHRvIGRyaXZlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEhtbSwgSSBub3RpY2UgYGZpbGxfcGFja2V0X2lwdjRgIGFuZCBgZmlsbF9wYWNrZXRfaXB2NmAgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGV5JiMzOTtyZSBpbmxpbmVkOyB0aGF0IGNvdWxkIHNpZ25pZmljYW50bHkgaW1wYWN0IHBlcmZvcm1hbmNlIGFuZCBob3cgSSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVtLiBJbmxpbmluZyBvciBsYWNrIHRoZXJlb2YgaW5mbHVlbmNlcyBvcHRpbWl6YXRpb24gcG90ZW50aWFsLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZm9yIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfcGFja2V0X2lwdjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yOTAzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI5MjktXG5uZXQvY29yZS9wa3RnZW4uYzoyOTMwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXHRcdFx0XHRcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTMxODg9c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMTkzLVx0ZWxzZVxubmV0L2NvcmUvcGt0Z2VuLmM6MzE5NDpcdFx0cmV0dXJuIGZpbGxfcGFja2V0X2lwdjQob2RldiwgcGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy0zMTk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBUcmFuc21pc3Npb24gRmxvdyoqCgpBbHJpZ2h0LCBzbyBgZmlsbF9wYWNrZXRgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHBrdGdlbl94bWl0YC4gVGhhdCYjMzk7cyBhIGtleSBpbnRlcmFjdGlvbiByaWdodCB0aGVyZS4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgcGFja2V0IGdlbmVyYXRpb24gYW5kIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGlzIG1vZHVsYXJpemVkLCB3aGljaCBpcyBnb29kIHNvZnR3YXJlIGRlc2lnbi4gYHBrdGdlbl94bWl0YCBpcyBwcm9iYWJseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc2NoZWR1bGluZyBvciBhY3R1YWxseSBzZW5kaW5nIHBhY2tldHMsIGFuZCBgZmlsbF9wYWNrZXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3Rpbmcgb3IgcG9wdWxhdGluZyB0aGUgcGFja2V0IGRhdGEgaXRzZWxmLgoKTm93LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIG5ldHdvcmsgc3RhY2ssIGBwa3RnZW5feG1pdGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIG1vcmUsIHN1Y2ggYXMgaW50ZXJmYWNpbmcgd2l0aCBhIE5JQyBkcml2ZXIgb3IgcHJlcGFyaW5nIHRoZSBwYWNrZXQgaW4gc29tZSBwcmUtdHJhbnNtaXNzaW9uIGZvcm1hdCwgYW5kIGBmaWxsX3BhY2tldGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHBhY2tldCBoZWFkZXJzLCBkYXRhIG9yIGJvdGguIFRoaW5raW5nIHRocm91Z2ggdGhlIGRldGFpbHMsIEkmIzM5O20gbm93IG1ha2luZyBpbmZlcmVuY2VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGluIHVzZSBoZXJlLiBgZmlsbF9wYWNrZXRgJiMzOTtzIGlucHV0IGlzIGxpa2VseSBhIHBvaW50ZXIgdG8gYSBwYWNrZXQgYnVmZmVyLCBwb3RlbnRpYWxseSBhbiBhZGRyZXNzLCBhbmQgaXQmIzM5O3MgcHJvYmFibHkgZmlsbGluZyBpdCBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdG8gaXQsIHBlcmhhcHMgdGhyb3VnaCBhIGdsb2JhbCBjb250ZXh0IG9yIHZpYSB0aGUgYXJndW1lbnRzIG9mIGBwa3RnZW5feG1pdGAuIEkmIzM5O20gc3RhcnRpbmcgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBhdCBwbGF5OyBpcyB0aGlzIHVzZXItc3BhY2UsIGtlcm5lbC1zcGFjZSwgb3IgYSBoeWJyaWQgbW9kZWw/IFRoYXQgd2lsbCBpbmZsdWVuY2UgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhY2Nlc3MgcGF0dGVybnMgc2lnbmlmaWNhbnRseS4gVGhlcmUgY291bGQgYmUgRE1BIGludm9sdmVkLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yOTAzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI5MjktXG5uZXQvY29yZS9wa3RnZW4uYzoyOTMwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXHRcdFx0XHRcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMwNTctXG5uZXQvY29yZS9wa3RnZW4uYzozMDU4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbm5ldC9jb3JlL3BrdGdlbi5jLTMwNTktXHRcdFx0XHRcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMxODctXG5uZXQvY29yZS9wa3RnZW4uYzozMTg4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXG5uZXQvY29yZS9wa3RnZW4uYy0zMTg5LVx0XHRcdFx0ICAgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzE5MS1cdGlmIChwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX0lQVjYpXG5uZXQvY29yZS9wa3RnZW4uYzozMTkyOlx0XHRyZXR1cm4gZmlsbF9wYWNrZXRfaXB2NihvZGV2LCBwa3RfZGV2KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTMtXHRlbHNlXG5uZXQvY29yZS9wa3RnZW4uYzozMTk0Olx0XHRyZXR1cm4gZmlsbF9wYWNrZXRfaXB2NChvZGV2LCBwa3RfZGV2KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTUtfVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM1MTQ9c3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzU1My1cbm5ldC9jb3JlL3BrdGdlbi5jOjM1NTQ6XHRcdHBrdF9kZXYtXHUwMDNlc2tiID0gZmlsbF9wYWNrZXQob2RldiwgcGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy0zNTU1LVx0XHRpZiAocGt0X2Rldi1cdTAwM2Vza2IgPT0gTlVMTCkge1xubmV0L2NvcmUvcGt0Z2VuLmM6MzU1NjpcdFx0XHRwcl9lcnIoXCYjMzQ7RVJST1I6IGNvdWxkbiYjMzk7dCBhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXRcXG5cJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzU1Ny1cdFx0XHRzY2hlZHVsZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBFeGFtaW5pbmcgdGhlIFBhY2tldCBHZW5lcmF0b3IgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGFja2V0IGdlbmVyYXRvciBjb2RlLiBgcGt0Z2VuX3htaXRgLi4uIHRoYXQmIzM5O3MgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGxvb3AsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgcGt0Z2VuX3RocmVhZF93b3JrZXJgICpjYWxscyogYHBrdGdlbl94bWl0YC4gUmlnaHQsIGBwa3RnZW5fdGhyZWFkX3dvcmtlcmAgaXMgbGlrZWx5IHRoZSBrdGhyZWFkIHJlc3BvbnNpYmxlIGZvciBhbGwgb2YgdGhpcywgc28gaXQmIzM5O3MgcHJvYmFibHkgdGhlIGJldHRlciBmb2N1cyBzeW1ib2wuIExldCBtZSBqdXN0IG1ha2UgYSBub3RlIG9mIHRoYXQuCgpIb2xkIG9uLCBJIHNlZSBgcGt0Z2VuX2lmX3dyaXRlYCBub3cuIElzbiYjMzk7dCB0aGF0IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgY29udHJvbCBmbG93cz8gQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGl0LiBIbW0sIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHByb2Nfb3BzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXTigJlzIHByb2JhYmx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJIHdvbmRlciBpZiBpdOKAmXMgaW5saW5lZC4uLiBub3BlLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcHJvYyBpbnRlcmZhY2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJvYyBpbnRlcmZhY2UsIGFuZCBhbnkgb3RoZXIgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSoqCgpBbHJpZ2h0LCBzbyB0aGUgbGlua2VyIGlzbiYjMzk7dCBjb21wbGFpbmluZyBhYm91dCBtaXNzaW5nIHN5bWJvbHMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyB0aGUgaXNzdWUgKnByb2JhYmx5KiBpc24mIzM5O3QgYSBzdHJhaWdodGZvcndhcmQgZXh0ZXJuYWwgcmVmZXJlbmNlIHRoYXQgSSYjMzk7dmUgYm90Y2hlZC4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhlbXNlbHZlcy4gU2luY2UgdGhlcmUgYXJlIG5vIGV4cG9ydGVkIHN5bWJvbHMsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBhbWlzcyB0aGVyZS4gSSB3aWxsIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBleHRlcm5hbGx5IHZpc2libGUsIGJ1dCBmb3Igc29tZSByZWFzb24sIGFyZSBub3QuIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVpciBsaW5rYWdlLCB0aGVpciBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBsb2NhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHZpc2liaWxpdHkgbW9kaWZpZXJzIG9yIGNvbXBpbGVyIGZsYWdzLiBJIHdpbGwgYWxzbyBjaGVjayBhbnkgcmVsYXRlZCBoZWFkZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfQS1aMC05XSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9NDExND1zdGF0aWMgdm9pZCBfX2V4aXQgcGdfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjAtXG5uZXQvY29yZS9wa3RnZW4uYzo0MTIxOm1vZHVsZV9pbml0KHBnX2luaXQpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMjptb2R1bGVfZXhpdChwZ19jbGVhbnVwKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjMtXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI0Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7Um9iZXJ0IE9sc3NvbiBcdTAwM2Nyb2JlcnQub2xzc29uQGl0cy51dS5zZVx1MDAzZVwmIzM0Oyk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTI1Ok1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIHRvb2xcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNjpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNzpNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjg6bW9kdWxlX3BhcmFtKHBnX2NvdW50X2QsIGludCwgMCk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTI5Ok1PRFVMRV9QQVJNX0RFU0MocGdfY291bnRfZCwgXCYjMzQ7RGVmYXVsdCBudW1iZXIgb2YgcGFja2V0cyB0byBpbmplY3RcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMDptb2R1bGVfcGFyYW0ocGdfZGVsYXlfZCwgaW50LCAwKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzE6TU9EVUxFX1BBUk1fREVTQyhwZ19kZWxheV9kLCBcJiMzNDtEZWZhdWx0IGRlbGF5IGJldHdlZW4gcGFja2V0cyAobmFub3NlY29uZHMpXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzI6bW9kdWxlX3BhcmFtKHBnX2Nsb25lX3NrYl9kLCBpbnQsIDApO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMzpNT0RVTEVfUEFSTV9ERVNDKHBnX2Nsb25lX3NrYl9kLCBcJiMzNDtEZWZhdWx0IG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHNhbWUgcGFja2V0XCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzQ6bW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEzNTpNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCBcJiMzNDtFbmFibGUgZGVidWdnaW5nIG9mIHBrdGdlbiBtb2R1bGVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjIwCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOgoKKipSZWdleCBSZXZlbGF0aW9uKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHJhbiBteSByZWdleCBhbmQgdGhvdWdodCBpdCB3YXMgcHJldHR5IGNvbXByZWhlbnNpdmUsIGJ1dCBJJiMzOTttIGdldHRpbmcgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBzb21ldGhpbmcmIzM5O3Mgc2xpcHBlZCB0aHJvdWdoLiBEYW1uLCBJIGRpZG4mIzM5O3QgYWNjb3VudCBmb3IgZnVuY3Rpb25zIHdpdGggZXhwbGljaXQgcmV0dXJuIHR5cGVzISBUaGF0JiMzOTtzIGEgZ2xhcmluZyBvdmVyc2lnaHQuIE15IGluaXRpYWwgZXhwcmVzc2lvbiB3YXMgbGlrZWx5IHRvbyBzaW1wbGlzdGljLCBmb2N1c2luZyBvbiBiYXNpYyBwYXR0ZXJucyB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBtb3JlIGNvbXBsZXggc3RydWN0dXJlIHRoYXQgZnVuY3Rpb25zIGludHJvZHVjZS4gVGhlIHdob2xlIHJldHVybiB0eXBlIGJ1c2luZXNzIGlzIHRoZSBrZXkgZGlmZmVyZW50aWF0b3IgaGVyZSwgaXNuJiMzOTt0IGl0PyBHb3R0YSByZXZpc2UgdGhhdCByZWdleDsgaXQgbmVlZHMgdG8gYmUgZmFyIG1vcmUgcm9idXN0IGlmIEkgd2FudCB0byBjYXB0dXJlIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBhbmQgbm90IG1pc3MgdGhvc2UgZnVuY3Rpb24gc2lnbmF0dXJlcy4gQmFjayB0byB0aGUgZHJhd2luZyBib2FyZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2Etel9BLVowLTldJiM0MzsgW2Etel9BLVowLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz01MDA9c3RhdGljIGludCBkZWJ1ZyAgX19yZWFkX21vc3RseTtcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMS1cbm5ldC9jb3JlL3BrdGdlbi5jOjUwMjpzdGF0aWMgREVGSU5FX01VVEVYKHBrdGdlbl90aHJlYWRfbG9jayk7XG5uZXQvY29yZS9wa3RnZW4uYy01MDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFBhY2tldCBHZW5lcmF0b3IgRnVuY3Rpb25zKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuLi4gYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5faWZfc2hvd2AgaW1tZWRpYXRlbHkganVtcCBvdXQgYXQgbWUuIEkga25vdyB0aGV5JiMzOTtyZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyBjYXB0dXJlZCwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEV4cGFuZGluZyBvbiB0aGlzLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgcGt0Z2VuX3RocmVhZF93b3JrZXJgIGFzIGEga2V5IGZ1bmN0aW9uIHRvIGV2YWx1YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa3RnZW5fdGhyZWFkX3dvcmtlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTM1MTQ9c3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzcwMi1cbm5ldC9jb3JlL3BrdGdlbi5jOjM3MDM6c3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpXG5uZXQvY29yZS9wa3RnZW4uYy0zNzA0LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zOTE4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBwa3RnZW5fY3JlYXRlX3RocmVhZChpbnQgY3B1LCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzkzOC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM5Mzk6XHRwID0ga3RocmVhZF9jcmVhdGVfb25fY3B1KHBrdGdlbl90aHJlYWRfd29ya2VyLCB0LCBjcHUsIFwmIzM0O2twa3RnZW5kXyVkXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTM5NDAtXHRpZiAoSVNfRVJSKHApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODMKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIFRocmVhZCBTYWZldHkgYW5kIFBvdGVudGlhbCBTY29wZSBJc3N1ZXMqKgoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgYHBrdGdlbl90aHJlYWRfd29ya2VyYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gWXVwLCBpdCBpcy4gR29vZCwgdGhhdCBoZWxwcyB3aXRoIHBvdGVudGlhbCB0aHJlYWRpbmcgaXNzdWVzLCBsaW1pdGluZyBpdHMgc2NvcGUuIE5vdywgSSB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHNlZSBpZiBhbnkgYXJlIG5vdCBzdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBhbnkgb3RoZXIgZnVuY3Rpb25zIEkgbWF5IGhhdmUgbWlzc2VkLiBJJiMzOTtsbCB1c2UgYSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGB2b2lkIGAsIGBpbnQgYCwgYHNzaXplX3RgLCBldGMuLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgY29kZWJhc2UsIG9yIGFueSBvdGhlciB0eXBlIGRlZmluaXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgcG90ZW50aWFsIHRocmVhZCBzYWZldHkgY29uY2VybnMgb3IgZ2xvYmFsIHN0YXRlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fHNzaXplX3QpIFthLXpfQS1aMC05XSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgRGVjbGFyYXRpb24qKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBkZWNsYXJhdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGF0IHJldHVybiB0eXBlIEkmIzM5O20gZXhwZWN0aW5nIHR1Y2tlZCBhd2F5IG9uIHRoZSAqcHJldmlvdXMqIGxpbmU/JiMzNDsgSXQmIzM5O3MgYSBjb21tb24gdHJpY2ssIGVzcGVjaWFsbHkgaW4gbGFuZ3VhZ2VzIHdpdGggbGVzcyByaWdpZCBzeW50YXggb3Igd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCwgbXVsdGktbGluZSBkZWNsYXJhdGlvbnMuIE15IGV5ZXMgYXJlIHNjYW5uaW5nIGJhY2t3YXJkLCBtZW50YWxseSB0cmFjaW5nIHRoZSBzdHJ1Y3R1cmUuIEl04oCZcyBhIHF1aWNrIG1lbnRhbCBjaGVjaywgYWxtb3N0IGluc3RpbmN0aXZlIGF0IHRoaXMgcG9pbnQsIGJ1dCBjcnVjaWFsIGZvciBlbnN1cmluZyBJJiMzOTttIHBhcnNpbmcgdGhpcyBjb3JyZWN0bHkgYmVmb3JlIEkgZ28gbXVjaCBmdXJ0aGVyLiBJZiB0aGUgdHlwZSBpc27igJl0IGltbWVkaWF0ZWx5IG9idmlvdXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIHN1YnRsZXR5IGluIHRoZSBmb3JtYXR0aW5nIG9yIGRlY2xhcmF0aW9uIHN0eWxlIG9mIHRoZSBjdXJyZW50IGxhbmd1YWdlLiBUaGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMsIHNvIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucyB1bnRpbCBJJiMzOTt2ZSBjb25maXJtZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQxMTQ9c3RhdGljIHZvaWQgX19leGl0IHBnX2NsZWFudXAodm9pZClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy00MTIwLVxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMTptb2R1bGVfaW5pdChwZ19pbml0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjI6bW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XG5uZXQvY29yZS9wa3RnZW4uYy00MTIzLVxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNDpNT0RVTEVfQVVUSE9SKFwmIzM0O1JvYmVydCBPbHNzb24gXHUwMDNjcm9iZXJ0Lm9sc3NvbkBpdHMudXUuc2VcdTAwM2VcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UGFja2V0IEdlbmVyYXRvciB0b29sXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjY6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjc6TU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTI4Om1vZHVsZV9wYXJhbShwZ19jb3VudF9kLCBpbnQsIDApO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyOTpNT0RVTEVfUEFSTV9ERVNDKHBnX2NvdW50X2QsIFwmIzM0O0RlZmF1bHQgbnVtYmVyIG9mIHBhY2tldHMgdG8gaW5qZWN0XCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzA6bW9kdWxlX3BhcmFtKHBnX2RlbGF5X2QsIGludCwgMCk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTMxOk1PRFVMRV9QQVJNX0RFU0MocGdfZGVsYXlfZCwgXCYjMzQ7RGVmYXVsdCBkZWxheSBiZXR3ZWVuIHBhY2tldHMgKG5hbm9zZWNvbmRzKVwmIzM0Oyk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTMyOm1vZHVsZV9wYXJhbShwZ19jbG9uZV9za2JfZCwgaW50LCAwKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzM6TU9EVUxFX1BBUk1fREVTQyhwZ19jbG9uZV9za2JfZCwgXCYjMzQ7RGVmYXVsdCBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBzYW1lIHBhY2tldFwmIzM0Oyk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTM0Om1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzU6TU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgXCYjMzQ7RW5hYmxlIGRlYnVnZ2luZyBvZiBwa3RnZW4gbW9kdWxlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmV0L2NvcmUvcGt0Z2VuLmNgIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3BrdGdlbi5jYC4gRmlyc3QsIEkgcXVpY2tseSBjaGVja2VkIGZvciBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGp1bXBzIG91dC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIHRoZSBlbnRyeSBwb2ludHMuIEkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9pZl9zaG93YCwgYW5kIGBwa3RnZW5fdGhyZWFkX3dvcmtlcmAgYXMgdGhlIGtleSB0YXJnZXRzLgoKQWgsIGhlcmUmIzM5O3MgYW4gaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uLiBUaGUgZnVuY3Rpb24gYGZfcGlja2AgaGFzIGl0cyBzaWduYXR1cmUgY2hhbmdlZDogaXQgbm93IHRha2VzIGBjZmxvd3NgIGFzIGFuIGFyZ3VtZW50LiBJIGFsc28gc2VlIHRoYXQgYG1vZF9jdXJfaGVhZGVyc2AgaXMgcHJlc2VudCwgdG9vLgoKTG9va2luZyBjbG9zZXIsIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIGRhdGEgcmFjZSBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIG9uIGBwa3RfZGV2LSZndDtjZmxvd3NgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBJcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgKmJ1ZyBmaXgqIGV2ZW4uIEZpeGluZyBhIGRhdGEgcmFjZSB0aGF0IGNvdWxkIGNhdXNlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGFsd2F5cyBhIGhpZ2ggcHJpb3JpdHkuIFRoYXQgY29uY3VycmVudCBhY2Nlc3MgdG8gYGNmbG93c2AgaXMgdGhlIGtleS4KCkhvbGQgb24sIEkgc2VlIHRoZSBjb25uZWN0aW9uIG5vdy4gYGNmbG93c2AgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGBmX3BpY2tgLgoKYGBgYwotCQlmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3cocGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKJiM0MzsJCWZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhjZmxvd3MpOwpgYGAKCkJlZm9yZSB0aGUgZml4LCB0aGUgY29kZSByZWFkIGBwa3RfZGV2LSZndDtjZmxvd3NgIGRpcmVjdGx5IG11bHRpcGxlIHRpbWVzLCBpZiB0aGUgYGNmbG93c2AgdmFsdWUgd2FzIHJlYWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGl0IG1pZ2h0IGhhdmUgY2hhbmdlZCBjb25jdXJyZW50bHksIHdoaWNoIG1pZ2h0IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIE5vdywgdGhlIGBjZmxvd3NgIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4gQSB2ZXJ5IHJlYWwgYnVnIGZpeCEgU28sIGl0IGxvb2tzIGxpa2UgYSBnb29kIG9uZSB0byBoaXQgd2l0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBhcmU6IGBORVRfUEtUR0VOYC4gQW5kIEkmIzM5O2xsIGZvY3VzIG15IHN5bWJvbGljIGV4cGxvcmF0aW9uIG9uIHRob3NlIGVudHJ5IHBvaW50IGZ1bmN0aW9uczogYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5faWZfc2hvd2AsIGFuZCBgcGt0Z2VuX3RocmVhZF93b3JrZXJgLiBJJiMzOTtsbCBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lcyBmb3IgdGhvc2UgZW50cnkgcG9pbnRzIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9pZl9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTU2NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjU2NjpzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvcGt0Z2VuLmMtNTY3LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0xODczPXN0YXRpYyBpbnQgcGt0Z2VuX2lmX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5uZXQvY29yZS9wa3RnZW4uYy0xODc0LXtcbm5ldC9jb3JlL3BrdGdlbi5jOjE4NzU6XHRyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcGt0Z2VuX2lmX3Nob3csIHBkZV9kYXRhKGlub2RlKSk7XG5uZXQvY29yZS9wa3RnZW4uYy0xODc2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzcKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkFmZmlybWF0aW9uIGFuZCBBY3Rpb246IFNldHRpbmcgdGhlIFN0YWdlKioKClllcywgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycyBpcyBhcyBJIHVuZGVyc3RhbmQgaXQuIEdpdmVuIHRoaXMgY29uZmlybWF0aW9uLCBJIHdpbGwgbm93IHByb2NlZWQgdG8gZGVmaW5lIGFuZCBlc3RhYmxpc2ggdGhlIGRlc2lyZWQgcmVzdWx0cy4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJIGFtIHNldHRpbmcgdGhlIHBhcmFtZXRlcnMsIGFuZCBJIGFtIGluIGNvbnRyb2wgb2YgdGhlIG91dGNvbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfUEtUR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl9pZl9zaG93JiMzNDssCiAgICAmIzM0O3BrdGdlbl90aHJlYWRfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgYnkgdXNpbmcgUkVBRF9PTkNFIGFuZCBXUklURV9PTkNFLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGluY29uc2lzdGVudCBzdGF0ZSB3aGVuIGBjZmxvd3NgIGlzIG1vZGlmaWVkIGNvbmN1cnJlbnRseSB2aWEgcHJvY2ZzIHdoaWxlIHRoZSBwa3RnZW4gdGhyZWFkIGlzIHJ1bm5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3Nob3cmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zIGFuZCBjYWNoaW5nIHRoZSB2YWx1ZSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBjZmxvd3NgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGVjZjU5NjIxMDFlMzU4ZWRlNzc1NThhMGU5YjJjZTJlY2ZiYWY0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA1OjU4OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtNTY2LDYgJiM0Mzs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHsKIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKIAlrdGltZV90IHN0b3BwZWQ7CiAJdW5zaWduZWQgaW50IGk7CiAJdTY0IGlkbGU7CkBAIC01OTAsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJCSAgIHBrdF9kZXYtJmd0O25mcmFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0mZ3Q7ZGVsYXksCiAJCSAgIHBrdF9kZXYtJmd0O2Nsb25lX3NrYiwgcGt0X2Rldi0mZ3Q7b2Rldm5hbWUpOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiYjMzQ7LCBwa3RfZGV2LSZndDtjZmxvd3MsCiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XG4mIzM0OywgY2Zsb3dzLAogCQkgICBwa3RfZGV2LSZndDtsZmxvdyk7CiAKIAlzZXFfcHJpbnRmKHNlcSwKQEAgLTY3NSw3ICYjNDM7Njc2LDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9QS1RfRkxBR1M7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpID09IEZMT1dfU0VRX1NISUZUKQotCQkJaWYgKCFwa3RfZGV2LSZndDtjZmxvd3MpCiYjNDM7CQkJaWYgKCFjZmxvd3MpCiAJCQkJY29udGludWU7CiAKIAkJaWYgKHBrdF9kZXYtJmd0O2ZsYWdzICZhbXA7ICgxICZsdDsmbHQ7IGkpKSB7CkBAIC0xNjMyLDggJiM0MzsxNjMzLDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQlpZiAodmFsdWUgJmd0OyBNQVhfQ0ZMT1dTKQogCQkJdmFsdWUgPSBNQVhfQ0ZMT1dTOwogCi0JCXBrdF9kZXYtJmd0O2NmbG93cyA9IHZhbHVlOwotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgcGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzLCB2YWx1ZSk7CiYjNDM7CQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgKHVuc2lnbmVkIGludCl2YWx1ZSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiAjaWZkZWYgQ09ORklHX1hGUk0KQEAgLTIzNzMsNyAmIzQzOzIzNzQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmX3NlZW4oY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KQogCXJldHVybiAhIShwa3RfZGV2LSZndDtmbG93c1tmbG93XS5mbGFncyAmYW1wOyBGX0lOSVQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCB1bnNpZ25lZCBpbnQgY2Zsb3dzKQogewogCWludCBmbG93ID0gcGt0X2Rldi0mZ3Q7Y3VyZmw7CiAKQEAgLTIzODMsMTEgJiM0MzsyMzg0LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmNvdW50ID0gMDsKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzID0gMDsKIAkJCXBrdF9kZXYtJmd0O2N1cmZsICYjNDM7PSAxOwotCQkJaWYgKHBrdF9kZXYtJmd0O2N1cmZsICZndDs9IHBrdF9kZXYtJmd0O2NmbG93cykKJiM0MzsJCQlpZiAocGt0X2Rldi0mZ3Q7Y3VyZmwgJmd0Oz0gY2Zsb3dzKQogCQkJCXBrdF9kZXYtJmd0O2N1cmZsID0gMDsgLypyZXNldCAqLwogCQl9CiAJfSBlbHNlIHsKLQkJZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CQlmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coY2Zsb3dzKTsKIAkJcGt0X2Rldi0mZ3Q7Y3VyZmwgPSBmbG93OwogCiAJCWlmIChwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jb3VudCAmZ3Q7IHBrdF9kZXYtJmd0O2xmbG93KSB7CkBAIC0yNDYxLDEyICYjNDM7MjQ2MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKICAqLwogc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewomIzQzOwl1bnNpZ25lZCBpbnQgY2Zsb3dzOwogCV9fdTMyIGltbjsKIAlfX3UzMiBpbXg7CiAJaW50IGZsb3cgPSAwOwogCi0JaWYgKHBrdF9kZXYtJmd0O2NmbG93cykKLQkJZmxvdyA9IGZfcGljayhwa3RfZGV2KTsKJiM0MzsJY2Zsb3dzID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CWlmIChjZmxvd3MpCiYjNDM7CQlmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7CiAKIAkvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi8KIAlpZiAocGt0X2Rldi0mZ3Q7c3JjX21hY19jb3VudCAmZ3Q7IDEpIHsKQEAgLTI1ODIsNyAmIzQzOzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiAJCQlwa3RfZGV2LSZndDtjdXJfc2FkZHIgPSBodG9ubCh0KTsKIAkJfQogCi0JCWlmIChwa3RfZGV2LSZndDtjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKJiM0MzsJCWlmIChjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKIAkJCXBrdF9kZXYtJmd0O2N1cl9kYWRkciA9IHBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmN1cl9kYWRkcjsKIAkJfSBlbHNlIHsKIAkJCWltbiA9IG50b2hsKHBrdF9kZXYtJmd0O2RhZGRyX21pbik7CkBAIC0yNjExLDcgJiM0MzsyNjE0LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCQkJCQlwa3RfZGV2LSZndDtjdXJfZGFkZHIgPSBodG9ubCh0KTsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocGt0X2Rldi0mZ3Q7Y2Zsb3dzKSB7CiYjNDM7CQkJaWYgKGNmbG93cykgewogCQkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDsKIAkJCQlwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jdXJfZGFkZHIgPQogCQkJCSAgICBwa3RfZGV2LSZndDtjdXJfZGFkZHI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjExCgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDkyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmN1cnJlbmN5IEZpeCBmb3IgcGt0Z2VuLmMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gYG5ldC9jb3JlL3BrdGdlbi5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYHBrdF9kZXYtJmd0O2NmbG93c2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGlzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IEJ1dCBubywgaXQmIzM5O3MgYSBkYXRhIHJhY2UgaXNzdWUuIFRoZSBwYXRjaCB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYXJvdW5kIHRoZSBgcGt0X2Rldi0mZ3Q7Y2Zsb3dzYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwYXNzaW5nIGBjZmxvd3NgIChvciB0aGUgcmVhZC1vbmNlIHZhbHVlKSBhcyBhbiBhcmd1bWVudCBpbiBgZl9waWNrYCBhbmQgdXNpbmcgaXQgY29uc2lzdGVudGx5IGluIHBsYWNlcyBsaWtlIGBtb2RfY3VyX2hlYWRlcnNgIGFuZCBgcGt0Z2VuX2lmX3Nob3dgLgoKVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGUgcG90ZW50aWFsIGZvciBgcGt0X2Rldi0mZ3Q7Y2Zsb3dzYCB0byBjaGFuZ2UgYmV0d2VlbiB0aGUgY2hlY2sgaWYgaXQgaXMgbm9uLXplcm8sIGFuZCBpdHMgdXNlLCB3aGljaCBjb3VsZCBsZWFkIHRvIGBnZXRfcmFuZG9tX3UzMl9iZWxvdygwKWAgb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGUgdmFsdWUgY2hhbmdlcyBzaWduaWZpY2FudGx5LiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcg4oCTIGEgZGF0YSByYWNlLgoKSSB3ZW50IGJhY2sgYW5kIGRvdWJsZS1jaGVja2VkIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFllcCwgaXQgdXNlcyBgUkVBRF9PTkNFYCBjb25zaXN0ZW50bHkgaW4gdGhlIHJlYWRlciBmdW5jdGlvbnMuIEFuZCBgV1JJVEVfT05DRWAgZm9yIHdyaXRpbmcgaXQuIGBmX3BpY2tgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCBmcm9tIGBwa3RfZGV2LSZndDtjZmxvd3NgLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCBpdCBpcyBpbmRlZWQgYSBkYXRhIHJhY2UuCgpUaGVyZWZvcmUsIEtNU0FOIGlzICpub3QqIG5lZWRlZCBoZXJlLiBUaGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gS0NTQU4gd291bGQgbGlrZWx5IGNhdGNoIHRoZSBkYXRhIHJhY2UgZGlyZWN0bHksIGFuZCBLQVNBTiBtaWdodCBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB0aGF0IHJlc3VsdCBmcm9tIHRoZSByYWNlLiBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMga2luZCBvZiBidWcuCgpTbywgSSB3aWxsIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmc6IFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtJmd0O2NmbG93c2AgYnkgaW50cm9kdWNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhbm5vdGF0aW9ucyBhbmQgY2FjaGluZyB0aGUgdmFsdWUgaW4gYSBsb2NhbCB2YXJpYWJsZSBgY2Zsb3dzYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBwa3RfZGV2LSZndDtjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zIGFuZCBjYWNoaW5nIHRoZSB2YWx1ZSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBjZmxvd3NgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1ODo1Mi45MTcxNjA2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTYxNTgyOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9QS1RHRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgICBcInBrdGdlbl9pZl9zaG93XCIsXG4gICAgXCJwa3RnZW5fdGhyZWFkX3dvcmtlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTg6NTIuOTE3MTY2NDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1Mjg3OTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBlY2Y1OTYyMTAxZTM1OGVkZTc3NTU4YTBlOWIyY2UyZWNmYmFmNGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6NTg6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IGVlNjRmMzAxMjMyMTAuLmUxNGJiOWE0OGE4ZjkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xcbkBAIC01NjYsNiArNTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fcHJvY19vcHMgPSB7XFxuIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuK1xcdHVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKTtcXG4gXFx0a3RpbWVfdCBzdG9wcGVkO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4gXFx0dTY0IGlkbGU7XFxuQEAgLTU5MCw3ICs1OTEsNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRcXHQgICBwa3RfZGV2LVxcdTAwM2VuZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXFx1MDAzZWRlbGF5LFxcbiBcXHRcXHQgICBwa3RfZGV2LVxcdTAwM2VjbG9uZV9za2IsIHBrdF9kZXYtXFx1MDAzZW9kZXZuYW1lKTtcXG4gXFxuLVxcdHNlcV9wcmludGYoc2VxLCBcXFwiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcXFxcblxcXCIsIHBrdF9kZXYtXFx1MDAzZWNmbG93cyxcXG4rXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxcXFxuXFxcIiwgY2Zsb3dzLFxcbiBcXHRcXHQgICBwa3RfZGV2LVxcdTAwM2VsZmxvdyk7XFxuIFxcbiBcXHRzZXFfcHJpbnRmKHNlcSxcXG5AQCAtNjc1LDcgKzY3Niw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfUEtUX0ZMQUdTOyBpKyspIHtcXG4gXFx0XFx0aWYgKGkgPT0gRkxPV19TRVFfU0hJRlQpXFxuLVxcdFxcdFxcdGlmICghcGt0X2Rldi1cXHUwMDNlY2Zsb3dzKVxcbitcXHRcXHRcXHRpZiAoIWNmbG93cylcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyBpKSkge1xcbkBAIC0xNjMyLDggKzE2MzMsOCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGlmICh2YWx1ZSBcXHUwMDNlIE1BWF9DRkxPV1MpXFxuIFxcdFxcdFxcdHZhbHVlID0gTUFYX0NGTE9XUztcXG4gXFxuLVxcdFxcdHBrdF9kZXYtXFx1MDAzZWNmbG93cyA9IHZhbHVlO1xcbi1cXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIk9LOiBmbG93cz0ldVxcXCIsIHBrdF9kZXYtXFx1MDAzZWNmbG93cyk7XFxuK1xcdFxcdFdSSVRFX09OQ0UocGt0X2Rldi1cXHUwMDNlY2Zsb3dzLCB2YWx1ZSk7XFxuK1xcdFxcdHNwcmludGYocGdfcmVzdWx0LCBcXFwiT0s6IGZsb3dzPSV1XFxcIiwgKHVuc2lnbmVkIGludCl2YWx1ZSk7XFxuIFxcdFxcdHJldHVybiBjb3VudDtcXG4gXFx0fVxcbiAjaWZkZWYgQ09ORklHX1hGUk1cXG5AQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZl9zZWVuKGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgZmxvdylcXG4gXFx0cmV0dXJuICEhKHBrdF9kZXYtXFx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIFxcdTAwMjYgRl9JTklUKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbitzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIHVuc2lnbmVkIGludCBjZmxvd3MpXFxuIHtcXG4gXFx0aW50IGZsb3cgPSBwa3RfZGV2LVxcdTAwM2VjdXJmbDtcXG4gXFxuQEAgLTIzODMsMTEgKzIzODQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiBcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VmbG93c1tmbG93XS5jb3VudCA9IDA7XFxuIFxcdFxcdFxcdHBrdF9kZXYtXFx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzID0gMDtcXG4gXFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlY3VyZmwgKz0gMTtcXG4tXFx0XFx0XFx0aWYgKHBrdF9kZXYtXFx1MDAzZWN1cmZsIFxcdTAwM2U9IHBrdF9kZXYtXFx1MDAzZWNmbG93cylcXG4rXFx0XFx0XFx0aWYgKHBrdF9kZXYtXFx1MDAzZWN1cmZsIFxcdTAwM2U9IGNmbG93cylcXG4gXFx0XFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlY3VyZmwgPSAwOyAvKnJlc2V0ICovXFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtXFx1MDAzZWNmbG93cyk7XFxuK1xcdFxcdGZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhjZmxvd3MpO1xcbiBcXHRcXHRwa3RfZGV2LVxcdTAwM2VjdXJmbCA9IGZsb3c7XFxuIFxcbiBcXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlZmxvd3NbZmxvd10uY291bnQgXFx1MDAzZSBwa3RfZGV2LVxcdTAwM2VsZmxvdykge1xcbkBAIC0yNDYxLDEyICsyNDYyLDE0IEBAIHN0YXRpYyB2b2lkIHNldF9jdXJfcXVldWVfbWFwKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGludCBjZmxvd3M7XFxuIFxcdF9fdTMyIGltbjtcXG4gXFx0X191MzIgaW14O1xcbiBcXHRpbnQgZmxvdyA9IDA7XFxuIFxcbi1cXHRpZiAocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKVxcbi1cXHRcXHRmbG93ID0gZl9waWNrKHBrdF9kZXYpO1xcbitcXHRjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKTtcXG4rXFx0aWYgKGNmbG93cylcXG4rXFx0XFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2LCBjZmxvd3MpO1xcbiBcXG4gXFx0LyogIERlYWwgd2l0aCBzb3VyY2UgTUFDICovXFxuIFxcdGlmIChwa3RfZGV2LVxcdTAwM2VzcmNfbWFjX2NvdW50IFxcdTAwM2UgMSkge1xcbkBAIC0yNTgyLDcgKzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIFxcdFxcdFxcdHBrdF9kZXYtXFx1MDAzZWN1cl9zYWRkciA9IGh0b25sKHQpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlY2Zsb3dzIFxcdTAwMjZcXHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xcbitcXHRcXHRpZiAoY2Zsb3dzIFxcdTAwMjZcXHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xcbiBcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VjdXJfZGFkZHIgPSBwa3RfZGV2LVxcdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHI7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGltbiA9IG50b2hsKHBrdF9kZXYtXFx1MDAzZWRhZGRyX21pbik7XFxuQEAgLTI2MTEsNyArMjYxNCw3IEBAIHN0YXRpYyB2b2lkIG1vZF9jdXJfaGVhZGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFx0XFx0XFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlY3VyX2RhZGRyID0gaHRvbmwodCk7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKSB7XFxuK1xcdFxcdFxcdGlmIChjZmxvd3MpIHtcXG4gXFx0XFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgfD0gRl9JTklUO1xcbiBcXHRcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHIgPVxcbiBcXHRcXHRcXHRcXHQgICAgcGt0X2Rldi1cXHUwMDNlY3VyX2RhZGRyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1ODo1My4yNzA4Mzg5MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3Mjg5Mjc2ODcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5faWZfc2hvd1wiLFxuICAgIFwicGt0Z2VuX3RocmVhZF93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGVjZjU5NjIxMDFlMzU4ZWRlNzc1NThhMGU5YjJjZTJlY2ZiYWY0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjU4OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xuaW5kZXggZWU2NGYzMDEyMzIxMC4uZTE0YmI5YTQ4YThmOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTU2Niw2ICs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHtcbiBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHR1bnNpZ25lZCBpbnQgY2Zsb3dzID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNlY2Zsb3dzKTtcbiBcdGt0aW1lX3Qgc3RvcHBlZDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0dTY0IGlkbGU7XG5AQCAtNTkwLDcgKzU5MSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlbmZyYWdzLCAodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LVx1MDAzZWRlbGF5LFxuIFx0XHQgICBwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiwgcGt0X2Rldi1cdTAwM2VvZGV2bmFtZSk7XG4gXG4tXHRzZXFfcHJpbnRmKHNlcSwgXCIgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxcblwiLCBwa3RfZGV2LVx1MDAzZWNmbG93cyxcbitcdHNlcV9wcmludGYoc2VxLCBcIiAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XFxuXCIsIGNmbG93cyxcbiBcdFx0ICAgcGt0X2Rldi1cdTAwM2VsZmxvdyk7XG4gXG4gXHRzZXFfcHJpbnRmKHNlcSxcbkBAIC02NzUsNyArNjc2LDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1BLVF9GTEFHUzsgaSsrKSB7XG4gXHRcdGlmIChpID09IEZMT1dfU0VRX1NISUZUKVxuLVx0XHRcdGlmICghcGt0X2Rldi1cdTAwM2VjZmxvd3MpXG4rXHRcdFx0aWYgKCFjZmxvd3MpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKHBrdF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKSkge1xuQEAgLTE2MzIsOCArMTYzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKHZhbHVlIFx1MDAzZSBNQVhfQ0ZMT1dTKVxuIFx0XHRcdHZhbHVlID0gTUFYX0NGTE9XUztcbiBcbi1cdFx0cGt0X2Rldi1cdTAwM2VjZmxvd3MgPSB2YWx1ZTtcbi1cdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwiT0s6IGZsb3dzPSV1XCIsIHBrdF9kZXYtXHUwMDNlY2Zsb3dzKTtcbitcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cywgdmFsdWUpO1xuK1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCJPSzogZmxvd3M9JXVcIiwgKHVuc2lnbmVkIGludCl2YWx1ZSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmX3NlZW4oY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KVxuIFx0cmV0dXJuICEhKHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgXHUwMDI2IEZfSU5JVCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbitzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIHVuc2lnbmVkIGludCBjZmxvd3MpXG4ge1xuIFx0aW50IGZsb3cgPSBwa3RfZGV2LVx1MDAzZWN1cmZsO1xuIFxuQEAgLTIzODMsMTEgKzIzODQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY291bnQgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgKz0gMTtcbi1cdFx0XHRpZiAocGt0X2Rldi1cdTAwM2VjdXJmbCBcdTAwM2U9IHBrdF9kZXYtXHUwMDNlY2Zsb3dzKVxuK1x0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWN1cmZsIFx1MDAzZT0gY2Zsb3dzKVxuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJmbCA9IDA7IC8qcmVzZXQgKi9cbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtXHUwMDNlY2Zsb3dzKTtcbitcdFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KGNmbG93cyk7XG4gXHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgPSBmbG93O1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jb3VudCBcdTAwM2UgcGt0X2Rldi1cdTAwM2VsZmxvdykge1xuQEAgLTI0NjEsMTIgKzI0NjIsMTQgQEAgc3RhdGljIHZvaWQgc2V0X2N1cl9xdWV1ZV9tYXAoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gICovXG4gc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIHtcbitcdHVuc2lnbmVkIGludCBjZmxvd3M7XG4gXHRfX3UzMiBpbW47XG4gXHRfX3UzMiBpbXg7XG4gXHRpbnQgZmxvdyA9IDA7XG4gXG4tXHRpZiAocGt0X2Rldi1cdTAwM2VjZmxvd3MpXG4tXHRcdGZsb3cgPSBmX3BpY2socGt0X2Rldik7XG4rXHRjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuK1x0aWYgKGNmbG93cylcbitcdFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2LCBjZmxvd3MpO1xuIFxuIFx0LyogIERlYWwgd2l0aCBzb3VyY2UgTUFDICovXG4gXHRpZiAocGt0X2Rldi1cdTAwM2VzcmNfbWFjX2NvdW50IFx1MDAzZSAxKSB7XG5AQCAtMjU4Miw3ICsyNTg1LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX3NhZGRyID0gaHRvbmwodCk7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHBrdF9kZXYtXHUwMDNlY2Zsb3dzIFx1MDAyNlx1MDAyNiBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHtcbitcdFx0aWYgKGNmbG93cyBcdTAwMjZcdTAwMjYgZl9zZWVuKHBrdF9kZXYsIGZsb3cpKSB7XG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJfZGFkZHIgPSBwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmN1cl9kYWRkcjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbW4gPSBudG9obChwa3RfZGV2LVx1MDAzZWRhZGRyX21pbik7XG5AQCAtMjYxMSw3ICsyNjE0LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cl9kYWRkciA9IGh0b25sKHQpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0XHRpZiAocGt0X2Rldi1cdTAwM2VjZmxvd3MpIHtcbitcdFx0XHRpZiAoY2Zsb3dzKSB7XG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY3VyX2RhZGRyID1cbiBcdFx0XHRcdCAgICBwa3RfZGV2LVx1MDAzZWN1cl9kYWRkcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU4OjUzLjI3MDg0MDQ4M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5ODQ4MjQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBwa3RnZW4uYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdG91Y2hpbmcgYG5ldC9jb3JlL3BrdGdlbi5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHJhY2UgZml4LCBjaGFuZ2luZyBhY2Nlc3NlcyB0byBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIHRvIHVzZSBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nP1xuXG5Jbml0aWFsbHksIG15IHRob3VnaHQgd2FzLCBcIml0J3MganVzdCBhIGJ1ZyBmaXgsXCIgc28gcHJvYmFibHkgbm90LiBJdCdzIG5vdCAqYWRkaW5nKiBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEJ1dCB0aGVuIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgbGF5IG91dCBhIHNlcmllcyBvZiB0ZXN0cy5cblxuRmlyc3QgSSBydW4gdGhyb3VnaCB0aGUgZXhjbHVzaW9ucy4gRG9jdW1lbnRhdGlvbj8gTm9wZS4gTG9nZ2luZyBvciBkZWNvcmF0aXZlIGNoYW5nZXM/IE5vcGUuIE51bWVyaWMgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIGZsb3c/IE5vcGUuIFVucmVhY2hhYmxlIGNvZGU/IE5vcGUuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZT8gTm9wZS4gVGVhcmRvd24gY2FsbGJhY2tzPyBOb3BlLlxuXG5TbywgZG9lcyBpdCBmdW5jdGlvbmFsbHkgY2hhbmdlIHRoZSBrZXJuZWw/IFdlbGwsIGl0J3MgKnRlY2huaWNhbGx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93LCBieSBwcmV2ZW50aW5nIHRoZSBjb21waWxlciBmcm9tIG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdm9sYXRpbGUgdmFyaWFibGUuIEl0J3MgYWJvdXQgZGF0YSBpbnRlZ3JpdHkuIEJ1dCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBidWcgZml4ZXMgYXJlIHdvcnRoIGZ1enppbmcuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgdGhlIGFmZmVjdGVkIGNvZGUgcmVhY2hhYmxlPyBUaGF0J3MgdGhlIGtleS4gUXVpY2sgY2hlY2ssIGFuZCB5ZXMsIGAvcHJvYy9uZXQvcGt0Z2VuL2AgaXMgYSB0aGluZy4gU28sIGl0J3MgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljISBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgaGVyZTogaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCB0aGVuIHdlIHNob3VsZCBmdXp6LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3BrdGdlbi5jYCB0byBiZSBzdXJlLiBJJ20gdGhpbmtpbmcgb2YgYHBrdGdlbl9pZl9zaG93YCwgYHBrdGdlbl9pZl93cml0ZWAsIGFuZCBgbW9kX2N1cl9oZWFkZXJzYC5cblxuQmFzZWQgb24gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjAxLjI1NTY2NjgyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUwNzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9OTU2PXN0YXRpYyBfX3UzMiBwa3RnZW5fcmVhZF9mbGFnKGNvbnN0IGNoYXIgKmYsIGJvb2wgKmRpc2FibGUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy05ODQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6OTg1OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5uZXQvY29yZS9wa3RnZW4uYy05ODYtXFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODEtXFx0LnByb2NfbHNlZWtcXHQ9IHNlcV9sc2VlayxcXG5uZXQvY29yZS9wa3RnZW4uYzoxODgyOlxcdC5wcm9jX3dyaXRlXFx0PSBwa3RnZW5faWZfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTg4My1cXHQucHJvY19yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6MDEuMzAxMTgxMjU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NjU3ODMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBhbmQgSGVhZGVyIE1vZGlmaWNhdGlvbioqXG5cblJpZ2h0LCBgcGt0Z2VuX2lmX3dyaXRlYC4uLiB0aGF0J3MgYSBgcHJvY193cml0ZWAgY2FsbGJhY2ssIHNvIGl0J3MgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyBgbW9kX2N1cl9oZWFkZXJzYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBwa3RnZW5feG1pdGAgb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBsaWtlbHkgZHVyaW5nIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIEJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIEdvdHRhIGRlbHZlIGRlZXBlciBhbmQgc2VlIHdoZXJlIGBtb2RfY3VyX2hlYWRlcnNgIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhvc2UgZnVuY3Rpb25zIGNvbGxhYm9yYXRlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjA0Ljk5Nzc2MTgwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5MDcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RfY3VyX2hlYWRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MjQzOT1zdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI0NjItICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjQ2MzpzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjQ2NC17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yOTMwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2RldixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5NTQtXFx0ICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mjk1NTpcXHRtb2RfY3VyX2hlYWRlcnMocGt0X2Rldik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjk1Ni1cXHRxdWV1ZV9tYXAgPSBwa3RfZGV2LVxcdTAwM2VjdXJfcXVldWVfbWFwO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzA1OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMDgyLVxcdCAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jOjMwODM6XFx0bW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMwODQtXFx0cXVldWVfbWFwID0gcGt0X2Rldi1cXHUwMDNlY3VyX3F1ZXVlX21hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6MDUuMDQ2MjU3MDgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MTgxMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBtb2RfY3VyX2hlYWRlcnNgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIHNlZWluZyBhcyBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGZpbGxfcGFja2V0X2lwdjRgIGFuZCBgZmlsbF9wYWNrZXRfaXB2NmAuIFRoYXQgc3VnZ2VzdHMgYSBjZW50cmFsIHJvbGUgaW4gY29uc3RydWN0aW5nIHRoZSBwYWNrZXQgaGVhZGVycywgbm8gZG91YnQuIFRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgdGhhdCBhbGxvdyB0aGUgcGFja2V0IGdlbmVyYXRpb24gc3lzdGVtIHRvIHJ1bi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gV2hhdCB2YXJpYWJsZXMgb3IgZmxhZ3MgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciBgcGt0Z2VuYD8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHNlZSB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgcGFja2V0IGdlbmVyYXRpb24uIEtub3dpbmcgKnRoYXQqIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBmdW5jdGlvbiB3b3Jrcy4gVGhpcyBpbml0aWFsIHRyYWNpbmcgd2lsbCBhbGxvdyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBiZWhhdmlvdXIgb2YgYG1vZF9jdXJfaGVhZGVyc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTowOS4xOTgwNzM5NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyOTE4MDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfUEtUR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjA5LjI0NjM3OTA5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDk3MzkwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSB0aGlua2luZyBpdDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiB3aGF0IEknbSBkZWFsaW5nIHdpdGgsIGl0J3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEhvd2V2ZXIsIHNvbWV0aW1lcyB0aGUgbW9yZSBmaW5lLWdyYWluZWQgb3IgY29yZSBuZXR3b3JrIHNldHRpbmdzIHJlc2lkZSBkZWVwZXIuIFNvLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0J3MgaW4gdGhlIHNhbWUgc2VjdGlvbiwgSSBzaG91bGQgYWxzbyBjaGVjayBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGUgbWFrZWZpbGVzIGZyZXF1ZW50bHkgY29udGFpbiBpbmNsdWRlIGRpcmVjdGl2ZXMgdGhhdCBwb2ludCB0byBLY29uZmlnIGZpbGVzIG9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBHb2luZyBzdHJhaWdodCB0byB0aGUgbWFrZWZpbGUgd291bGQgYmUgYSBnb29kIHNlY29uZCBjaGVjay4gSXQncyB0aGUgbW9zdCBlZmZlY3RpdmUgcGF0aCBJIGNhbiB0YWtlIGF0IHRoZSBtb21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToxNC44NTYxMjEwNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDc3MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gbmV0LXByb2Nmcy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICs9IHBrdGdlbi5vXFxubmV0L2NvcmUvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX05FVFBPTEwpICs9IG5ldHBvbGwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToxNC45MDM2MDM4OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MzA0MTc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkZpbmRpbmcgdGhlIERlZmluaXRpb24gb2YgYE5FVF9QS1RHRU5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgTkVUX1BLVEdFTmAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNvbW1vbiB0YXNrIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlYmFzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGEgcHJlcHJvY2Vzc29yIG1hY3JvLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBmdW5jdGlvbiBvciBzdHJ1Y3R1cmUgbmFtZSB0aGF0J3MgYmVlbiBjb25zaXN0ZW50bHkgdXNlZCB0aHJvdWdob3V0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYSB0b29sIHRoYXQncyBkZXNpZ25lZCBmb3IgZXhhY3RseSB0aGlzLiBJIGNvdWxkIHVzZSBncmVwLCBhY2ssIHJpcGdyZXAgKHJnKSwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBwcm9qZWN0LiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBjYXNlIHNlbnNpdGl2aXR5IGFuZCB3aWxkY2FyZHMgaW4gbXkgc2VhcmNoIHN0cmluZywgaWYgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBwcm9qZWN0IEkgYW0gd29ya2luZyBvbi4gSXQncyBhbHNvIGxpa2VseSBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggc2V2ZXJhbCBwb3RlbnRpYWwgcGF0aHM6IHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5jbHVkZSBwYXRocywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGRlcGVuZGVuY2llcy4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGUgdmFyaW91cyByZXN1bHRzIGFuZCBhc3Nlc3MgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIG9mIHRoZSBhY3R1YWwgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjE4LjI0NjY0OTMyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NTkzMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1BLVEdFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zODQ9bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbm5ldC9LY29uZmlnLTM4NS1cXG5uZXQvS2NvbmZpZzozODY6Y29uZmlnIE5FVF9QS1RHRU5cXG5uZXQvS2NvbmZpZy0zODctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToyMC4zNDI1ODc2OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDQzNjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYE5FVF9QS1RHRU5gIG1vZHVsZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIHNvIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkb3duc3RyZWFtIGFuZCB1cHN0cmVhbSBsaW5rYWdlcyBpcyBjcnVjaWFsIGJlZm9yZSBJIGV2ZW4gY29uc2lkZXIgbWFraW5nIGEgY2hhbmdlLCBldmFsdWF0aW5nIGEgbmV3IGludGVncmF0aW9uLCBvciB0cm91Ymxlc2hvb3RpbmcgYW4gaXNzdWUuIEnigJlsbCBzdGFydCBieSBsaXN0aW5nIG91dCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMg4oCTIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVuY2llcy4gT2Z0ZW4gdGhlIGNhc2NhZGluZyBpbXBhY3Qgb24gdGhvc2UgZGVlcGVyIGVsZW1lbnRzIGFyZSB0aGUgc291cmNlIG9mIG1vc3Qgc3lzdGVtIGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBtb2R1bGUgcmVsaWVzIG9uIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlicmFyaWVzLCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMsIGtlcm5lbCBpbnRlcmZhY2VzLCBvciBldmVuIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgZXh0ZXJuYWwgdG9vbHMuIFdoYXQgdmVyc2lvbnMgb2YgdGhlIGRlcGVuZGVudCBsaWJzIGFyZSBuZWVkZWQ/IElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgZGVwZW5kZW50IGxpYnMgaW5zdGFsbGVkLCBJIG5lZWQgdG8ga25vdyB3aGljaCBpcyBjYWxsZWQ/IFRoZSB2ZXJzaW9uaW5nIGlzIHZpdGFsLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc2hhcmVkIHJlc291cmNlcyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBUaGlzIGRlcGVuZGVuY3kgYXVkaXQgaXMgc3RlcCBvbmUsIGJlZm9yZSBJIGJlZ2luIHRoZSBhY3R1YWwgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjIzLjc4MzAyNjc5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODY6XFx0Y29uZmlnIE5FVF9QS1RHRU5cXG4gMzg3OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuIDM4OTpcXHRcXHRoZWxwXFxuIDM5MDpcXHRcXHQgIFRoaXMgbW9kdWxlIHdpbGwgaW5qZWN0IHByZWNvbmZpZ3VyZWQgcGFja2V0cywgYXQgYSBjb25maWd1cmFibGVcXG4gMzkxOlxcdFxcdCAgcmF0ZSwgb3V0IG9mIGEgZ2l2ZW4gaW50ZXJmYWNlLiAgSXQgaXMgdXNlZCBmb3IgbmV0d29yayBpbnRlcmZhY2VcXG4gMzkyOlxcdFxcdCAgc3RyZXNzIHRlc3RpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiAgSWYgeW91IGRvbid0IHVuZGVyc3RhbmRcXG4gMzkzOlxcdFxcdCAgd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJ3QgbmVlZCBpdDogc2F5IE4uXFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdCAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIGNhbiBiZSBmb3VuZFxcbiAzOTY6XFx0XFx0ICBhdCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGt0Z2VuLnJzdFxcdTAwM2UuXFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAzOTk6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGt0Z2VuLlxcbiA0MDA6XFx0XFxuIDQwMTpcXHRjb25maWcgTkVUX0RST1BfTU9OSVRPUlxcbiA0MDI6XFx0XFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBuZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2VcXFwiXFxuIDQwMzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgVFJBQ0VQT0lOVFNcXG4gNDA0OlxcdFxcdGhlbHBcXG4gNDA1OlxcdFxcdCAgVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGFsZXJ0aW5nIHNlcnZpY2UgdG8gdXNlcnNwYWNlIGluIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToyMy43ODMxMDgxNjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NjEzMjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgUGFja2V0IEdlbmVyYXRpb24gRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGZvciBwYWNrZXQgZ2VuZXJhdGlvbiB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkgc2VlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGBJTkVUYCBhbmQgYFBST0NfRlNgLCBib3RoIG9mIHdoaWNoIGFyZSBwcmV0dHkgc3RhbmRhcmQsIHNvIHRoYXQncyBnb29kLiBUaGF0IGltcGxpZXMgSSBjYW4gZW5hYmxlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIHdpdGggdGhlIGBORVRfUEtUR0VOYCBjb25maWcgb3B0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIGBwa3RnZW5faWZfd3JpdGVgLCBgcGt0Z2VuX2lmX3Nob3dgLCBgZmlsbF9wYWNrZXRfaXB2NGAsIGFuZCBgZmlsbF9wYWNrZXRfaXB2NmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgdG8gZHJpdmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSG1tLCBJIG5vdGljZSBgZmlsbF9wYWNrZXRfaXB2NGAgYW5kIGBmaWxsX3BhY2tldF9pcHY2YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXkncmUgaW5saW5lZDsgdGhhdCBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgaG93IEkgY2FuIGludGVyYWN0IHdpdGggdGhlbS4gSW5saW5pbmcgb3IgbGFjayB0aGVyZW9mIGluZmx1ZW5jZXMgb3B0aW1pemF0aW9uIHBvdGVudGlhbC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6MjcuNjc5MjQzODQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg0OTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxsX3BhY2tldF9pcHY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTI5MDM9c3RhdGljIHN0cnVjdCBza19idWZmICpwa3RnZW5fYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yOTI5LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjI5MzA6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zMTg4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTkzLVxcdGVsc2VcXG5uZXQvY29yZS9wa3RnZW4uYzozMTk0OlxcdFxcdHJldHVybiBmaWxsX3BhY2tldF9pcHY0KG9kZXYsIHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToyNy43MjcwOTc4MjJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDQ4ODYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgVHJhbnNtaXNzaW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgZmlsbF9wYWNrZXRgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHBrdGdlbl94bWl0YC4gVGhhdCdzIGEga2V5IGludGVyYWN0aW9uIHJpZ2h0IHRoZXJlLiBJdCB0ZWxscyBtZSB0aGF0IHRoZSBwYWNrZXQgZ2VuZXJhdGlvbiBhbmQgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgbW9kdWxhcml6ZWQsIHdoaWNoIGlzIGdvb2Qgc29mdHdhcmUgZGVzaWduLiBgcGt0Z2VuX3htaXRgIGlzIHByb2JhYmx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzY2hlZHVsaW5nIG9yIGFjdHVhbGx5IHNlbmRpbmcgcGFja2V0cywgYW5kIGBmaWxsX3BhY2tldGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIG9yIHBvcHVsYXRpbmcgdGhlIHBhY2tldCBkYXRhIGl0c2VsZi5cblxuTm93LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIG5ldHdvcmsgc3RhY2ssIGBwa3RnZW5feG1pdGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIG1vcmUsIHN1Y2ggYXMgaW50ZXJmYWNpbmcgd2l0aCBhIE5JQyBkcml2ZXIgb3IgcHJlcGFyaW5nIHRoZSBwYWNrZXQgaW4gc29tZSBwcmUtdHJhbnNtaXNzaW9uIGZvcm1hdCwgYW5kIGBmaWxsX3BhY2tldGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHBhY2tldCBoZWFkZXJzLCBkYXRhIG9yIGJvdGguIFRoaW5raW5nIHRocm91Z2ggdGhlIGRldGFpbHMsIEknbSBub3cgbWFraW5nIGluZmVyZW5jZXMgYWJvdXQgdGhlIHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgaW4gdXNlIGhlcmUuIGBmaWxsX3BhY2tldGAncyBpbnB1dCBpcyBsaWtlbHkgYSBwb2ludGVyIHRvIGEgcGFja2V0IGJ1ZmZlciwgcG90ZW50aWFsbHkgYW4gYWRkcmVzcywgYW5kIGl0J3MgcHJvYmFibHkgZmlsbGluZyBpdCBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdG8gaXQsIHBlcmhhcHMgdGhyb3VnaCBhIGdsb2JhbCBjb250ZXh0IG9yIHZpYSB0aGUgYXJndW1lbnRzIG9mIGBwa3RnZW5feG1pdGAuIEknbSBzdGFydGluZyB0byBtZW50YWxseSB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIGF0IHBsYXk7IGlzIHRoaXMgdXNlci1zcGFjZSwga2VybmVsLXNwYWNlLCBvciBhIGh5YnJpZCBtb2RlbD8gVGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFjY2VzcyBwYXR0ZXJucyBzaWduaWZpY2FudGx5LiBUaGVyZSBjb3VsZCBiZSBETUEgaW52b2x2ZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHN0dWZmLCB0aG91Z2ggSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTozMS42MzE1ODg4NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU4OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTI5MDM9c3RhdGljIHN0cnVjdCBza19idWZmICpwa3RnZW5fYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yOTI5LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjI5MzA6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMDU3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMwNTg6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTMwNTktXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTg3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMxODg6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqb2RldixcXG5uZXQvY29yZS9wa3RnZW4uYy0zMTg5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzE5MS1cXHRpZiAocGt0X2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGX0lQVjYpXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzE5MjpcXHRcXHRyZXR1cm4gZmlsbF9wYWNrZXRfaXB2NihvZGV2LCBwa3RfZGV2KTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zMTkzLVxcdGVsc2VcXG5uZXQvY29yZS9wa3RnZW4uYzozMTk0OlxcdFxcdHJldHVybiBmaWxsX3BhY2tldF9pcHY0KG9kZXYsIHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTUtfVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzUxND1zdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTMtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzU1NDpcXHRcXHRwa3RfZGV2LVxcdTAwM2Vza2IgPSBmaWxsX3BhY2tldChvZGV2LCBwa3RfZGV2KTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTU1LVxcdFxcdGlmIChwa3RfZGV2LVxcdTAwM2Vza2IgPT0gTlVMTCkge1xcbm5ldC9jb3JlL3BrdGdlbi5jOjM1NTY6XFx0XFx0XFx0cHJfZXJyKFxcXCJFUlJPUjogY291bGRuJ3QgYWxsb2NhdGUgc2tiIGluIGZpbGxfcGFja2V0XFxcXG5cXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTU3LVxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjMxLjY3ODE1NTAxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUyNjczMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBFeGFtaW5pbmcgdGhlIFBhY2tldCBHZW5lcmF0b3IgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhY2tldCBnZW5lcmF0b3IgY29kZS4gYHBrdGdlbl94bWl0YC4uLiB0aGF0J3MgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGxvb3AsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgcGt0Z2VuX3RocmVhZF93b3JrZXJgICpjYWxscyogYHBrdGdlbl94bWl0YC4gUmlnaHQsIGBwa3RnZW5fdGhyZWFkX3dvcmtlcmAgaXMgbGlrZWx5IHRoZSBrdGhyZWFkIHJlc3BvbnNpYmxlIGZvciBhbGwgb2YgdGhpcywgc28gaXQncyBwcm9iYWJseSB0aGUgYmV0dGVyIGZvY3VzIHN5bWJvbC4gTGV0IG1lIGp1c3QgbWFrZSBhIG5vdGUgb2YgdGhhdC5cblxuSG9sZCBvbiwgSSBzZWUgYHBrdGdlbl9pZl93cml0ZWAgbm93LiBJc24ndCB0aGF0IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgY29udHJvbCBmbG93cz8gQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgaXQuIEhtbSwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0J3MgYXNzaWduZWQgdG8gYHByb2Nfb3BzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXTigJlzIHByb2JhYmx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJIHdvbmRlciBpZiBpdOKAmXMgaW5saW5lZC4uLiBub3BlLCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwcm9jIGludGVyZmFjZS5cblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJvYyBpbnRlcmZhY2UsIGFuZCBhbnkgb3RoZXIgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjM2LjEzMDgzMDk0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTIwNTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjM2LjE3Nzk0OTQ4OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE1NjUxMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBsaW5rZXIgaXNuJ3QgY29tcGxhaW5pbmcgYWJvdXQgbWlzc2luZyBzeW1ib2xzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgbWVhbnMgdGhlIGlzc3VlICpwcm9iYWJseSogaXNuJ3QgYSBzdHJhaWdodGZvcndhcmQgZXh0ZXJuYWwgcmVmZXJlbmNlIHRoYXQgSSd2ZSBib3RjaGVkLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoZW1zZWx2ZXMuIFNpbmNlIHRoZXJlIGFyZSBubyBleHBvcnRlZCBzeW1ib2xzLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgYW1pc3MgdGhlcmUuIEkgd2lsbCBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgZXh0ZXJuYWxseSB2aXNpYmxlLCBidXQgZm9yIHNvbWUgcmVhc29uLCBhcmUgbm90LiBJIHdpbGwgaW52ZXN0aWdhdGUgdGhlaXIgbGlua2FnZSwgdGhlaXIgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gbG9jYXRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB2aXNpYmlsaXR5IG1vZGlmaWVycyBvciBjb21waWxlciBmbGFncy4gSSB3aWxsIGFsc28gY2hlY2sgYW55IHJlbGF0ZWQgaGVhZGVycyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTozOS4zOTM2MDI5NjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDcyMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDExND1zdGF0aWMgdm9pZCBfX2V4aXQgcGdfY2xlYW51cCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMC1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTIxOm1vZHVsZV9pbml0KHBnX2luaXQpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjI6bW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMy1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI0Ok1PRFVMRV9BVVRIT1IoXFxcIlJvYmVydCBPbHNzb24gXFx1MDAzY3JvYmVydC5vbHNzb25AaXRzLnV1LnNlXFx1MDAzZVxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjU6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQYWNrZXQgR2VuZXJhdG9yIHRvb2xcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI2Ok1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI3Ok1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjg6bW9kdWxlX3BhcmFtKHBnX2NvdW50X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyOTpNT0RVTEVfUEFSTV9ERVNDKHBnX2NvdW50X2QsIFxcXCJEZWZhdWx0IG51bWJlciBvZiBwYWNrZXRzIHRvIGluamVjdFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzA6bW9kdWxlX3BhcmFtKHBnX2RlbGF5X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMTpNT0RVTEVfUEFSTV9ERVNDKHBnX2RlbGF5X2QsIFxcXCJEZWZhdWx0IGRlbGF5IGJldHdlZW4gcGFja2V0cyAobmFub3NlY29uZHMpXFxcIik7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMjptb2R1bGVfcGFyYW0ocGdfY2xvbmVfc2tiX2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMzpNT0RVTEVfUEFSTV9ERVNDKHBnX2Nsb25lX3NrYl9kLCBcXFwiRGVmYXVsdCBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBzYW1lIHBhY2tldFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzQ6bW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzU6TU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgXFxcIkVuYWJsZSBkZWJ1Z2dpbmcgb2YgcGt0Z2VuIG1vZHVsZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTozOS40NDI2Nzk1OTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMzk0MDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0J3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOlxuXG4qKlJlZ2V4IFJldmVsYXRpb24qKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCByYW4gbXkgcmVnZXggYW5kIHRob3VnaHQgaXQgd2FzIHByZXR0eSBjb21wcmVoZW5zaXZlLCBidXQgSSdtIGdldHRpbmcgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBzb21ldGhpbmcncyBzbGlwcGVkIHRocm91Z2guIERhbW4sIEkgZGlkbid0IGFjY291bnQgZm9yIGZ1bmN0aW9ucyB3aXRoIGV4cGxpY2l0IHJldHVybiB0eXBlcyEgVGhhdCdzIGEgZ2xhcmluZyBvdmVyc2lnaHQuIE15IGluaXRpYWwgZXhwcmVzc2lvbiB3YXMgbGlrZWx5IHRvbyBzaW1wbGlzdGljLCBmb2N1c2luZyBvbiBiYXNpYyBwYXR0ZXJucyB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBtb3JlIGNvbXBsZXggc3RydWN0dXJlIHRoYXQgZnVuY3Rpb25zIGludHJvZHVjZS4gVGhlIHdob2xlIHJldHVybiB0eXBlIGJ1c2luZXNzIGlzIHRoZSBrZXkgZGlmZmVyZW50aWF0b3IgaGVyZSwgaXNuJ3QgaXQ/IEdvdHRhIHJldmlzZSB0aGF0IHJlZ2V4OyBpdCBuZWVkcyB0byBiZSBmYXIgbW9yZSByb2J1c3QgaWYgSSB3YW50IHRvIGNhcHR1cmUgdGhlIGZ1bGwgc2NvcGUgb2Ygd2hhdCBJJ20gbG9va2luZyBmb3IgYW5kIG5vdCBtaXNzIHRob3NlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIEJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjQyLjg2NjYyMjI3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDI0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpfQS1aMC05XSsgW2Etel9BLVowLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTUwMD1zdGF0aWMgaW50IGRlYnVnICBfX3JlYWRfbW9zdGx5O1xcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMS1cXG5uZXQvY29yZS9wa3RnZW4uYzo1MDI6c3RhdGljIERFRklORV9NVVRFWChwa3RnZW5fdGhyZWFkX2xvY2spO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6NDIuOTE0Nzc0MzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Njc2MjE4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUGFja2V0IEdlbmVyYXRvciBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuLi4gYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5faWZfc2hvd2AgaW1tZWRpYXRlbHkganVtcCBvdXQgYXQgbWUuIEkga25vdyB0aGV5J3JlIHN0YXRpYyBmdW5jdGlvbnMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIGNhcHR1cmVkLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGlubGluZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEV4cGFuZGluZyBvbiB0aGlzLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgcGt0Z2VuX3RocmVhZF93b3JrZXJgIGFzIGEga2V5IGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6NDYuMzgyMzk5MDMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyODU3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5fdGhyZWFkX3dvcmtlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz0zNTE0PXN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzcwMi1cXG5uZXQvY29yZS9wa3RnZW4uYzozNzAzOnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3MDQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzkxOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGt0Z2VuX2NyZWF0ZV90aHJlYWQoaW50IGNwdSwgc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzkzOC1cXG5uZXQvY29yZS9wa3RnZW4uYzozOTM5OlxcdHAgPSBrdGhyZWFkX2NyZWF0ZV9vbl9jcHUocGt0Z2VuX3RocmVhZF93b3JrZXIsIHQsIGNwdSwgXFxcImtwa3RnZW5kXyVkXFxcIik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMzk0MC1cXHRpZiAoSVNfRVJSKHApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjQ2LjQyOTYzNTg2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3MzIzNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIFRocmVhZCBTYWZldHkgYW5kIFBvdGVudGlhbCBTY29wZSBJc3N1ZXMqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCB0aGUgY29kZSBJJ20gbG9va2luZyBhdC4gTGV0J3Mgc2VlIGlmIHRoYXQgYHBrdGdlbl90aHJlYWRfd29ya2VyYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gWXVwLCBpdCBpcy4gR29vZCwgdGhhdCBoZWxwcyB3aXRoIHBvdGVudGlhbCB0aHJlYWRpbmcgaXNzdWVzLCBsaW1pdGluZyBpdHMgc2NvcGUuIE5vdywgSSB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHNlZSBpZiBhbnkgYXJlIG5vdCBzdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBhbnkgb3RoZXIgZnVuY3Rpb25zIEkgbWF5IGhhdmUgbWlzc2VkLiBJJ2xsIHVzZSBhIGBncmVwYCB0byBxdWlja2x5IGZpbmQgdGhlIGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggYHZvaWQgYCwgYGludCBgLCBgc3NpemVfdGAsIGV0Yy4sIHdoaWNoIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBjb2RlYmFzZSwgb3IgYW55IG90aGVyIHR5cGUgZGVmaW5pdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCBwb3RlbnRpYWwgdGhyZWFkIHNhZmV0eSBjb25jZXJucyBvciBnbG9iYWwgc3RhdGUgYWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6NTAuMTg2OTYyMzM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEyNjI5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxzc2l6ZV90KSBbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjUwLjIzNjA5ODUwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgwOTY1MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIERlY2xhcmF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGRlY2xhcmF0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoYXQgcmV0dXJuIHR5cGUgSSdtIGV4cGVjdGluZyB0dWNrZWQgYXdheSBvbiB0aGUgKnByZXZpb3VzKiBsaW5lP1wiIEl0J3MgYSBjb21tb24gdHJpY2ssIGVzcGVjaWFsbHkgaW4gbGFuZ3VhZ2VzIHdpdGggbGVzcyByaWdpZCBzeW50YXggb3Igd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCwgbXVsdGktbGluZSBkZWNsYXJhdGlvbnMuIE15IGV5ZXMgYXJlIHNjYW5uaW5nIGJhY2t3YXJkLCBtZW50YWxseSB0cmFjaW5nIHRoZSBzdHJ1Y3R1cmUuIEl04oCZcyBhIHF1aWNrIG1lbnRhbCBjaGVjaywgYWxtb3N0IGluc3RpbmN0aXZlIGF0IHRoaXMgcG9pbnQsIGJ1dCBjcnVjaWFsIGZvciBlbnN1cmluZyBJJ20gcGFyc2luZyB0aGlzIGNvcnJlY3RseSBiZWZvcmUgSSBnbyBtdWNoIGZ1cnRoZXIuIElmIHRoZSB0eXBlIGlzbuKAmXQgaW1tZWRpYXRlbHkgb2J2aW91cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYSBzdWJ0bGV0eSBpbiB0aGUgZm9ybWF0dGluZyBvciBkZWNsYXJhdGlvbiBzdHlsZSBvZiB0aGUgY3VycmVudCBsYW5ndWFnZS4gVGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBzbyBJIGRvbid0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucyB1bnRpbCBJJ3ZlIGNvbmZpcm1lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyOTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTo1My45MTcwNjYzNTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDY5OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDExND1zdGF0aWMgdm9pZCBfX2V4aXQgcGdfY2xlYW51cCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMC1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTIxOm1vZHVsZV9pbml0KHBnX2luaXQpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjI6bW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMy1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI0Ok1PRFVMRV9BVVRIT1IoXFxcIlJvYmVydCBPbHNzb24gXFx1MDAzY3JvYmVydC5vbHNzb25AaXRzLnV1LnNlXFx1MDAzZVxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjU6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQYWNrZXQgR2VuZXJhdG9yIHRvb2xcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI2Ok1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI3Ok1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjg6bW9kdWxlX3BhcmFtKHBnX2NvdW50X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyOTpNT0RVTEVfUEFSTV9ERVNDKHBnX2NvdW50X2QsIFxcXCJEZWZhdWx0IG51bWJlciBvZiBwYWNrZXRzIHRvIGluamVjdFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzA6bW9kdWxlX3BhcmFtKHBnX2RlbGF5X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMTpNT0RVTEVfUEFSTV9ERVNDKHBnX2RlbGF5X2QsIFxcXCJEZWZhdWx0IGRlbGF5IGJldHdlZW4gcGFja2V0cyAobmFub3NlY29uZHMpXFxcIik7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMjptb2R1bGVfcGFyYW0ocGdfY2xvbmVfc2tiX2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMzpNT0RVTEVfUEFSTV9ERVNDKHBnX2Nsb25lX3NrYl9kLCBcXFwiRGVmYXVsdCBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBzYW1lIHBhY2tldFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzQ6bW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzU6TU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgXFxcIkVuYWJsZSBkZWJ1Z2dpbmcgb2YgcGt0Z2VuIG1vZHVsZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTo1My45NjYxNDE4OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2NDc2MTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZXQvY29yZS9wa3RnZW4uY2AgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3BrdGdlbi5jYC4gRmlyc3QsIEkgcXVpY2tseSBjaGVja2VkIGZvciBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGp1bXBzIG91dC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIHRoZSBlbnRyeSBwb2ludHMuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGBwa3RnZW5faWZfd3JpdGVgLCBgcGt0Z2VuX2lmX3Nob3dgLCBhbmQgYHBrdGdlbl90aHJlYWRfd29ya2VyYCBhcyB0aGUga2V5IHRhcmdldHMuXG5cbkFoLCBoZXJlJ3MgYW4gaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uLiBUaGUgZnVuY3Rpb24gYGZfcGlja2AgaGFzIGl0cyBzaWduYXR1cmUgY2hhbmdlZDogaXQgbm93IHRha2VzIGBjZmxvd3NgIGFzIGFuIGFyZ3VtZW50LiBJIGFsc28gc2VlIHRoYXQgYG1vZF9jdXJfaGVhZGVyc2AgaXMgcHJlc2VudCwgdG9vLlxuXG5Mb29raW5nIGNsb3NlciwgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgZGF0YSByYWNlIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYC4gSW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhICpidWcgZml4KiBldmVuLiBGaXhpbmcgYSBkYXRhIHJhY2UgdGhhdCBjb3VsZCBjYXVzZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBpcyBhbHdheXMgYSBoaWdoIHByaW9yaXR5LiBUaGF0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGBjZmxvd3NgIGlzIHRoZSBrZXkuXG5cbkhvbGQgb24sIEkgc2VlIHRoZSBjb25uZWN0aW9uIG5vdy4gYGNmbG93c2AgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGBmX3BpY2tgLlxuXG5gYGBjXG4tXHRcdGZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhwa3RfZGV2LVx1MDAzZWNmbG93cyk7XG4rXHRcdGZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhjZmxvd3MpO1xuYGBgXG5cbkJlZm9yZSB0aGUgZml4LCB0aGUgY29kZSByZWFkIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgZGlyZWN0bHkgbXVsdGlwbGUgdGltZXMsIGlmIHRoZSBgY2Zsb3dzYCB2YWx1ZSB3YXMgcmVhZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgaXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGNvbmN1cnJlbnRseSwgd2hpY2ggbWlnaHQgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gTm93LCB0aGUgYGNmbG93c2AgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LiBBIHZlcnkgcmVhbCBidWcgZml4ISBTbywgaXQgbG9va3MgbGlrZSBhIGdvb2Qgb25lIHRvIGhpdCB3aXRoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uZmlndXJhdGlvbnMgYXJlOiBgTkVUX1BLVEdFTmAuIEFuZCBJJ2xsIGZvY3VzIG15IHN5bWJvbGljIGV4cGxvcmF0aW9uIG9uIHRob3NlIGVudHJ5IHBvaW50IGZ1bmN0aW9uczogYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5faWZfc2hvd2AsIGFuZCBgcGt0Z2VuX3RocmVhZF93b3JrZXJgLiBJJ2xsIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWVzIGZvciB0aG9zZSBlbnRyeSBwb2ludHMgYmVmb3JlIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDEuNTMwOTA1OTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ0NTE1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5faWZfc2hvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz01NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fcHJvY19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy01NjUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6NTY2OnN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTY3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTE4NzM9c3RhdGljIGludCBwa3RnZW5faWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5uZXQvY29yZS9wa3RnZW4uYy0xODc0LXtcXG5uZXQvY29yZS9wa3RnZW4uYzoxODc1OlxcdHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwa3RnZW5faWZfc2hvdywgcGRlX2RhdGEoaW5vZGUpKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0xODc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDEuNTgyMzU4NzAzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTY2OTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipBZmZpcm1hdGlvbiBhbmQgQWN0aW9uOiBTZXR0aW5nIHRoZSBTdGFnZSoqXG5cblllcywgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycyBpcyBhcyBJIHVuZGVyc3RhbmQgaXQuIEdpdmVuIHRoaXMgY29uZmlybWF0aW9uLCBJIHdpbGwgbm93IHByb2NlZWQgdG8gZGVmaW5lIGFuZCBlc3RhYmxpc2ggdGhlIGRlc2lyZWQgcmVzdWx0cy4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJIGFtIHNldHRpbmcgdGhlIHBhcmFtZXRlcnMsIGFuZCBJIGFtIGluIGNvbnRyb2wgb2YgdGhlIG91dGNvbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM3LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjAwOjA2LjA3OTA1NTU3M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTQ1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5faWZfc2hvd1wiLFxuICAgIFwicGt0Z2VuX3RocmVhZF93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5faWZfc2hvd1wiLFxuICAgIFwicGt0Z2VuX3RocmVhZF93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDYuMTYzNjExMjQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMxNTExODI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjAwOjA2LjE2NDExODIzNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjMxNDYwNDMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZWNmNTk2MjEwMWUzNThlZGU3NzU1OGEwZTliMmNlMmVjZmJhZjRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6NTg6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcbisrKyBiL25ldC9jb3JlL3BrdGdlbi5jXG5AQCAtNTY2LDYgKzU2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbitcdHVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuIFx0a3RpbWVfdCBzdG9wcGVkO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXHR1NjQgaWRsZTtcbkBAIC01OTAsNyArNTkxLDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdFx0ICAgcGt0X2Rldi1cdTAwM2VuZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXHUwMDNlZGVsYXksXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiLCBwa3RfZGV2LVx1MDAzZW9kZXZuYW1lKTtcbiBcbi1cdHNlcV9wcmludGYoc2VxLCBcIiAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XFxuXCIsIHBrdF9kZXYtXHUwMDNlY2Zsb3dzLFxuK1x0c2VxX3ByaW50ZihzZXEsIFwiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcXG5cIiwgY2Zsb3dzLFxuIFx0XHQgICBwa3RfZGV2LVx1MDAzZWxmbG93KTtcbiBcbiBcdHNlcV9wcmludGYoc2VxLFxuQEAgLTY3NSw3ICs2NzYsNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfUEtUX0ZMQUdTOyBpKyspIHtcbiBcdFx0aWYgKGkgPT0gRkxPV19TRVFfU0hJRlQpXG4tXHRcdFx0aWYgKCFwa3RfZGV2LVx1MDAzZWNmbG93cylcbitcdFx0XHRpZiAoIWNmbG93cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpKSB7XG5AQCAtMTYzMiw4ICsxNjMzLDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAodmFsdWUgXHUwMDNlIE1BWF9DRkxPV1MpXG4gXHRcdFx0dmFsdWUgPSBNQVhfQ0ZMT1dTO1xuIFxuLVx0XHRwa3RfZGV2LVx1MDAzZWNmbG93cyA9IHZhbHVlO1xuLVx0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCJPSzogZmxvd3M9JXVcIiwgcGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuK1x0XHRXUklURV9PTkNFKHBrdF9kZXYtXHUwMDNlY2Zsb3dzLCB2YWx1ZSk7XG4rXHRcdHNwcmludGYocGdfcmVzdWx0LCBcIk9LOiBmbG93cz0ldVwiLCAodW5zaWduZWQgaW50KXZhbHVlKTtcbiBcdFx0cmV0dXJuIGNvdW50O1xuIFx0fVxuICNpZmRlZiBDT05GSUdfWEZSTVxuQEAgLTIzNzMsNyArMjM3NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZfc2Vlbihjb25zdCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgaW50IGZsb3cpXG4gXHRyZXR1cm4gISEocGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5mbGFncyBcdTAwMjYgRl9JTklUKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuK3N0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgdW5zaWduZWQgaW50IGNmbG93cylcbiB7XG4gXHRpbnQgZmxvdyA9IHBrdF9kZXYtXHUwMDNlY3VyZmw7XG4gXG5AQCAtMjM4MywxMSArMjM4NCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jb3VudCA9IDA7XG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5mbGFncyA9IDA7XG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJmbCArPSAxO1xuLVx0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWN1cmZsIFx1MDAzZT0gcGt0X2Rldi1cdTAwM2VjZmxvd3MpXG4rXHRcdFx0aWYgKHBrdF9kZXYtXHUwMDNlY3VyZmwgXHUwMDNlPSBjZmxvd3MpXG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cmZsID0gMDsgLypyZXNldCAqL1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3cocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuK1x0XHRmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coY2Zsb3dzKTtcbiBcdFx0cGt0X2Rldi1cdTAwM2VjdXJmbCA9IGZsb3c7XG4gXG4gXHRcdGlmIChwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmNvdW50IFx1MDAzZSBwa3RfZGV2LVx1MDAzZWxmbG93KSB7XG5AQCAtMjQ2MSwxMiArMjQ2MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiAgKi9cbiBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4ge1xuK1x0dW5zaWduZWQgaW50IGNmbG93cztcbiBcdF9fdTMyIGltbjtcbiBcdF9fdTMyIGlteDtcbiBcdGludCBmbG93ID0gMDtcbiBcbi1cdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cylcbi1cdFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2KTtcbitcdGNmbG93cyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cyk7XG4rXHRpZiAoY2Zsb3dzKVxuK1x0XHRmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7XG4gXG4gXHQvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi9cbiBcdGlmIChwa3RfZGV2LVx1MDAzZXNyY19tYWNfY291bnQgXHUwMDNlIDEpIHtcbkBAIC0yNTgyLDcgKzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJfc2FkZHIgPSBodG9ubCh0KTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAocGt0X2Rldi1cdTAwM2VjZmxvd3MgXHUwMDI2XHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xuK1x0XHRpZiAoY2Zsb3dzIFx1MDAyNlx1MDAyNiBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHtcbiBcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cl9kYWRkciA9IHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY3VyX2RhZGRyO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGltbiA9IG50b2hsKHBrdF9kZXYtXHUwMDNlZGFkZHJfbWluKTtcbkBAIC0yNjExLDcgKzI2MTQsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyID0gaHRvbmwodCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cykge1xuK1x0XHRcdGlmIChjZmxvd3MpIHtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgfD0gRl9JTklUO1xuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHIgPVxuIFx0XHRcdFx0ICAgIHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDYuMTY0MTE4OTk0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzE0NTYyOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4IGZvciBwa3RnZW4uYyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgZml4aW5nIGEgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIGBuZXQvY29yZS9wa3RnZW4uY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGlzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IEJ1dCBubywgaXQncyBhIGRhdGEgcmFjZSBpc3N1ZS4gVGhlIHBhdGNoIHVzZXMgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhcm91bmQgdGhlIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2UgaXQncyBwYXNzaW5nIGBjZmxvd3NgIChvciB0aGUgcmVhZC1vbmNlIHZhbHVlKSBhcyBhbiBhcmd1bWVudCBpbiBgZl9waWNrYCBhbmQgdXNpbmcgaXQgY29uc2lzdGVudGx5IGluIHBsYWNlcyBsaWtlIGBtb2RfY3VyX2hlYWRlcnNgIGFuZCBgcGt0Z2VuX2lmX3Nob3dgLlxuXG5UaGUgY29yZSBwcm9ibGVtIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgdG8gY2hhbmdlIGJldHdlZW4gdGhlIGNoZWNrIGlmIGl0IGlzIG5vbi16ZXJvLCBhbmQgaXRzIHVzZSwgd2hpY2ggY291bGQgbGVhZCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coMClgIG9yLCB3b3JzZSwgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIHZhbHVlIGNoYW5nZXMgc2lnbmlmaWNhbnRseS4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIOKAkyBhIGRhdGEgcmFjZS5cblxuSSB3ZW50IGJhY2sgYW5kIGRvdWJsZS1jaGVja2VkIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFllcCwgaXQgdXNlcyBgUkVBRF9PTkNFYCBjb25zaXN0ZW50bHkgaW4gdGhlIHJlYWRlciBmdW5jdGlvbnMuIEFuZCBgV1JJVEVfT05DRWAgZm9yIHdyaXRpbmcgaXQuIGBmX3BpY2tgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCBmcm9tIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AuIFRoaXMgcmVpbmZvcmNlcyB0aGF0IGl0IGlzIGluZGVlZCBhIGRhdGEgcmFjZS5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhpcyBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEtDU0FOIHdvdWxkIGxpa2VseSBjYXRjaCB0aGUgZGF0YSByYWNlIGRpcmVjdGx5LCBhbmQgS0FTQU4gbWlnaHQgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgdGhhdCByZXN1bHQgZnJvbSB0aGUgcmFjZS4gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMga2luZCBvZiBidWcuXG5cblNvLCBJIHdpbGwgZm9ybXVsYXRlIHRoZSBLTVNBTlJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExLCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjAwOjE4LjQ3ODY4OTMzN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXFx1MDAzZWNmbG93c2AgYnkgaW50cm9kdWNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhbm5vdGF0aW9ucyBhbmQgY2FjaGluZyB0aGUgdmFsdWUgaW4gYSBsb2NhbCB2YXJpYWJsZSBgY2Zsb3dzYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbc97l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 05:40:48 +0000 UTC FinishedAt: 2026-08-12 06:00:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_PKTGEN" ], "series_id": "4a49f77e-c3bd-499a-96f2-3508daf03bef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pktgen_if_write", "pktgen_if_show", "pktgen_thread_worker" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3Nob3cmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zIGFuZCBjYWNoaW5nIHRoZSB2YWx1ZSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBjZmxvd3NgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlY2Y1OTYyMTAxZTM1OGVkZTc3NTU4YTBlOWIyY2UyZWNmYmFmNGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNTo1ODo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BrdGdlbi5jXG5AQCAtNTY2LDYgJiM0Mzs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHtcbiBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNmbG93cyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cyk7XG4gXHRrdGltZV90IHN0b3BwZWQ7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdHU2NCBpZGxlO1xuQEAgLTU5MCw3ICYjNDM7NTkxLDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdFx0ICAgcGt0X2Rldi1cdTAwM2VuZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXHUwMDNlZGVsYXksXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiLCBwa3RfZGV2LVx1MDAzZW9kZXZuYW1lKTtcbiBcbi1cdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxcblwmIzM0OywgcGt0X2Rldi1cdTAwM2VjZmxvd3MsXG4mIzQzO1x0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XFxuXCYjMzQ7LCBjZmxvd3MsXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlbGZsb3cpO1xuIFxuIFx0c2VxX3ByaW50ZihzZXEsXG5AQCAtNjc1LDcgJiM0Mzs2NzYsNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfUEtUX0ZMQUdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoaSA9PSBGTE9XX1NFUV9TSElGVClcbi1cdFx0XHRpZiAoIXBrdF9kZXYtXHUwMDNlY2Zsb3dzKVxuJiM0MztcdFx0XHRpZiAoIWNmbG93cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpKSB7XG5AQCAtMTYzMiw4ICYjNDM7MTYzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKHZhbHVlIFx1MDAzZSBNQVhfQ0ZMT1dTKVxuIFx0XHRcdHZhbHVlID0gTUFYX0NGTE9XUztcbiBcbi1cdFx0cGt0X2Rldi1cdTAwM2VjZmxvd3MgPSB2YWx1ZTtcbi1cdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiBmbG93cz0ldVwmIzM0OywgcGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuJiM0MztcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cywgdmFsdWUpO1xuJiM0MztcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiBmbG93cz0ldVwmIzM0OywgKHVuc2lnbmVkIGludCl2YWx1ZSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC0yMzczLDcgJiM0MzsyMzc0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZl9zZWVuKGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgZmxvdylcbiBcdHJldHVybiAhIShwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIFx1MDAyNiBGX0lOSVQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgdW5zaWduZWQgaW50IGNmbG93cylcbiB7XG4gXHRpbnQgZmxvdyA9IHBrdF9kZXYtXHUwMDNlY3VyZmw7XG4gXG5AQCAtMjM4MywxMSAmIzQzOzIzODQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY291bnQgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgJiM0Mzs9IDE7XG4tXHRcdFx0aWYgKHBrdF9kZXYtXHUwMDNlY3VyZmwgXHUwMDNlPSBwa3RfZGV2LVx1MDAzZWNmbG93cylcbiYjNDM7XHRcdFx0aWYgKHBrdF9kZXYtXHUwMDNlY3VyZmwgXHUwMDNlPSBjZmxvd3MpXG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cmZsID0gMDsgLypyZXNldCAqL1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3cocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuJiM0MztcdFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KGNmbG93cyk7XG4gXHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgPSBmbG93O1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jb3VudCBcdTAwM2UgcGt0X2Rldi1cdTAwM2VsZmxvdykge1xuQEAgLTI0NjEsMTIgJiM0MzsyNDYyLDE0IEBAIHN0YXRpYyB2b2lkIHNldF9jdXJfcXVldWVfbWFwKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuICAqL1xuIHN0YXRpYyB2b2lkIG1vZF9jdXJfaGVhZGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNmbG93cztcbiBcdF9fdTMyIGltbjtcbiBcdF9fdTMyIGlteDtcbiBcdGludCBmbG93ID0gMDtcbiBcbi1cdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cylcbi1cdFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2KTtcbiYjNDM7XHRjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuJiM0MztcdGlmIChjZmxvd3MpXG4mIzQzO1x0XHRmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7XG4gXG4gXHQvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi9cbiBcdGlmIChwa3RfZGV2LVx1MDAzZXNyY19tYWNfY291bnQgXHUwMDNlIDEpIHtcbkBAIC0yNTgyLDcgJiM0MzsyNTg1LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX3NhZGRyID0gaHRvbmwodCk7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHBrdF9kZXYtXHUwMDNlY2Zsb3dzIFx1MDAyNlx1MDAyNiBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHtcbiYjNDM7XHRcdGlmIChjZmxvd3MgXHUwMDI2XHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyID0gcGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aW1uID0gbnRvaGwocGt0X2Rldi1cdTAwM2VkYWRkcl9taW4pO1xuQEAgLTI2MTEsNyAmIzQzOzI2MTQsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyID0gaHRvbmwodCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cykge1xuJiM0MztcdFx0XHRpZiAoY2Zsb3dzKSB7XG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY3VyX2RhZGRyID1cbiBcdFx0XHRcdCAgICBwa3RfZGV2LVx1MDAzZWN1cl9kYWRkcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BrdGdlbl9pZl93cml0ZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfc2hvdyYjMzQ7LAogICAgJiMzNDtwa3RnZW5fdGhyZWFkX3dvcmtlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGJ5IHVzaW5nIFJFQURfT05DRSBhbmQgV1JJVEVfT05DRS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbmNvbnNpc3RlbnQgc3RhdGUgd2hlbiBgY2Zsb3dzYCBpcyBtb2RpZmllZCBjb25jdXJyZW50bHkgdmlhIHByb2NmcyB3aGlsZSB0aGUgcGt0Z2VuIHRocmVhZCBpcyBydW5uaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGVjZjU5NjIxMDFlMzU4ZWRlNzc1NThhMGU5YjJjZTJlY2ZiYWY0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA1OjU4OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtNTY2LDYgJiM0Mzs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHsKIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKIAlrdGltZV90IHN0b3BwZWQ7CiAJdW5zaWduZWQgaW50IGk7CiAJdTY0IGlkbGU7CkBAIC01OTAsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJCSAgIHBrdF9kZXYtJmd0O25mcmFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0mZ3Q7ZGVsYXksCiAJCSAgIHBrdF9kZXYtJmd0O2Nsb25lX3NrYiwgcGt0X2Rldi0mZ3Q7b2Rldm5hbWUpOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiYjMzQ7LCBwa3RfZGV2LSZndDtjZmxvd3MsCiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XG4mIzM0OywgY2Zsb3dzLAogCQkgICBwa3RfZGV2LSZndDtsZmxvdyk7CiAKIAlzZXFfcHJpbnRmKHNlcSwKQEAgLTY3NSw3ICYjNDM7Njc2LDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9QS1RfRkxBR1M7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpID09IEZMT1dfU0VRX1NISUZUKQotCQkJaWYgKCFwa3RfZGV2LSZndDtjZmxvd3MpCiYjNDM7CQkJaWYgKCFjZmxvd3MpCiAJCQkJY29udGludWU7CiAKIAkJaWYgKHBrdF9kZXYtJmd0O2ZsYWdzICZhbXA7ICgxICZsdDsmbHQ7IGkpKSB7CkBAIC0xNjMyLDggJiM0MzsxNjMzLDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQlpZiAodmFsdWUgJmd0OyBNQVhfQ0ZMT1dTKQogCQkJdmFsdWUgPSBNQVhfQ0ZMT1dTOwogCi0JCXBrdF9kZXYtJmd0O2NmbG93cyA9IHZhbHVlOwotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgcGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzLCB2YWx1ZSk7CiYjNDM7CQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgKHVuc2lnbmVkIGludCl2YWx1ZSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiAjaWZkZWYgQ09ORklHX1hGUk0KQEAgLTIzNzMsNyAmIzQzOzIzNzQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmX3NlZW4oY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KQogCXJldHVybiAhIShwa3RfZGV2LSZndDtmbG93c1tmbG93XS5mbGFncyAmYW1wOyBGX0lOSVQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCB1bnNpZ25lZCBpbnQgY2Zsb3dzKQogewogCWludCBmbG93ID0gcGt0X2Rldi0mZ3Q7Y3VyZmw7CiAKQEAgLTIzODMsMTEgJiM0MzsyMzg0LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmNvdW50ID0gMDsKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzID0gMDsKIAkJCXBrdF9kZXYtJmd0O2N1cmZsICYjNDM7PSAxOwotCQkJaWYgKHBrdF9kZXYtJmd0O2N1cmZsICZndDs9IHBrdF9kZXYtJmd0O2NmbG93cykKJiM0MzsJCQlpZiAocGt0X2Rldi0mZ3Q7Y3VyZmwgJmd0Oz0gY2Zsb3dzKQogCQkJCXBrdF9kZXYtJmd0O2N1cmZsID0gMDsgLypyZXNldCAqLwogCQl9CiAJfSBlbHNlIHsKLQkJZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CQlmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coY2Zsb3dzKTsKIAkJcGt0X2Rldi0mZ3Q7Y3VyZmwgPSBmbG93OwogCiAJCWlmIChwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jb3VudCAmZ3Q7IHBrdF9kZXYtJmd0O2xmbG93KSB7CkBAIC0yNDYxLDEyICYjNDM7MjQ2MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKICAqLwogc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewomIzQzOwl1bnNpZ25lZCBpbnQgY2Zsb3dzOwogCV9fdTMyIGltbjsKIAlfX3UzMiBpbXg7CiAJaW50IGZsb3cgPSAwOwogCi0JaWYgKHBrdF9kZXYtJmd0O2NmbG93cykKLQkJZmxvdyA9IGZfcGljayhwa3RfZGV2KTsKJiM0MzsJY2Zsb3dzID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CWlmIChjZmxvd3MpCiYjNDM7CQlmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7CiAKIAkvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi8KIAlpZiAocGt0X2Rldi0mZ3Q7c3JjX21hY19jb3VudCAmZ3Q7IDEpIHsKQEAgLTI1ODIsNyAmIzQzOzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiAJCQlwa3RfZGV2LSZndDtjdXJfc2FkZHIgPSBodG9ubCh0KTsKIAkJfQogCi0JCWlmIChwa3RfZGV2LSZndDtjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKJiM0MzsJCWlmIChjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKIAkJCXBrdF9kZXYtJmd0O2N1cl9kYWRkciA9IHBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmN1cl9kYWRkcjsKIAkJfSBlbHNlIHsKIAkJCWltbiA9IG50b2hsKHBrdF9kZXYtJmd0O2RhZGRyX21pbik7CkBAIC0yNjExLDcgJiM0MzsyNjE0LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCQkJCQlwa3RfZGV2LSZndDtjdXJfZGFkZHIgPSBodG9ubCh0KTsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocGt0X2Rldi0mZ3Q7Y2Zsb3dzKSB7CiYjNDM7CQkJaWYgKGNmbG93cykgewogCQkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDsKIAkJCQlwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jdXJfZGFkZHIgPQogCQkJCSAgICBwa3RfZGV2LSZndDtjdXJfZGFkZHI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBwa3RnZW4uYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0b3VjaGluZyBgbmV0L2NvcmUvcGt0Z2VuLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHJhY2UgZml4LCBjaGFuZ2luZyBhY2Nlc3NlcyB0byBgcGt0X2Rldi0mZ3Q7Y2Zsb3dzYCB0byB1c2UgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8KCkluaXRpYWxseSwgbXkgdGhvdWdodCB3YXMsICYjMzQ7aXQmIzM5O3MganVzdCBhIGJ1ZyBmaXgsJiMzNDsgc28gcHJvYmFibHkgbm90LiBJdCYjMzk7cyBub3QgKmFkZGluZyogbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBCdXQgdGhlbiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGluc3RydWN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IGxheSBvdXQgYSBzZXJpZXMgb2YgdGVzdHMuCgpGaXJzdCBJIHJ1biB0aHJvdWdoIHRoZSBleGNsdXNpb25zLiBEb2N1bWVudGF0aW9uPyBOb3BlLiBMb2dnaW5nIG9yIGRlY29yYXRpdmUgY2hhbmdlcz8gTm9wZS4gTnVtZXJpYyBjb25zdGFudCBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGZsb3c/IE5vcGUuIFVucmVhY2hhYmxlIGNvZGU/IE5vcGUuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZT8gTm9wZS4gVGVhcmRvd24gY2FsbGJhY2tzPyBOb3BlLgoKU28sIGRvZXMgaXQgZnVuY3Rpb25hbGx5IGNoYW5nZSB0aGUga2VybmVsPyBXZWxsLCBpdCYjMzk7cyAqdGVjaG5pY2FsbHkqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3csIGJ5IHByZXZlbnRpbmcgdGhlIGNvbXBpbGVyIGZyb20gbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IHRoZSB2b2xhdGlsZSB2YXJpYWJsZS4gSXQmIzM5O3MgYWJvdXQgZGF0YSBpbnRlZ3JpdHkuIEJ1dCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBidWcgZml4ZXMgYXJlIHdvcnRoIGZ1enppbmcuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIGlzIHRoZSBhZmZlY3RlZCBjb2RlIHJlYWNoYWJsZT8gVGhhdCYjMzk7cyB0aGUga2V5LiBRdWljayBjaGVjaywgYW5kIHllcywgYC9wcm9jL25ldC9wa3RnZW4vYCBpcyBhIHRoaW5nLiBTbywgaXQmIzM5O3MgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljISBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgaGVyZTogaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCB0aGVuIHdlIHNob3VsZCBmdXp6LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvcGt0Z2VuLmNgIHRvIGJlIHN1cmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgYHBrdGdlbl9pZl9zaG93YCwgYHBrdGdlbl9pZl93cml0ZWAsIGFuZCBgbW9kX2N1cl9oZWFkZXJzYC4KCkJhc2VkIG9uIGFsbCBvZiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgd29ydGggZnV6emluZy4gSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9pZl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTk1Nj1zdGF0aWMgX191MzIgcGt0Z2VuX3JlYWRfZmxhZyhjb25zdCBjaGFyICpmLCBib29sICpkaXNhYmxlKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTk4NC1cbm5ldC9jb3JlL3BrdGdlbi5jOjk4NTpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy05ODYtXHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTE4Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5faWZfcHJvY19vcHMgPSB7XG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMTg4MS1cdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2Vlayxcbm5ldC9jb3JlL3BrdGdlbi5jOjE4ODI6XHQucHJvY193cml0ZVx0PSBwa3RnZW5faWZfd3JpdGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xODgzLVx0LnByb2NfcmVsZWFzZVx0PSBzaW5nbGVfcmVsZWFzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBhbmQgSGVhZGVyIE1vZGlmaWNhdGlvbioqCgpSaWdodCwgYHBrdGdlbl9pZl93cml0ZWAuLi4gdGhhdCYjMzk7cyBhIGBwcm9jX3dyaXRlYCBjYWxsYmFjaywgc28gaXQmIzM5O3MgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyBgbW9kX2N1cl9oZWFkZXJzYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcGt0Z2VuX3htaXRgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgbGlrZWx5IGR1cmluZyB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBCdXQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBHb3R0YSBkZWx2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSBgbW9kX2N1cl9oZWFkZXJzYCBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRob3NlIGZ1bmN0aW9ucyBjb2xsYWJvcmF0ZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kX2N1cl9oZWFkZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9MjQzOT1zdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yNDYyLSAqL1xubmV0L2NvcmUvcGt0Z2VuLmM6MjQ2MzpzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG5uZXQvY29yZS9wa3RnZW4uYy0yNDY0LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0yOTMwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yOTU0LVx0ICovXG5uZXQvY29yZS9wa3RnZW4uYzoyOTU1Olx0bW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMjk1Ni1cdHF1ZXVlX21hcCA9IHBrdF9kZXYtXHUwMDNlY3VyX3F1ZXVlX21hcDtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zMDU4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMDgyLVx0ICovXG5uZXQvY29yZS9wa3RnZW4uYzozMDgzOlx0bW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzA4NC1cdHF1ZXVlX21hcCA9IHBrdF9kZXYtXHUwMDNlY3VyX3F1ZXVlX21hcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgbW9kX2N1cl9oZWFkZXJzYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBzZWVpbmcgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgZmlsbF9wYWNrZXRfaXB2NGAgYW5kIGBmaWxsX3BhY2tldF9pcHY2YC4gVGhhdCBzdWdnZXN0cyBhIGNlbnRyYWwgcm9sZSBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBhY2tldCBoZWFkZXJzLCBubyBkb3VidC4gVGhlIGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyB0aGF0IGFsbG93IHRoZSBwYWNrZXQgZ2VuZXJhdGlvbiBzeXN0ZW0gdG8gcnVuLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBXaGF0IHZhcmlhYmxlcyBvciBmbGFncyBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIGBwa3RnZW5gPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHNlZSB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgcGFja2V0IGdlbmVyYXRpb24uIEtub3dpbmcgKnRoYXQqIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBmdW5jdGlvbiB3b3Jrcy4gVGhpcyBpbml0aWFsIHRyYWNpbmcgd2lsbCBhbGxvdyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBiZWhhdmlvdXIgb2YgYG1vZF9jdXJfaGVhZGVyc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1BLVEdFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLCBpdCYjMzk7cyBoaWdobHkgcHJvYmFibGUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEhvd2V2ZXIsIHNvbWV0aW1lcyB0aGUgbW9yZSBmaW5lLWdyYWluZWQgb3IgY29yZSBuZXR3b3JrIHNldHRpbmdzIHJlc2lkZSBkZWVwZXIuIFNvLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGluIHRoZSBzYW1lIHNlY3Rpb24sIEkgc2hvdWxkIGFsc28gY2hlY2sgYG5ldC9jb3JlL01ha2VmaWxlYC4gVGhlIG1ha2VmaWxlcyBmcmVxdWVudGx5IGNvbnRhaW4gaW5jbHVkZSBkaXJlY3RpdmVzIHRoYXQgcG9pbnQgdG8gS2NvbmZpZyBmaWxlcyBvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gR29pbmcgc3RyYWlnaHQgdG8gdGhlIG1ha2VmaWxlIHdvdWxkIGJlIGEgZ29vZCBzZWNvbmQgY2hlY2suIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmVjdGl2ZSBwYXRoIEkgY2FuIHRha2UgYXQgdGhlIG1vbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBuZXQtcHJvY2ZzLm9cbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSAmIzQzOz0gcGt0Z2VuLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRmluZGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgTkVUX1BLVEdFTmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgTkVUX1BLVEdFTmAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNvbW1vbiB0YXNrIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlYmFzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBhIHByZXByb2Nlc3NvciBtYWNybywgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgZnVuY3Rpb24gb3Igc3RydWN0dXJlIG5hbWUgdGhhdCYjMzk7cyBiZWVuIGNvbnNpc3RlbnRseSB1c2VkIHRocm91Z2hvdXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBhIHRvb2wgdGhhdCYjMzk7cyBkZXNpZ25lZCBmb3IgZXhhY3RseSB0aGlzLiBJIGNvdWxkIHVzZSBncmVwLCBhY2ssIHJpcGdyZXAgKHJnKSwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBwcm9qZWN0LiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgY2FzZSBzZW5zaXRpdml0eSBhbmQgd2lsZGNhcmRzIGluIG15IHNlYXJjaCBzdHJpbmcsIGlmIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIHByb2plY3QgSSBhbSB3b3JraW5nIG9uLiBJdCYjMzk7cyBhbHNvIGxpa2VseSBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggc2V2ZXJhbCBwb3RlbnRpYWwgcGF0aHM6IHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5jbHVkZSBwYXRocywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlIHZhcmlvdXMgcmVzdWx0cyBhbmQgYXNzZXNzIHRoZSBtb3N0IGxpa2VseSBsb2NhdGlvbiBvZiB0aGUgYWN0dWFsIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfUEtUR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBORVRfUEtUR0VOYCBtb2R1bGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgc28gYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRvd25zdHJlYW0gYW5kIHVwc3RyZWFtIGxpbmthZ2VzIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYSBjaGFuZ2UsIGV2YWx1YXRpbmcgYSBuZXcgaW50ZWdyYXRpb24sIG9yIHRyb3VibGVzaG9vdGluZyBhbiBpc3N1ZS4gSeKAmWxsIHN0YXJ0IGJ5IGxpc3Rpbmcgb3V0IHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMg4oCTIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVuY2llcy4gT2Z0ZW4gdGhlIGNhc2NhZGluZyBpbXBhY3Qgb24gdGhvc2UgZGVlcGVyIGVsZW1lbnRzIGFyZSB0aGUgc291cmNlIG9mIG1vc3Qgc3lzdGVtIGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBtb2R1bGUgcmVsaWVzIG9uIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlicmFyaWVzLCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMsIGtlcm5lbCBpbnRlcmZhY2VzLCBvciBldmVuIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgZXh0ZXJuYWwgdG9vbHMuIFdoYXQgdmVyc2lvbnMgb2YgdGhlIGRlcGVuZGVudCBsaWJzIGFyZSBuZWVkZWQ/IElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgZGVwZW5kZW50IGxpYnMgaW5zdGFsbGVkLCBJIG5lZWQgdG8ga25vdyB3aGljaCBpcyBjYWxsZWQ/IFRoZSB2ZXJzaW9uaW5nIGlzIHZpdGFsLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHNoYXJlZCByZXNvdXJjZXMgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gVGhpcyBkZXBlbmRlbmN5IGF1ZGl0IGlzIHN0ZXAgb25lLCBiZWZvcmUgSSBiZWdpbiB0aGUgYWN0dWFsIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NjpcdGNvbmZpZyBORVRfUEtUR0VOXG4gMzg3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuIDM4ODpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG4gMzg5Olx0XHRoZWxwXG4gMzkwOlx0XHQgIFRoaXMgbW9kdWxlIHdpbGwgaW5qZWN0IHByZWNvbmZpZ3VyZWQgcGFja2V0cywgYXQgYSBjb25maWd1cmFibGVcbiAzOTE6XHRcdCAgcmF0ZSwgb3V0IG9mIGEgZ2l2ZW4gaW50ZXJmYWNlLiAgSXQgaXMgdXNlZCBmb3IgbmV0d29yayBpbnRlcmZhY2VcbiAzOTI6XHRcdCAgc3RyZXNzIHRlc3RpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiAgSWYgeW91IGRvbiYjMzk7dCB1bmRlcnN0YW5kXG4gMzkzOlx0XHQgIHdoYXQgd2FzIGp1c3Qgc2FpZCwgeW91IGRvbiYjMzk7dCBuZWVkIGl0OiBzYXkgTi5cbiAzOTQ6XHRcbiAzOTU6XHRcdCAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIGNhbiBiZSBmb3VuZFxuIDM5NjpcdFx0ICBhdCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4ucnN0XHUwMDNlLlxuIDM5NzpcdFxuIDM5ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMzk5Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwa3RnZW4uXG4gNDAwOlx0XG4gNDAxOlx0Y29uZmlnIE5FVF9EUk9QX01PTklUT1JcbiA0MDI6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBuZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2VcJiMzNDtcbiA0MDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgVFJBQ0VQT0lOVFNcbiA0MDQ6XHRcdGhlbHBcbiA0MDU6XHRcdCAgVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGFsZXJ0aW5nIHNlcnZpY2UgdG8gdXNlcnNwYWNlIGluIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBQYWNrZXQgR2VuZXJhdGlvbiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlc3NlbnRpYWwgY29tcG9uZW50cyBmb3IgcGFja2V0IGdlbmVyYXRpb24gd2l0aGluIHRoaXMgc3lzdGVtLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBgSU5FVGAgYW5kIGBQUk9DX0ZTYCwgYm90aCBvZiB3aGljaCBhcmUgcHJldHR5IHN0YW5kYXJkLCBzbyB0aGF0JiMzOTtzIGdvb2QuIFRoYXQgaW1wbGllcyBJIGNhbiBlbmFibGUgdGhlIHBhY2tldCBnZW5lcmF0b3Igd2l0aCB0aGUgYE5FVF9QS1RHRU5gIGNvbmZpZyBvcHRpb24uCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9pZl9zaG93YCwgYGZpbGxfcGFja2V0X2lwdjRgLCBhbmQgYGZpbGxfcGFja2V0X2lwdjZgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGVzIHRvIGRyaXZlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEhtbSwgSSBub3RpY2UgYGZpbGxfcGFja2V0X2lwdjRgIGFuZCBgZmlsbF9wYWNrZXRfaXB2NmAgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGV5JiMzOTtyZSBpbmxpbmVkOyB0aGF0IGNvdWxkIHNpZ25pZmljYW50bHkgaW1wYWN0IHBlcmZvcm1hbmNlIGFuZCBob3cgSSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVtLiBJbmxpbmluZyBvciBsYWNrIHRoZXJlb2YgaW5mbHVlbmNlcyBvcHRpbWl6YXRpb24gcG90ZW50aWFsLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgZm9yIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfcGFja2V0X2lwdjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yOTAzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI5MjktXG5uZXQvY29yZS9wa3RnZW4uYzoyOTMwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXHRcdFx0XHRcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTMxODg9c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMTkzLVx0ZWxzZVxubmV0L2NvcmUvcGt0Z2VuLmM6MzE5NDpcdFx0cmV0dXJuIGZpbGxfcGFja2V0X2lwdjQob2RldiwgcGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy0zMTk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBUcmFuc21pc3Npb24gRmxvdyoqCgpBbHJpZ2h0LCBzbyBgZmlsbF9wYWNrZXRgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHBrdGdlbl94bWl0YC4gVGhhdCYjMzk7cyBhIGtleSBpbnRlcmFjdGlvbiByaWdodCB0aGVyZS4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgcGFja2V0IGdlbmVyYXRpb24gYW5kIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGlzIG1vZHVsYXJpemVkLCB3aGljaCBpcyBnb29kIHNvZnR3YXJlIGRlc2lnbi4gYHBrdGdlbl94bWl0YCBpcyBwcm9iYWJseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc2NoZWR1bGluZyBvciBhY3R1YWxseSBzZW5kaW5nIHBhY2tldHMsIGFuZCBgZmlsbF9wYWNrZXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3Rpbmcgb3IgcG9wdWxhdGluZyB0aGUgcGFja2V0IGRhdGEgaXRzZWxmLgoKTm93LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIG5ldHdvcmsgc3RhY2ssIGBwa3RnZW5feG1pdGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIG1vcmUsIHN1Y2ggYXMgaW50ZXJmYWNpbmcgd2l0aCBhIE5JQyBkcml2ZXIgb3IgcHJlcGFyaW5nIHRoZSBwYWNrZXQgaW4gc29tZSBwcmUtdHJhbnNtaXNzaW9uIGZvcm1hdCwgYW5kIGBmaWxsX3BhY2tldGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHBhY2tldCBoZWFkZXJzLCBkYXRhIG9yIGJvdGguIFRoaW5raW5nIHRocm91Z2ggdGhlIGRldGFpbHMsIEkmIzM5O20gbm93IG1ha2luZyBpbmZlcmVuY2VzIGFib3V0IHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGluIHVzZSBoZXJlLiBgZmlsbF9wYWNrZXRgJiMzOTtzIGlucHV0IGlzIGxpa2VseSBhIHBvaW50ZXIgdG8gYSBwYWNrZXQgYnVmZmVyLCBwb3RlbnRpYWxseSBhbiBhZGRyZXNzLCBhbmQgaXQmIzM5O3MgcHJvYmFibHkgZmlsbGluZyBpdCBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdG8gaXQsIHBlcmhhcHMgdGhyb3VnaCBhIGdsb2JhbCBjb250ZXh0IG9yIHZpYSB0aGUgYXJndW1lbnRzIG9mIGBwa3RnZW5feG1pdGAuIEkmIzM5O20gc3RhcnRpbmcgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBhdCBwbGF5OyBpcyB0aGlzIHVzZXItc3BhY2UsIGtlcm5lbC1zcGFjZSwgb3IgYSBoeWJyaWQgbW9kZWw/IFRoYXQgd2lsbCBpbmZsdWVuY2UgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhY2Nlc3MgcGF0dGVybnMgc2lnbmlmaWNhbnRseS4gVGhlcmUgY291bGQgYmUgRE1BIGludm9sdmVkLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0yOTAzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGt0Z2VuX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTI5MjktXG5uZXQvY29yZS9wa3RnZW4uYzoyOTMwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXHRcdFx0XHRcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMwNTctXG5uZXQvY29yZS9wa3RnZW4uYzozMDU4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbm5ldC9jb3JlL3BrdGdlbi5jLTMwNTktXHRcdFx0XHRcdHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMxODctXG5uZXQvY29yZS9wa3RnZW4uYzozMTg4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXG5uZXQvY29yZS9wa3RnZW4uYy0zMTg5LVx0XHRcdFx0ICAgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzE5MS1cdGlmIChwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX0lQVjYpXG5uZXQvY29yZS9wa3RnZW4uYzozMTkyOlx0XHRyZXR1cm4gZmlsbF9wYWNrZXRfaXB2NihvZGV2LCBwa3RfZGV2KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTMtXHRlbHNlXG5uZXQvY29yZS9wa3RnZW4uYzozMTk0Olx0XHRyZXR1cm4gZmlsbF9wYWNrZXRfaXB2NChvZGV2LCBwa3RfZGV2KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTUtfVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM1MTQ9c3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzU1My1cbm5ldC9jb3JlL3BrdGdlbi5jOjM1NTQ6XHRcdHBrdF9kZXYtXHUwMDNlc2tiID0gZmlsbF9wYWNrZXQob2RldiwgcGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy0zNTU1LVx0XHRpZiAocGt0X2Rldi1cdTAwM2Vza2IgPT0gTlVMTCkge1xubmV0L2NvcmUvcGt0Z2VuLmM6MzU1NjpcdFx0XHRwcl9lcnIoXCYjMzQ7RVJST1I6IGNvdWxkbiYjMzk7dCBhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXRcXG5cJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmMtMzU1Ny1cdFx0XHRzY2hlZHVsZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBFeGFtaW5pbmcgdGhlIFBhY2tldCBHZW5lcmF0b3IgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGFja2V0IGdlbmVyYXRvciBjb2RlLiBgcGt0Z2VuX3htaXRgLi4uIHRoYXQmIzM5O3MgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGxvb3AsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgcGt0Z2VuX3RocmVhZF93b3JrZXJgICpjYWxscyogYHBrdGdlbl94bWl0YC4gUmlnaHQsIGBwa3RnZW5fdGhyZWFkX3dvcmtlcmAgaXMgbGlrZWx5IHRoZSBrdGhyZWFkIHJlc3BvbnNpYmxlIGZvciBhbGwgb2YgdGhpcywgc28gaXQmIzM5O3MgcHJvYmFibHkgdGhlIGJldHRlciBmb2N1cyBzeW1ib2wuIExldCBtZSBqdXN0IG1ha2UgYSBub3RlIG9mIHRoYXQuCgpIb2xkIG9uLCBJIHNlZSBgcGt0Z2VuX2lmX3dyaXRlYCBub3cuIElzbiYjMzk7dCB0aGF0IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgY29udHJvbCBmbG93cz8gQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGl0LiBIbW0sIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHByb2Nfb3BzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXTigJlzIHByb2JhYmx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJIHdvbmRlciBpZiBpdOKAmXMgaW5saW5lZC4uLiBub3BlLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcHJvYyBpbnRlcmZhY2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJvYyBpbnRlcmZhY2UsIGFuZCBhbnkgb3RoZXIgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSoqCgpBbHJpZ2h0LCBzbyB0aGUgbGlua2VyIGlzbiYjMzk7dCBjb21wbGFpbmluZyBhYm91dCBtaXNzaW5nIHN5bWJvbHMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyB0aGUgaXNzdWUgKnByb2JhYmx5KiBpc24mIzM5O3QgYSBzdHJhaWdodGZvcndhcmQgZXh0ZXJuYWwgcmVmZXJlbmNlIHRoYXQgSSYjMzk7dmUgYm90Y2hlZC4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhlbXNlbHZlcy4gU2luY2UgdGhlcmUgYXJlIG5vIGV4cG9ydGVkIHN5bWJvbHMsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBhbWlzcyB0aGVyZS4gSSB3aWxsIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBleHRlcm5hbGx5IHZpc2libGUsIGJ1dCBmb3Igc29tZSByZWFzb24sIGFyZSBub3QuIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVpciBsaW5rYWdlLCB0aGVpciBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBsb2NhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHZpc2liaWxpdHkgbW9kaWZpZXJzIG9yIGNvbXBpbGVyIGZsYWdzLiBJIHdpbGwgYWxzbyBjaGVjayBhbnkgcmVsYXRlZCBoZWFkZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfQS1aMC05XSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9NDExND1zdGF0aWMgdm9pZCBfX2V4aXQgcGdfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjAtXG5uZXQvY29yZS9wa3RnZW4uYzo0MTIxOm1vZHVsZV9pbml0KHBnX2luaXQpO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMjptb2R1bGVfZXhpdChwZ19jbGVhbnVwKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTQxMjMtXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI0Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7Um9iZXJ0IE9sc3NvbiBcdTAwM2Nyb2JlcnQub2xzc29uQGl0cy51dS5zZVx1MDAzZVwmIzM0Oyk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTI1Ok1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIHRvb2xcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNjpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNzpNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjg6bW9kdWxlX3BhcmFtKHBnX2NvdW50X2QsIGludCwgMCk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTI5Ok1PRFVMRV9QQVJNX0RFU0MocGdfY291bnRfZCwgXCYjMzQ7RGVmYXVsdCBudW1iZXIgb2YgcGFja2V0cyB0byBpbmplY3RcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMDptb2R1bGVfcGFyYW0ocGdfZGVsYXlfZCwgaW50LCAwKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzE6TU9EVUxFX1BBUk1fREVTQyhwZ19kZWxheV9kLCBcJiMzNDtEZWZhdWx0IGRlbGF5IGJldHdlZW4gcGFja2V0cyAobmFub3NlY29uZHMpXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzI6bW9kdWxlX3BhcmFtKHBnX2Nsb25lX3NrYl9kLCBpbnQsIDApO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMzpNT0RVTEVfUEFSTV9ERVNDKHBnX2Nsb25lX3NrYl9kLCBcJiMzNDtEZWZhdWx0IG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHNhbWUgcGFja2V0XCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzQ6bW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEzNTpNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCBcJiMzNDtFbmFibGUgZGVidWdnaW5nIG9mIHBrdGdlbiBtb2R1bGVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjIwCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOgoKKipSZWdleCBSZXZlbGF0aW9uKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHJhbiBteSByZWdleCBhbmQgdGhvdWdodCBpdCB3YXMgcHJldHR5IGNvbXByZWhlbnNpdmUsIGJ1dCBJJiMzOTttIGdldHRpbmcgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBzb21ldGhpbmcmIzM5O3Mgc2xpcHBlZCB0aHJvdWdoLiBEYW1uLCBJIGRpZG4mIzM5O3QgYWNjb3VudCBmb3IgZnVuY3Rpb25zIHdpdGggZXhwbGljaXQgcmV0dXJuIHR5cGVzISBUaGF0JiMzOTtzIGEgZ2xhcmluZyBvdmVyc2lnaHQuIE15IGluaXRpYWwgZXhwcmVzc2lvbiB3YXMgbGlrZWx5IHRvbyBzaW1wbGlzdGljLCBmb2N1c2luZyBvbiBiYXNpYyBwYXR0ZXJucyB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBtb3JlIGNvbXBsZXggc3RydWN0dXJlIHRoYXQgZnVuY3Rpb25zIGludHJvZHVjZS4gVGhlIHdob2xlIHJldHVybiB0eXBlIGJ1c2luZXNzIGlzIHRoZSBrZXkgZGlmZmVyZW50aWF0b3IgaGVyZSwgaXNuJiMzOTt0IGl0PyBHb3R0YSByZXZpc2UgdGhhdCByZWdleDsgaXQgbmVlZHMgdG8gYmUgZmFyIG1vcmUgcm9idXN0IGlmIEkgd2FudCB0byBjYXB0dXJlIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBhbmQgbm90IG1pc3MgdGhvc2UgZnVuY3Rpb24gc2lnbmF0dXJlcy4gQmFjayB0byB0aGUgZHJhd2luZyBib2FyZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2Etel9BLVowLTldJiM0MzsgW2Etel9BLVowLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz01MDA9c3RhdGljIGludCBkZWJ1ZyAgX19yZWFkX21vc3RseTtcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMS1cbm5ldC9jb3JlL3BrdGdlbi5jOjUwMjpzdGF0aWMgREVGSU5FX01VVEVYKHBrdGdlbl90aHJlYWRfbG9jayk7XG5uZXQvY29yZS9wa3RnZW4uYy01MDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFBhY2tldCBHZW5lcmF0b3IgRnVuY3Rpb25zKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuLi4gYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5faWZfc2hvd2AgaW1tZWRpYXRlbHkganVtcCBvdXQgYXQgbWUuIEkga25vdyB0aGV5JiMzOTtyZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyBjYXB0dXJlZCwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEV4cGFuZGluZyBvbiB0aGlzLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgcGt0Z2VuX3RocmVhZF93b3JrZXJgIGFzIGEga2V5IGZ1bmN0aW9uIHRvIGV2YWx1YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa3RnZW5fdGhyZWFkX3dvcmtlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTM1MTQ9c3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzcwMi1cbm5ldC9jb3JlL3BrdGdlbi5jOjM3MDM6c3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpXG5uZXQvY29yZS9wa3RnZW4uYy0zNzA0LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zOTE4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBwa3RnZW5fY3JlYXRlX3RocmVhZChpbnQgY3B1LCBzdHJ1Y3QgcGt0Z2VuX25ldCAqcG4pXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtMzkzOC1cbm5ldC9jb3JlL3BrdGdlbi5jOjM5Mzk6XHRwID0ga3RocmVhZF9jcmVhdGVfb25fY3B1KHBrdGdlbl90aHJlYWRfd29ya2VyLCB0LCBjcHUsIFwmIzM0O2twa3RnZW5kXyVkXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTM5NDAtXHRpZiAoSVNfRVJSKHApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODMKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIFRocmVhZCBTYWZldHkgYW5kIFBvdGVudGlhbCBTY29wZSBJc3N1ZXMqKgoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgYHBrdGdlbl90aHJlYWRfd29ya2VyYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gWXVwLCBpdCBpcy4gR29vZCwgdGhhdCBoZWxwcyB3aXRoIHBvdGVudGlhbCB0aHJlYWRpbmcgaXNzdWVzLCBsaW1pdGluZyBpdHMgc2NvcGUuIE5vdywgSSB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHNlZSBpZiBhbnkgYXJlIG5vdCBzdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBhbnkgb3RoZXIgZnVuY3Rpb25zIEkgbWF5IGhhdmUgbWlzc2VkLiBJJiMzOTtsbCB1c2UgYSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGB2b2lkIGAsIGBpbnQgYCwgYHNzaXplX3RgLCBldGMuLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgY29kZWJhc2UsIG9yIGFueSBvdGhlciB0eXBlIGRlZmluaXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgcG90ZW50aWFsIHRocmVhZCBzYWZldHkgY29uY2VybnMgb3IgZ2xvYmFsIHN0YXRlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fHNzaXplX3QpIFthLXpfQS1aMC05XSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgRGVjbGFyYXRpb24qKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBkZWNsYXJhdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGF0IHJldHVybiB0eXBlIEkmIzM5O20gZXhwZWN0aW5nIHR1Y2tlZCBhd2F5IG9uIHRoZSAqcHJldmlvdXMqIGxpbmU/JiMzNDsgSXQmIzM5O3MgYSBjb21tb24gdHJpY2ssIGVzcGVjaWFsbHkgaW4gbGFuZ3VhZ2VzIHdpdGggbGVzcyByaWdpZCBzeW50YXggb3Igd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCwgbXVsdGktbGluZSBkZWNsYXJhdGlvbnMuIE15IGV5ZXMgYXJlIHNjYW5uaW5nIGJhY2t3YXJkLCBtZW50YWxseSB0cmFjaW5nIHRoZSBzdHJ1Y3R1cmUuIEl04oCZcyBhIHF1aWNrIG1lbnRhbCBjaGVjaywgYWxtb3N0IGluc3RpbmN0aXZlIGF0IHRoaXMgcG9pbnQsIGJ1dCBjcnVjaWFsIGZvciBlbnN1cmluZyBJJiMzOTttIHBhcnNpbmcgdGhpcyBjb3JyZWN0bHkgYmVmb3JlIEkgZ28gbXVjaCBmdXJ0aGVyLiBJZiB0aGUgdHlwZSBpc27igJl0IGltbWVkaWF0ZWx5IG9idmlvdXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIHN1YnRsZXR5IGluIHRoZSBmb3JtYXR0aW5nIG9yIGRlY2xhcmF0aW9uIHN0eWxlIG9mIHRoZSBjdXJyZW50IGxhbmd1YWdlLiBUaGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMsIHNvIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucyB1bnRpbCBJJiMzOTt2ZSBjb25maXJtZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BrdGdlbi5jPTQxMTQ9c3RhdGljIHZvaWQgX19leGl0IHBnX2NsZWFudXAodm9pZClcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy00MTIwLVxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyMTptb2R1bGVfaW5pdChwZ19pbml0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjI6bW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XG5uZXQvY29yZS9wa3RnZW4uYy00MTIzLVxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNDpNT0RVTEVfQVVUSE9SKFwmIzM0O1JvYmVydCBPbHNzb24gXHUwMDNjcm9iZXJ0Lm9sc3NvbkBpdHMudXUuc2VcdTAwM2VcJiMzNDspO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyNTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UGFja2V0IEdlbmVyYXRvciB0b29sXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjY6TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjc6TU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTI4Om1vZHVsZV9wYXJhbShwZ19jb3VudF9kLCBpbnQsIDApO1xubmV0L2NvcmUvcGt0Z2VuLmM6NDEyOTpNT0RVTEVfUEFSTV9ERVNDKHBnX2NvdW50X2QsIFwmIzM0O0RlZmF1bHQgbnVtYmVyIG9mIHBhY2tldHMgdG8gaW5qZWN0XCYjMzQ7KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzA6bW9kdWxlX3BhcmFtKHBnX2RlbGF5X2QsIGludCwgMCk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTMxOk1PRFVMRV9QQVJNX0RFU0MocGdfZGVsYXlfZCwgXCYjMzQ7RGVmYXVsdCBkZWxheSBiZXR3ZWVuIHBhY2tldHMgKG5hbm9zZWNvbmRzKVwmIzM0Oyk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTMyOm1vZHVsZV9wYXJhbShwZ19jbG9uZV9za2JfZCwgaW50LCAwKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzM6TU9EVUxFX1BBUk1fREVTQyhwZ19jbG9uZV9za2JfZCwgXCYjMzQ7RGVmYXVsdCBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBzYW1lIHBhY2tldFwmIzM0Oyk7XG5uZXQvY29yZS9wa3RnZW4uYzo0MTM0Om1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzU6TU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgXCYjMzQ7RW5hYmxlIGRlYnVnZ2luZyBvZiBwa3RnZW4gbW9kdWxlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmV0L2NvcmUvcGt0Z2VuLmNgIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3BrdGdlbi5jYC4gRmlyc3QsIEkgcXVpY2tseSBjaGVja2VkIGZvciBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGp1bXBzIG91dC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIHRoZSBlbnRyeSBwb2ludHMuIEkmIzM5O3ZlIGFscmVhZHkgaWRlbnRpZmllZCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9pZl9zaG93YCwgYW5kIGBwa3RnZW5fdGhyZWFkX3dvcmtlcmAgYXMgdGhlIGtleSB0YXJnZXRzLgoKQWgsIGhlcmUmIzM5O3MgYW4gaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uLiBUaGUgZnVuY3Rpb24gYGZfcGlja2AgaGFzIGl0cyBzaWduYXR1cmUgY2hhbmdlZDogaXQgbm93IHRha2VzIGBjZmxvd3NgIGFzIGFuIGFyZ3VtZW50LiBJIGFsc28gc2VlIHRoYXQgYG1vZF9jdXJfaGVhZGVyc2AgaXMgcHJlc2VudCwgdG9vLgoKTG9va2luZyBjbG9zZXIsIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIGRhdGEgcmFjZSBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIG9uIGBwa3RfZGV2LSZndDtjZmxvd3NgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBJcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgKmJ1ZyBmaXgqIGV2ZW4uIEZpeGluZyBhIGRhdGEgcmFjZSB0aGF0IGNvdWxkIGNhdXNlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGFsd2F5cyBhIGhpZ2ggcHJpb3JpdHkuIFRoYXQgY29uY3VycmVudCBhY2Nlc3MgdG8gYGNmbG93c2AgaXMgdGhlIGtleS4KCkhvbGQgb24sIEkgc2VlIHRoZSBjb25uZWN0aW9uIG5vdy4gYGNmbG93c2AgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGBmX3BpY2tgLgoKYGBgYwotCQlmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3cocGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKJiM0MzsJCWZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhjZmxvd3MpOwpgYGAKCkJlZm9yZSB0aGUgZml4LCB0aGUgY29kZSByZWFkIGBwa3RfZGV2LSZndDtjZmxvd3NgIGRpcmVjdGx5IG11bHRpcGxlIHRpbWVzLCBpZiB0aGUgYGNmbG93c2AgdmFsdWUgd2FzIHJlYWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGl0IG1pZ2h0IGhhdmUgY2hhbmdlZCBjb25jdXJyZW50bHksIHdoaWNoIG1pZ2h0IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIE5vdywgdGhlIGBjZmxvd3NgIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4gQSB2ZXJ5IHJlYWwgYnVnIGZpeCEgU28sIGl0IGxvb2tzIGxpa2UgYSBnb29kIG9uZSB0byBoaXQgd2l0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBhcmU6IGBORVRfUEtUR0VOYC4gQW5kIEkmIzM5O2xsIGZvY3VzIG15IHN5bWJvbGljIGV4cGxvcmF0aW9uIG9uIHRob3NlIGVudHJ5IHBvaW50IGZ1bmN0aW9uczogYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5faWZfc2hvd2AsIGFuZCBgcGt0Z2VuX3RocmVhZF93b3JrZXJgLiBJJiMzOTtsbCBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lcyBmb3IgdGhvc2UgZW50cnkgcG9pbnRzIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdGdlbl9pZl9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9NTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTU2NS1cbm5ldC9jb3JlL3BrdGdlbi5jOjU2NjpzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvcGt0Z2VuLmMtNTY3LXtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0xODczPXN0YXRpYyBpbnQgcGt0Z2VuX2lmX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5uZXQvY29yZS9wa3RnZW4uYy0xODc0LXtcbm5ldC9jb3JlL3BrdGdlbi5jOjE4NzU6XHRyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcGt0Z2VuX2lmX3Nob3csIHBkZV9kYXRhKGlub2RlKSk7XG5uZXQvY29yZS9wa3RnZW4uYy0xODc2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMzcKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKkFmZmlybWF0aW9uIGFuZCBBY3Rpb246IFNldHRpbmcgdGhlIFN0YWdlKioKClllcywgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycyBpcyBhcyBJIHVuZGVyc3RhbmQgaXQuIEdpdmVuIHRoaXMgY29uZmlybWF0aW9uLCBJIHdpbGwgbm93IHByb2NlZWQgdG8gZGVmaW5lIGFuZCBlc3RhYmxpc2ggdGhlIGRlc2lyZWQgcmVzdWx0cy4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJIGFtIHNldHRpbmcgdGhlIHBhcmFtZXRlcnMsIGFuZCBJIGFtIGluIGNvbnRyb2wgb2YgdGhlIG91dGNvbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfUEtUR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl9pZl9zaG93JiMzNDssCiAgICAmIzM0O3BrdGdlbl90aHJlYWRfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgYnkgdXNpbmcgUkVBRF9PTkNFIGFuZCBXUklURV9PTkNFLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGluY29uc2lzdGVudCBzdGF0ZSB3aGVuIGBjZmxvd3NgIGlzIG1vZGlmaWVkIGNvbmN1cnJlbnRseSB2aWEgcHJvY2ZzIHdoaWxlIHRoZSBwa3RnZW4gdGhyZWFkIGlzIHJ1bm5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3Nob3cmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3RocmVhZF93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zIGFuZCBjYWNoaW5nIHRoZSB2YWx1ZSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBjZmxvd3NgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGVjZjU5NjIxMDFlMzU4ZWRlNzc1NThhMGU5YjJjZTJlY2ZiYWY0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA1OjU4OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtNTY2LDYgJiM0Mzs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHsKIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKIAlrdGltZV90IHN0b3BwZWQ7CiAJdW5zaWduZWQgaW50IGk7CiAJdTY0IGlkbGU7CkBAIC01OTAsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJCSAgIHBrdF9kZXYtJmd0O25mcmFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0mZ3Q7ZGVsYXksCiAJCSAgIHBrdF9kZXYtJmd0O2Nsb25lX3NrYiwgcGt0X2Rldi0mZ3Q7b2Rldm5hbWUpOwogCi0Jc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiYjMzQ7LCBwa3RfZGV2LSZndDtjZmxvd3MsCiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XG4mIzM0OywgY2Zsb3dzLAogCQkgICBwa3RfZGV2LSZndDtsZmxvdyk7CiAKIAlzZXFfcHJpbnRmKHNlcSwKQEAgLTY3NSw3ICYjNDM7Njc2LDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9QS1RfRkxBR1M7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpID09IEZMT1dfU0VRX1NISUZUKQotCQkJaWYgKCFwa3RfZGV2LSZndDtjZmxvd3MpCiYjNDM7CQkJaWYgKCFjZmxvd3MpCiAJCQkJY29udGludWU7CiAKIAkJaWYgKHBrdF9kZXYtJmd0O2ZsYWdzICZhbXA7ICgxICZsdDsmbHQ7IGkpKSB7CkBAIC0xNjMyLDggJiM0MzsxNjMzLDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQlpZiAodmFsdWUgJmd0OyBNQVhfQ0ZMT1dTKQogCQkJdmFsdWUgPSBNQVhfQ0ZMT1dTOwogCi0JCXBrdF9kZXYtJmd0O2NmbG93cyA9IHZhbHVlOwotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgcGt0X2Rldi0mZ3Q7Y2Zsb3dzKTsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7Y2Zsb3dzLCB2YWx1ZSk7CiYjNDM7CQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogZmxvd3M9JXUmIzM0OywgKHVuc2lnbmVkIGludCl2YWx1ZSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiAjaWZkZWYgQ09ORklHX1hGUk0KQEAgLTIzNzMsNyAmIzQzOzIzNzQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmX3NlZW4oY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KQogCXJldHVybiAhIShwa3RfZGV2LSZndDtmbG93c1tmbG93XS5mbGFncyAmYW1wOyBGX0lOSVQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCB1bnNpZ25lZCBpbnQgY2Zsb3dzKQogewogCWludCBmbG93ID0gcGt0X2Rldi0mZ3Q7Y3VyZmw7CiAKQEAgLTIzODMsMTEgJiM0MzsyMzg0LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmNvdW50ID0gMDsKIAkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzID0gMDsKIAkJCXBrdF9kZXYtJmd0O2N1cmZsICYjNDM7PSAxOwotCQkJaWYgKHBrdF9kZXYtJmd0O2N1cmZsICZndDs9IHBrdF9kZXYtJmd0O2NmbG93cykKJiM0MzsJCQlpZiAocGt0X2Rldi0mZ3Q7Y3VyZmwgJmd0Oz0gY2Zsb3dzKQogCQkJCXBrdF9kZXYtJmd0O2N1cmZsID0gMDsgLypyZXNldCAqLwogCQl9CiAJfSBlbHNlIHsKLQkJZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CQlmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coY2Zsb3dzKTsKIAkJcGt0X2Rldi0mZ3Q7Y3VyZmwgPSBmbG93OwogCiAJCWlmIChwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jb3VudCAmZ3Q7IHBrdF9kZXYtJmd0O2xmbG93KSB7CkBAIC0yNDYxLDEyICYjNDM7MjQ2MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKICAqLwogc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewomIzQzOwl1bnNpZ25lZCBpbnQgY2Zsb3dzOwogCV9fdTMyIGltbjsKIAlfX3UzMiBpbXg7CiAJaW50IGZsb3cgPSAwOwogCi0JaWYgKHBrdF9kZXYtJmd0O2NmbG93cykKLQkJZmxvdyA9IGZfcGljayhwa3RfZGV2KTsKJiM0MzsJY2Zsb3dzID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2NmbG93cyk7CiYjNDM7CWlmIChjZmxvd3MpCiYjNDM7CQlmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7CiAKIAkvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi8KIAlpZiAocGt0X2Rldi0mZ3Q7c3JjX21hY19jb3VudCAmZ3Q7IDEpIHsKQEAgLTI1ODIsNyAmIzQzOzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiAJCQlwa3RfZGV2LSZndDtjdXJfc2FkZHIgPSBodG9ubCh0KTsKIAkJfQogCi0JCWlmIChwa3RfZGV2LSZndDtjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKJiM0MzsJCWlmIChjZmxvd3MgJmFtcDsmYW1wOyBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHsKIAkJCXBrdF9kZXYtJmd0O2N1cl9kYWRkciA9IHBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmN1cl9kYWRkcjsKIAkJfSBlbHNlIHsKIAkJCWltbiA9IG50b2hsKHBrdF9kZXYtJmd0O2RhZGRyX21pbik7CkBAIC0yNjExLDcgJiM0MzsyNjE0LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCQkJCQlwa3RfZGV2LSZndDtjdXJfZGFkZHIgPSBodG9ubCh0KTsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocGt0X2Rldi0mZ3Q7Y2Zsb3dzKSB7CiYjNDM7CQkJaWYgKGNmbG93cykgewogCQkJCXBrdF9kZXYtJmd0O2Zsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDsKIAkJCQlwa3RfZGV2LSZndDtmbG93c1tmbG93XS5jdXJfZGFkZHIgPQogCQkJCSAgICBwa3RfZGV2LSZndDtjdXJfZGFkZHI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjExCgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDkyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmN1cnJlbmN5IEZpeCBmb3IgcGt0Z2VuLmMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gYG5ldC9jb3JlL3BrdGdlbi5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYHBrdF9kZXYtJmd0O2NmbG93c2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGlzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IEJ1dCBubywgaXQmIzM5O3MgYSBkYXRhIHJhY2UgaXNzdWUuIFRoZSBwYXRjaCB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYXJvdW5kIHRoZSBgcGt0X2Rldi0mZ3Q7Y2Zsb3dzYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwYXNzaW5nIGBjZmxvd3NgIChvciB0aGUgcmVhZC1vbmNlIHZhbHVlKSBhcyBhbiBhcmd1bWVudCBpbiBgZl9waWNrYCBhbmQgdXNpbmcgaXQgY29uc2lzdGVudGx5IGluIHBsYWNlcyBsaWtlIGBtb2RfY3VyX2hlYWRlcnNgIGFuZCBgcGt0Z2VuX2lmX3Nob3dgLgoKVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGUgcG90ZW50aWFsIGZvciBgcGt0X2Rldi0mZ3Q7Y2Zsb3dzYCB0byBjaGFuZ2UgYmV0d2VlbiB0aGUgY2hlY2sgaWYgaXQgaXMgbm9uLXplcm8sIGFuZCBpdHMgdXNlLCB3aGljaCBjb3VsZCBsZWFkIHRvIGBnZXRfcmFuZG9tX3UzMl9iZWxvdygwKWAgb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpZiB0aGUgdmFsdWUgY2hhbmdlcyBzaWduaWZpY2FudGx5LiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcg4oCTIGEgZGF0YSByYWNlLgoKSSB3ZW50IGJhY2sgYW5kIGRvdWJsZS1jaGVja2VkIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFllcCwgaXQgdXNlcyBgUkVBRF9PTkNFYCBjb25zaXN0ZW50bHkgaW4gdGhlIHJlYWRlciBmdW5jdGlvbnMuIEFuZCBgV1JJVEVfT05DRWAgZm9yIHdyaXRpbmcgaXQuIGBmX3BpY2tgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCBmcm9tIGBwa3RfZGV2LSZndDtjZmxvd3NgLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCBpdCBpcyBpbmRlZWQgYSBkYXRhIHJhY2UuCgpUaGVyZWZvcmUsIEtNU0FOIGlzICpub3QqIG5lZWRlZCBoZXJlLiBUaGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gS0NTQU4gd291bGQgbGlrZWx5IGNhdGNoIHRoZSBkYXRhIHJhY2UgZGlyZWN0bHksIGFuZCBLQVNBTiBtaWdodCBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB0aGF0IHJlc3VsdCBmcm9tIHRoZSByYWNlLiBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMga2luZCBvZiBidWcuCgpTbywgSSB3aWxsIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmc6IFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtJmd0O2NmbG93c2AgYnkgaW50cm9kdWNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhbm5vdGF0aW9ucyBhbmQgY2FjaGluZyB0aGUgdmFsdWUgaW4gYSBsb2NhbCB2YXJpYWJsZSBgY2Zsb3dzYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBwa3RfZGV2LSZndDtjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zIGFuZCBjYWNoaW5nIHRoZSB2YWx1ZSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBjZmxvd3NgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1ODo1Mi45MTcxNjA2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTYxNTgyOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9QS1RHRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgICBcInBrdGdlbl9pZl9zaG93XCIsXG4gICAgXCJwa3RnZW5fdGhyZWFkX3dvcmtlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTg6NTIuOTE3MTY2NDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1Mjg3OTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBlY2Y1OTYyMTAxZTM1OGVkZTc3NTU4YTBlOWIyY2UyZWNmYmFmNGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6NTg6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IGVlNjRmMzAxMjMyMTAuLmUxNGJiOWE0OGE4ZjkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xcbkBAIC01NjYsNiArNTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fcHJvY19vcHMgPSB7XFxuIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuK1xcdHVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKTtcXG4gXFx0a3RpbWVfdCBzdG9wcGVkO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4gXFx0dTY0IGlkbGU7XFxuQEAgLTU5MCw3ICs1OTEsNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRcXHQgICBwa3RfZGV2LVxcdTAwM2VuZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXFx1MDAzZWRlbGF5LFxcbiBcXHRcXHQgICBwa3RfZGV2LVxcdTAwM2VjbG9uZV9za2IsIHBrdF9kZXYtXFx1MDAzZW9kZXZuYW1lKTtcXG4gXFxuLVxcdHNlcV9wcmludGYoc2VxLCBcXFwiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcXFxcblxcXCIsIHBrdF9kZXYtXFx1MDAzZWNmbG93cyxcXG4rXFx0c2VxX3ByaW50ZihzZXEsIFxcXCIgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxcXFxuXFxcIiwgY2Zsb3dzLFxcbiBcXHRcXHQgICBwa3RfZGV2LVxcdTAwM2VsZmxvdyk7XFxuIFxcbiBcXHRzZXFfcHJpbnRmKHNlcSxcXG5AQCAtNjc1LDcgKzY3Niw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfUEtUX0ZMQUdTOyBpKyspIHtcXG4gXFx0XFx0aWYgKGkgPT0gRkxPV19TRVFfU0hJRlQpXFxuLVxcdFxcdFxcdGlmICghcGt0X2Rldi1cXHUwMDNlY2Zsb3dzKVxcbitcXHRcXHRcXHRpZiAoIWNmbG93cylcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyBpKSkge1xcbkBAIC0xNjMyLDggKzE2MzMsOCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGlmICh2YWx1ZSBcXHUwMDNlIE1BWF9DRkxPV1MpXFxuIFxcdFxcdFxcdHZhbHVlID0gTUFYX0NGTE9XUztcXG4gXFxuLVxcdFxcdHBrdF9kZXYtXFx1MDAzZWNmbG93cyA9IHZhbHVlO1xcbi1cXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIk9LOiBmbG93cz0ldVxcXCIsIHBrdF9kZXYtXFx1MDAzZWNmbG93cyk7XFxuK1xcdFxcdFdSSVRFX09OQ0UocGt0X2Rldi1cXHUwMDNlY2Zsb3dzLCB2YWx1ZSk7XFxuK1xcdFxcdHNwcmludGYocGdfcmVzdWx0LCBcXFwiT0s6IGZsb3dzPSV1XFxcIiwgKHVuc2lnbmVkIGludCl2YWx1ZSk7XFxuIFxcdFxcdHJldHVybiBjb3VudDtcXG4gXFx0fVxcbiAjaWZkZWYgQ09ORklHX1hGUk1cXG5AQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZl9zZWVuKGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgZmxvdylcXG4gXFx0cmV0dXJuICEhKHBrdF9kZXYtXFx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIFxcdTAwMjYgRl9JTklUKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbitzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIHVuc2lnbmVkIGludCBjZmxvd3MpXFxuIHtcXG4gXFx0aW50IGZsb3cgPSBwa3RfZGV2LVxcdTAwM2VjdXJmbDtcXG4gXFxuQEAgLTIzODMsMTEgKzIzODQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiBcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VmbG93c1tmbG93XS5jb3VudCA9IDA7XFxuIFxcdFxcdFxcdHBrdF9kZXYtXFx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzID0gMDtcXG4gXFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlY3VyZmwgKz0gMTtcXG4tXFx0XFx0XFx0aWYgKHBrdF9kZXYtXFx1MDAzZWN1cmZsIFxcdTAwM2U9IHBrdF9kZXYtXFx1MDAzZWNmbG93cylcXG4rXFx0XFx0XFx0aWYgKHBrdF9kZXYtXFx1MDAzZWN1cmZsIFxcdTAwM2U9IGNmbG93cylcXG4gXFx0XFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlY3VyZmwgPSAwOyAvKnJlc2V0ICovXFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtXFx1MDAzZWNmbG93cyk7XFxuK1xcdFxcdGZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhjZmxvd3MpO1xcbiBcXHRcXHRwa3RfZGV2LVxcdTAwM2VjdXJmbCA9IGZsb3c7XFxuIFxcbiBcXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlZmxvd3NbZmxvd10uY291bnQgXFx1MDAzZSBwa3RfZGV2LVxcdTAwM2VsZmxvdykge1xcbkBAIC0yNDYxLDEyICsyNDYyLDE0IEBAIHN0YXRpYyB2b2lkIHNldF9jdXJfcXVldWVfbWFwKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGludCBjZmxvd3M7XFxuIFxcdF9fdTMyIGltbjtcXG4gXFx0X191MzIgaW14O1xcbiBcXHRpbnQgZmxvdyA9IDA7XFxuIFxcbi1cXHRpZiAocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKVxcbi1cXHRcXHRmbG93ID0gZl9waWNrKHBrdF9kZXYpO1xcbitcXHRjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKTtcXG4rXFx0aWYgKGNmbG93cylcXG4rXFx0XFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2LCBjZmxvd3MpO1xcbiBcXG4gXFx0LyogIERlYWwgd2l0aCBzb3VyY2UgTUFDICovXFxuIFxcdGlmIChwa3RfZGV2LVxcdTAwM2VzcmNfbWFjX2NvdW50IFxcdTAwM2UgMSkge1xcbkBAIC0yNTgyLDcgKzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIFxcdFxcdFxcdHBrdF9kZXYtXFx1MDAzZWN1cl9zYWRkciA9IGh0b25sKHQpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlY2Zsb3dzIFxcdTAwMjZcXHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xcbitcXHRcXHRpZiAoY2Zsb3dzIFxcdTAwMjZcXHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xcbiBcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VjdXJfZGFkZHIgPSBwa3RfZGV2LVxcdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHI7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGltbiA9IG50b2hsKHBrdF9kZXYtXFx1MDAzZWRhZGRyX21pbik7XFxuQEAgLTI2MTEsNyArMjYxNCw3IEBAIHN0YXRpYyB2b2lkIG1vZF9jdXJfaGVhZGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFx0XFx0XFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlY3VyX2RhZGRyID0gaHRvbmwodCk7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAocGt0X2Rldi1cXHUwMDNlY2Zsb3dzKSB7XFxuK1xcdFxcdFxcdGlmIChjZmxvd3MpIHtcXG4gXFx0XFx0XFx0XFx0cGt0X2Rldi1cXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgfD0gRl9JTklUO1xcbiBcXHRcXHRcXHRcXHRwa3RfZGV2LVxcdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHIgPVxcbiBcXHRcXHRcXHRcXHQgICAgcGt0X2Rldi1cXHUwMDNlY3VyX2RhZGRyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1ODo1My4yNzA4Mzg5MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3Mjg5Mjc2ODcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5faWZfc2hvd1wiLFxuICAgIFwicGt0Z2VuX3RocmVhZF93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGVjZjU5NjIxMDFlMzU4ZWRlNzc1NThhMGU5YjJjZTJlY2ZiYWY0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjU4OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xuaW5kZXggZWU2NGYzMDEyMzIxMC4uZTE0YmI5YTQ4YThmOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTU2Niw2ICs1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9wcm9jX29wcyA9IHtcbiBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHR1bnNpZ25lZCBpbnQgY2Zsb3dzID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNlY2Zsb3dzKTtcbiBcdGt0aW1lX3Qgc3RvcHBlZDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0dTY0IGlkbGU7XG5AQCAtNTkwLDcgKzU5MSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlbmZyYWdzLCAodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LVx1MDAzZWRlbGF5LFxuIFx0XHQgICBwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiwgcGt0X2Rldi1cdTAwM2VvZGV2bmFtZSk7XG4gXG4tXHRzZXFfcHJpbnRmKHNlcSwgXCIgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxcblwiLCBwa3RfZGV2LVx1MDAzZWNmbG93cyxcbitcdHNlcV9wcmludGYoc2VxLCBcIiAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XFxuXCIsIGNmbG93cyxcbiBcdFx0ICAgcGt0X2Rldi1cdTAwM2VsZmxvdyk7XG4gXG4gXHRzZXFfcHJpbnRmKHNlcSxcbkBAIC02NzUsNyArNjc2LDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1BLVF9GTEFHUzsgaSsrKSB7XG4gXHRcdGlmIChpID09IEZMT1dfU0VRX1NISUZUKVxuLVx0XHRcdGlmICghcGt0X2Rldi1cdTAwM2VjZmxvd3MpXG4rXHRcdFx0aWYgKCFjZmxvd3MpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKHBrdF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKSkge1xuQEAgLTE2MzIsOCArMTYzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKHZhbHVlIFx1MDAzZSBNQVhfQ0ZMT1dTKVxuIFx0XHRcdHZhbHVlID0gTUFYX0NGTE9XUztcbiBcbi1cdFx0cGt0X2Rldi1cdTAwM2VjZmxvd3MgPSB2YWx1ZTtcbi1cdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwiT0s6IGZsb3dzPSV1XCIsIHBrdF9kZXYtXHUwMDNlY2Zsb3dzKTtcbitcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cywgdmFsdWUpO1xuK1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCJPSzogZmxvd3M9JXVcIiwgKHVuc2lnbmVkIGludCl2YWx1ZSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmX3NlZW4oY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KVxuIFx0cmV0dXJuICEhKHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgXHUwMDI2IEZfSU5JVCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbitzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIHVuc2lnbmVkIGludCBjZmxvd3MpXG4ge1xuIFx0aW50IGZsb3cgPSBwa3RfZGV2LVx1MDAzZWN1cmZsO1xuIFxuQEAgLTIzODMsMTEgKzIzODQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY291bnQgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgPSAwO1xuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgKz0gMTtcbi1cdFx0XHRpZiAocGt0X2Rldi1cdTAwM2VjdXJmbCBcdTAwM2U9IHBrdF9kZXYtXHUwMDNlY2Zsb3dzKVxuK1x0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWN1cmZsIFx1MDAzZT0gY2Zsb3dzKVxuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJmbCA9IDA7IC8qcmVzZXQgKi9cbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KHBrdF9kZXYtXHUwMDNlY2Zsb3dzKTtcbitcdFx0ZmxvdyA9IGdldF9yYW5kb21fdTMyX2JlbG93KGNmbG93cyk7XG4gXHRcdHBrdF9kZXYtXHUwMDNlY3VyZmwgPSBmbG93O1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jb3VudCBcdTAwM2UgcGt0X2Rldi1cdTAwM2VsZmxvdykge1xuQEAgLTI0NjEsMTIgKzI0NjIsMTQgQEAgc3RhdGljIHZvaWQgc2V0X2N1cl9xdWV1ZV9tYXAoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gICovXG4gc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIHtcbitcdHVuc2lnbmVkIGludCBjZmxvd3M7XG4gXHRfX3UzMiBpbW47XG4gXHRfX3UzMiBpbXg7XG4gXHRpbnQgZmxvdyA9IDA7XG4gXG4tXHRpZiAocGt0X2Rldi1cdTAwM2VjZmxvd3MpXG4tXHRcdGZsb3cgPSBmX3BpY2socGt0X2Rldik7XG4rXHRjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuK1x0aWYgKGNmbG93cylcbitcdFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2LCBjZmxvd3MpO1xuIFxuIFx0LyogIERlYWwgd2l0aCBzb3VyY2UgTUFDICovXG4gXHRpZiAocGt0X2Rldi1cdTAwM2VzcmNfbWFjX2NvdW50IFx1MDAzZSAxKSB7XG5AQCAtMjU4Miw3ICsyNTg1LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX3NhZGRyID0gaHRvbmwodCk7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHBrdF9kZXYtXHUwMDNlY2Zsb3dzIFx1MDAyNlx1MDAyNiBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHtcbitcdFx0aWYgKGNmbG93cyBcdTAwMjZcdTAwMjYgZl9zZWVuKHBrdF9kZXYsIGZsb3cpKSB7XG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJfZGFkZHIgPSBwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmN1cl9kYWRkcjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbW4gPSBudG9obChwa3RfZGV2LVx1MDAzZWRhZGRyX21pbik7XG5AQCAtMjYxMSw3ICsyNjE0LDcgQEAgc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHRcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cl9kYWRkciA9IGh0b25sKHQpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0XHRpZiAocGt0X2Rldi1cdTAwM2VjZmxvd3MpIHtcbitcdFx0XHRpZiAoY2Zsb3dzKSB7XG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmZsYWdzIHw9IEZfSU5JVDtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY3VyX2RhZGRyID1cbiBcdFx0XHRcdCAgICBwa3RfZGV2LVx1MDAzZWN1cl9kYWRkcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU4OjUzLjI3MDg0MDQ4M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5ODQ4MjQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBwa3RnZW4uYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdG91Y2hpbmcgYG5ldC9jb3JlL3BrdGdlbi5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHJhY2UgZml4LCBjaGFuZ2luZyBhY2Nlc3NlcyB0byBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIHRvIHVzZSBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nP1xuXG5Jbml0aWFsbHksIG15IHRob3VnaHQgd2FzLCBcIml0J3MganVzdCBhIGJ1ZyBmaXgsXCIgc28gcHJvYmFibHkgbm90LiBJdCdzIG5vdCAqYWRkaW5nKiBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEJ1dCB0aGVuIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGNsZWFybHkgbGF5IG91dCBhIHNlcmllcyBvZiB0ZXN0cy5cblxuRmlyc3QgSSBydW4gdGhyb3VnaCB0aGUgZXhjbHVzaW9ucy4gRG9jdW1lbnRhdGlvbj8gTm9wZS4gTG9nZ2luZyBvciBkZWNvcmF0aXZlIGNoYW5nZXM/IE5vcGUuIE51bWVyaWMgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIGZsb3c/IE5vcGUuIFVucmVhY2hhYmxlIGNvZGU/IE5vcGUuIFZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZT8gTm9wZS4gVGVhcmRvd24gY2FsbGJhY2tzPyBOb3BlLlxuXG5TbywgZG9lcyBpdCBmdW5jdGlvbmFsbHkgY2hhbmdlIHRoZSBrZXJuZWw/IFdlbGwsIGl0J3MgKnRlY2huaWNhbGx5KiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93LCBieSBwcmV2ZW50aW5nIHRoZSBjb21waWxlciBmcm9tIG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdm9sYXRpbGUgdmFyaWFibGUuIEl0J3MgYWJvdXQgZGF0YSBpbnRlZ3JpdHkuIEJ1dCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBidWcgZml4ZXMgYXJlIHdvcnRoIGZ1enppbmcuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgdGhlIGFmZmVjdGVkIGNvZGUgcmVhY2hhYmxlPyBUaGF0J3MgdGhlIGtleS4gUXVpY2sgY2hlY2ssIGFuZCB5ZXMsIGAvcHJvYy9uZXQvcGt0Z2VuL2AgaXMgYSB0aGluZy4gU28sIGl0J3MgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljISBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgaGVyZTogaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCB0aGVuIHdlIHNob3VsZCBmdXp6LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3BrdGdlbi5jYCB0byBiZSBzdXJlLiBJJ20gdGhpbmtpbmcgb2YgYHBrdGdlbl9pZl9zaG93YCwgYHBrdGdlbl9pZl93cml0ZWAsIGFuZCBgbW9kX2N1cl9oZWFkZXJzYC5cblxuQmFzZWQgb24gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjAxLjI1NTY2NjgyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUwNzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9OTU2PXN0YXRpYyBfX3UzMiBwa3RnZW5fcmVhZF9mbGFnKGNvbnN0IGNoYXIgKmYsIGJvb2wgKmRpc2FibGUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy05ODQtXFxubmV0L2NvcmUvcGt0Z2VuLmM6OTg1OnN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5uZXQvY29yZS9wa3RnZW4uYy05ODYtXFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MTg3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBrdGdlbl9pZl9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTE4ODEtXFx0LnByb2NfbHNlZWtcXHQ9IHNlcV9sc2VlayxcXG5uZXQvY29yZS9wa3RnZW4uYzoxODgyOlxcdC5wcm9jX3dyaXRlXFx0PSBwa3RnZW5faWZfd3JpdGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTg4My1cXHQucHJvY19yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6MDEuMzAxMTgxMjU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NjU3ODMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBhbmQgSGVhZGVyIE1vZGlmaWNhdGlvbioqXG5cblJpZ2h0LCBgcGt0Z2VuX2lmX3dyaXRlYC4uLiB0aGF0J3MgYSBgcHJvY193cml0ZWAgY2FsbGJhY2ssIHNvIGl0J3MgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyBgbW9kX2N1cl9oZWFkZXJzYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBwa3RnZW5feG1pdGAgb3Igc29tZXRoaW5nIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBsaWtlbHkgZHVyaW5nIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIEJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIEdvdHRhIGRlbHZlIGRlZXBlciBhbmQgc2VlIHdoZXJlIGBtb2RfY3VyX2hlYWRlcnNgIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhvc2UgZnVuY3Rpb25zIGNvbGxhYm9yYXRlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjA0Ljk5Nzc2MTgwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5MDcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RfY3VyX2hlYWRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MjQzOT1zdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI0NjItICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6MjQ2MzpzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMjQ2NC17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0yOTMwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqb2RldixcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5NTQtXFx0ICovXFxubmV0L2NvcmUvcGt0Z2VuLmM6Mjk1NTpcXHRtb2RfY3VyX2hlYWRlcnMocGt0X2Rldik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjk1Ni1cXHRxdWV1ZV9tYXAgPSBwa3RfZGV2LVxcdTAwM2VjdXJfcXVldWVfbWFwO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzA1OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMDgyLVxcdCAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jOjMwODM6XFx0bW9kX2N1cl9oZWFkZXJzKHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMwODQtXFx0cXVldWVfbWFwID0gcGt0X2Rldi1cXHUwMDNlY3VyX3F1ZXVlX21hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6MDUuMDQ2MjU3MDgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MTgxMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQYWNrZXQgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBtb2RfY3VyX2hlYWRlcnNgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIHNlZWluZyBhcyBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGZpbGxfcGFja2V0X2lwdjRgIGFuZCBgZmlsbF9wYWNrZXRfaXB2NmAuIFRoYXQgc3VnZ2VzdHMgYSBjZW50cmFsIHJvbGUgaW4gY29uc3RydWN0aW5nIHRoZSBwYWNrZXQgaGVhZGVycywgbm8gZG91YnQuIFRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgdGhhdCBhbGxvdyB0aGUgcGFja2V0IGdlbmVyYXRpb24gc3lzdGVtIHRvIHJ1bi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gV2hhdCB2YXJpYWJsZXMgb3IgZmxhZ3MgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciBgcGt0Z2VuYD8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHNlZSB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgcGFja2V0IGdlbmVyYXRpb24uIEtub3dpbmcgKnRoYXQqIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBmdW5jdGlvbiB3b3Jrcy4gVGhpcyBpbml0aWFsIHRyYWNpbmcgd2lsbCBhbGxvdyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBiZWhhdmlvdXIgb2YgYG1vZF9jdXJfaGVhZGVyc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTowOS4xOTgwNzM5NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyOTE4MDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfUEtUR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjA5LjI0NjM3OTA5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDk3MzkwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSB0aGlua2luZyBpdDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiB3aGF0IEknbSBkZWFsaW5nIHdpdGgsIGl0J3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEhvd2V2ZXIsIHNvbWV0aW1lcyB0aGUgbW9yZSBmaW5lLWdyYWluZWQgb3IgY29yZSBuZXR3b3JrIHNldHRpbmdzIHJlc2lkZSBkZWVwZXIuIFNvLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0J3MgaW4gdGhlIHNhbWUgc2VjdGlvbiwgSSBzaG91bGQgYWxzbyBjaGVjayBgbmV0L2NvcmUvTWFrZWZpbGVgLiBUaGUgbWFrZWZpbGVzIGZyZXF1ZW50bHkgY29udGFpbiBpbmNsdWRlIGRpcmVjdGl2ZXMgdGhhdCBwb2ludCB0byBLY29uZmlnIGZpbGVzIG9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBHb2luZyBzdHJhaWdodCB0byB0aGUgbWFrZWZpbGUgd291bGQgYmUgYSBnb29kIHNlY29uZCBjaGVjay4gSXQncyB0aGUgbW9zdCBlZmZlY3RpdmUgcGF0aCBJIGNhbiB0YWtlIGF0IHRoZSBtb21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToxNC44NTYxMjEwNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDc3MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdGdlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gbmV0LXByb2Nmcy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICs9IHBrdGdlbi5vXFxubmV0L2NvcmUvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX05FVFBPTEwpICs9IG5ldHBvbGwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToxNC45MDM2MDM4OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MzA0MTc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkZpbmRpbmcgdGhlIERlZmluaXRpb24gb2YgYE5FVF9QS1RHRU5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgTkVUX1BLVEdFTmAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNvbW1vbiB0YXNrIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlYmFzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGEgcHJlcHJvY2Vzc29yIG1hY3JvLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBmdW5jdGlvbiBvciBzdHJ1Y3R1cmUgbmFtZSB0aGF0J3MgYmVlbiBjb25zaXN0ZW50bHkgdXNlZCB0aHJvdWdob3V0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYSB0b29sIHRoYXQncyBkZXNpZ25lZCBmb3IgZXhhY3RseSB0aGlzLiBJIGNvdWxkIHVzZSBncmVwLCBhY2ssIHJpcGdyZXAgKHJnKSwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBwcm9qZWN0LiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBjYXNlIHNlbnNpdGl2aXR5IGFuZCB3aWxkY2FyZHMgaW4gbXkgc2VhcmNoIHN0cmluZywgaWYgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBwcm9qZWN0IEkgYW0gd29ya2luZyBvbi4gSXQncyBhbHNvIGxpa2VseSBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggc2V2ZXJhbCBwb3RlbnRpYWwgcGF0aHM6IHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5jbHVkZSBwYXRocywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGRlcGVuZGVuY2llcy4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGUgdmFyaW91cyByZXN1bHRzIGFuZCBhc3Nlc3MgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIG9mIHRoZSBhY3R1YWwgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjE4LjI0NjY0OTMyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NTkzMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1BLVEdFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zODQ9bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbm5ldC9LY29uZmlnLTM4NS1cXG5uZXQvS2NvbmZpZzozODY6Y29uZmlnIE5FVF9QS1RHRU5cXG5uZXQvS2NvbmZpZy0zODctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToyMC4zNDI1ODc2OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDQzNjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYE5FVF9QS1RHRU5gIG1vZHVsZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIHNvIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkb3duc3RyZWFtIGFuZCB1cHN0cmVhbSBsaW5rYWdlcyBpcyBjcnVjaWFsIGJlZm9yZSBJIGV2ZW4gY29uc2lkZXIgbWFraW5nIGEgY2hhbmdlLCBldmFsdWF0aW5nIGEgbmV3IGludGVncmF0aW9uLCBvciB0cm91Ymxlc2hvb3RpbmcgYW4gaXNzdWUuIEnigJlsbCBzdGFydCBieSBsaXN0aW5nIG91dCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMg4oCTIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVuY2llcy4gT2Z0ZW4gdGhlIGNhc2NhZGluZyBpbXBhY3Qgb24gdGhvc2UgZGVlcGVyIGVsZW1lbnRzIGFyZSB0aGUgc291cmNlIG9mIG1vc3Qgc3lzdGVtIGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBtb2R1bGUgcmVsaWVzIG9uIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgbGlicmFyaWVzLCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMsIGtlcm5lbCBpbnRlcmZhY2VzLCBvciBldmVuIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgZXh0ZXJuYWwgdG9vbHMuIFdoYXQgdmVyc2lvbnMgb2YgdGhlIGRlcGVuZGVudCBsaWJzIGFyZSBuZWVkZWQ/IElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgZGVwZW5kZW50IGxpYnMgaW5zdGFsbGVkLCBJIG5lZWQgdG8ga25vdyB3aGljaCBpcyBjYWxsZWQ/IFRoZSB2ZXJzaW9uaW5nIGlzIHZpdGFsLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc2hhcmVkIHJlc291cmNlcyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBUaGlzIGRlcGVuZGVuY3kgYXVkaXQgaXMgc3RlcCBvbmUsIGJlZm9yZSBJIGJlZ2luIHRoZSBhY3R1YWwgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjIzLjc4MzAyNjc5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODY6XFx0Y29uZmlnIE5FVF9QS1RHRU5cXG4gMzg3OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuIDM4OTpcXHRcXHRoZWxwXFxuIDM5MDpcXHRcXHQgIFRoaXMgbW9kdWxlIHdpbGwgaW5qZWN0IHByZWNvbmZpZ3VyZWQgcGFja2V0cywgYXQgYSBjb25maWd1cmFibGVcXG4gMzkxOlxcdFxcdCAgcmF0ZSwgb3V0IG9mIGEgZ2l2ZW4gaW50ZXJmYWNlLiAgSXQgaXMgdXNlZCBmb3IgbmV0d29yayBpbnRlcmZhY2VcXG4gMzkyOlxcdFxcdCAgc3RyZXNzIHRlc3RpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiAgSWYgeW91IGRvbid0IHVuZGVyc3RhbmRcXG4gMzkzOlxcdFxcdCAgd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJ3QgbmVlZCBpdDogc2F5IE4uXFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdCAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIGNhbiBiZSBmb3VuZFxcbiAzOTY6XFx0XFx0ICBhdCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGt0Z2VuLnJzdFxcdTAwM2UuXFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAzOTk6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGt0Z2VuLlxcbiA0MDA6XFx0XFxuIDQwMTpcXHRjb25maWcgTkVUX0RST1BfTU9OSVRPUlxcbiA0MDI6XFx0XFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBuZXR3b3JrIHBhY2tldCBkcm9wIGFsZXJ0aW5nIHNlcnZpY2VcXFwiXFxuIDQwMzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgVFJBQ0VQT0lOVFNcXG4gNDA0OlxcdFxcdGhlbHBcXG4gNDA1OlxcdFxcdCAgVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGFsZXJ0aW5nIHNlcnZpY2UgdG8gdXNlcnNwYWNlIGluIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToyMy43ODMxMDgxNjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NjEzMjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgUGFja2V0IEdlbmVyYXRpb24gRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGZvciBwYWNrZXQgZ2VuZXJhdGlvbiB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkgc2VlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGBJTkVUYCBhbmQgYFBST0NfRlNgLCBib3RoIG9mIHdoaWNoIGFyZSBwcmV0dHkgc3RhbmRhcmQsIHNvIHRoYXQncyBnb29kLiBUaGF0IGltcGxpZXMgSSBjYW4gZW5hYmxlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIHdpdGggdGhlIGBORVRfUEtUR0VOYCBjb25maWcgb3B0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIGBwa3RnZW5faWZfd3JpdGVgLCBgcGt0Z2VuX2lmX3Nob3dgLCBgZmlsbF9wYWNrZXRfaXB2NGAsIGFuZCBgZmlsbF9wYWNrZXRfaXB2NmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgdG8gZHJpdmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSG1tLCBJIG5vdGljZSBgZmlsbF9wYWNrZXRfaXB2NGAgYW5kIGBmaWxsX3BhY2tldF9pcHY2YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXkncmUgaW5saW5lZDsgdGhhdCBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgaG93IEkgY2FuIGludGVyYWN0IHdpdGggdGhlbS4gSW5saW5pbmcgb3IgbGFjayB0aGVyZW9mIGluZmx1ZW5jZXMgb3B0aW1pemF0aW9uIHBvdGVudGlhbC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6MjcuNjc5MjQzODQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg0OTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxsX3BhY2tldF9pcHY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTI5MDM9c3RhdGljIHN0cnVjdCBza19idWZmICpwa3RnZW5fYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yOTI5LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjI5MzA6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zMTg4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTkzLVxcdGVsc2VcXG5uZXQvY29yZS9wa3RnZW4uYzozMTk0OlxcdFxcdHJldHVybiBmaWxsX3BhY2tldF9pcHY0KG9kZXYsIHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OToyNy43MjcwOTc4MjJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDQ4ODYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgVHJhbnNtaXNzaW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgZmlsbF9wYWNrZXRgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYHBrdGdlbl94bWl0YC4gVGhhdCdzIGEga2V5IGludGVyYWN0aW9uIHJpZ2h0IHRoZXJlLiBJdCB0ZWxscyBtZSB0aGF0IHRoZSBwYWNrZXQgZ2VuZXJhdGlvbiBhbmQgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgbW9kdWxhcml6ZWQsIHdoaWNoIGlzIGdvb2Qgc29mdHdhcmUgZGVzaWduLiBgcGt0Z2VuX3htaXRgIGlzIHByb2JhYmx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzY2hlZHVsaW5nIG9yIGFjdHVhbGx5IHNlbmRpbmcgcGFja2V0cywgYW5kIGBmaWxsX3BhY2tldGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIG9yIHBvcHVsYXRpbmcgdGhlIHBhY2tldCBkYXRhIGl0c2VsZi5cblxuTm93LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHNwZWNpZmljIG5ldHdvcmsgc3RhY2ssIGBwa3RnZW5feG1pdGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIG1vcmUsIHN1Y2ggYXMgaW50ZXJmYWNpbmcgd2l0aCBhIE5JQyBkcml2ZXIgb3IgcHJlcGFyaW5nIHRoZSBwYWNrZXQgaW4gc29tZSBwcmUtdHJhbnNtaXNzaW9uIGZvcm1hdCwgYW5kIGBmaWxsX3BhY2tldGAgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHBhY2tldCBoZWFkZXJzLCBkYXRhIG9yIGJvdGguIFRoaW5raW5nIHRocm91Z2ggdGhlIGRldGFpbHMsIEknbSBub3cgbWFraW5nIGluZmVyZW5jZXMgYWJvdXQgdGhlIHBvdGVudGlhbCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgaW4gdXNlIGhlcmUuIGBmaWxsX3BhY2tldGAncyBpbnB1dCBpcyBsaWtlbHkgYSBwb2ludGVyIHRvIGEgcGFja2V0IGJ1ZmZlciwgcG90ZW50aWFsbHkgYW4gYWRkcmVzcywgYW5kIGl0J3MgcHJvYmFibHkgZmlsbGluZyBpdCBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdG8gaXQsIHBlcmhhcHMgdGhyb3VnaCBhIGdsb2JhbCBjb250ZXh0IG9yIHZpYSB0aGUgYXJndW1lbnRzIG9mIGBwa3RnZW5feG1pdGAuIEknbSBzdGFydGluZyB0byBtZW50YWxseSB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIGF0IHBsYXk7IGlzIHRoaXMgdXNlci1zcGFjZSwga2VybmVsLXNwYWNlLCBvciBhIGh5YnJpZCBtb2RlbD8gVGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFjY2VzcyBwYXR0ZXJucyBzaWduaWZpY2FudGx5LiBUaGVyZSBjb3VsZCBiZSBETUEgaW52b2x2ZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHN0dWZmLCB0aG91Z2ggSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTozMS42MzE1ODg4NTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU4OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTI5MDM9c3RhdGljIHN0cnVjdCBza19idWZmICpwa3RnZW5fYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0yOTI5LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjI5MzA6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTI5MzEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMDU3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMwNTg6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxcbm5ldC9jb3JlL3BrdGdlbi5jLTMwNTktXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTg3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjMxODg6c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqb2RldixcXG5uZXQvY29yZS9wa3RnZW4uYy0zMTg5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzE5MS1cXHRpZiAocGt0X2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGX0lQVjYpXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzE5MjpcXHRcXHRyZXR1cm4gZmlsbF9wYWNrZXRfaXB2NihvZGV2LCBwa3RfZGV2KTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zMTkzLVxcdGVsc2VcXG5uZXQvY29yZS9wa3RnZW4uYzozMTk0OlxcdFxcdHJldHVybiBmaWxsX3BhY2tldF9pcHY0KG9kZXYsIHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMxOTUtfVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzUxND1zdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM1NTMtXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzU1NDpcXHRcXHRwa3RfZGV2LVxcdTAwM2Vza2IgPSBmaWxsX3BhY2tldChvZGV2LCBwa3RfZGV2KTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTU1LVxcdFxcdGlmIChwa3RfZGV2LVxcdTAwM2Vza2IgPT0gTlVMTCkge1xcbm5ldC9jb3JlL3BrdGdlbi5jOjM1NTY6XFx0XFx0XFx0cHJfZXJyKFxcXCJFUlJPUjogY291bGRuJ3QgYWxsb2NhdGUgc2tiIGluIGZpbGxfcGFja2V0XFxcXG5cXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0zNTU3LVxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjMxLjY3ODE1NTAxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUyNjczMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBFeGFtaW5pbmcgdGhlIFBhY2tldCBHZW5lcmF0b3IgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhY2tldCBnZW5lcmF0b3IgY29kZS4gYHBrdGdlbl94bWl0YC4uLiB0aGF0J3MgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGxvb3AsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgcGt0Z2VuX3RocmVhZF93b3JrZXJgICpjYWxscyogYHBrdGdlbl94bWl0YC4gUmlnaHQsIGBwa3RnZW5fdGhyZWFkX3dvcmtlcmAgaXMgbGlrZWx5IHRoZSBrdGhyZWFkIHJlc3BvbnNpYmxlIGZvciBhbGwgb2YgdGhpcywgc28gaXQncyBwcm9iYWJseSB0aGUgYmV0dGVyIGZvY3VzIHN5bWJvbC4gTGV0IG1lIGp1c3QgbWFrZSBhIG5vdGUgb2YgdGhhdC5cblxuSG9sZCBvbiwgSSBzZWUgYHBrdGdlbl9pZl93cml0ZWAgbm93LiBJc24ndCB0aGF0IHRoZSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgY29udHJvbCBmbG93cz8gQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgaXQuIEhtbSwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0J3MgYXNzaWduZWQgdG8gYHByb2Nfb3BzYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXTigJlzIHByb2JhYmx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJIHdvbmRlciBpZiBpdOKAmXMgaW5saW5lZC4uLiBub3BlLCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwcm9jIGludGVyZmFjZS5cblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJvYyBpbnRlcmZhY2UsIGFuZCBhbnkgb3RoZXIgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjM2LjEzMDgzMDk0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTIwNTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjM2LjE3Nzk0OTQ4OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE1NjUxMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFN5bWJvbCBUYWJsZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBsaW5rZXIgaXNuJ3QgY29tcGxhaW5pbmcgYWJvdXQgbWlzc2luZyBzeW1ib2xzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgbWVhbnMgdGhlIGlzc3VlICpwcm9iYWJseSogaXNuJ3QgYSBzdHJhaWdodGZvcndhcmQgZXh0ZXJuYWwgcmVmZXJlbmNlIHRoYXQgSSd2ZSBib3RjaGVkLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoZW1zZWx2ZXMuIFNpbmNlIHRoZXJlIGFyZSBubyBleHBvcnRlZCBzeW1ib2xzLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgYW1pc3MgdGhlcmUuIEkgd2lsbCBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgZXh0ZXJuYWxseSB2aXNpYmxlLCBidXQgZm9yIHNvbWUgcmVhc29uLCBhcmUgbm90LiBJIHdpbGwgaW52ZXN0aWdhdGUgdGhlaXIgbGlua2FnZSwgdGhlaXIgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gbG9jYXRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB2aXNpYmlsaXR5IG1vZGlmaWVycyBvciBjb21waWxlciBmbGFncy4gSSB3aWxsIGFsc28gY2hlY2sgYW55IHJlbGF0ZWQgaGVhZGVycyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTozOS4zOTM2MDI5NjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDcyMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDExND1zdGF0aWMgdm9pZCBfX2V4aXQgcGdfY2xlYW51cCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMC1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTIxOm1vZHVsZV9pbml0KHBnX2luaXQpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjI6bW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMy1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI0Ok1PRFVMRV9BVVRIT1IoXFxcIlJvYmVydCBPbHNzb24gXFx1MDAzY3JvYmVydC5vbHNzb25AaXRzLnV1LnNlXFx1MDAzZVxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjU6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQYWNrZXQgR2VuZXJhdG9yIHRvb2xcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI2Ok1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI3Ok1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjg6bW9kdWxlX3BhcmFtKHBnX2NvdW50X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyOTpNT0RVTEVfUEFSTV9ERVNDKHBnX2NvdW50X2QsIFxcXCJEZWZhdWx0IG51bWJlciBvZiBwYWNrZXRzIHRvIGluamVjdFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzA6bW9kdWxlX3BhcmFtKHBnX2RlbGF5X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMTpNT0RVTEVfUEFSTV9ERVNDKHBnX2RlbGF5X2QsIFxcXCJEZWZhdWx0IGRlbGF5IGJldHdlZW4gcGFja2V0cyAobmFub3NlY29uZHMpXFxcIik7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMjptb2R1bGVfcGFyYW0ocGdfY2xvbmVfc2tiX2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMzpNT0RVTEVfUEFSTV9ERVNDKHBnX2Nsb25lX3NrYl9kLCBcXFwiRGVmYXVsdCBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBzYW1lIHBhY2tldFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzQ6bW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzU6TU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgXFxcIkVuYWJsZSBkZWJ1Z2dpbmcgb2YgcGt0Z2VuIG1vZHVsZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTozOS40NDI2Nzk1OTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMzk0MDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0J3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOlxuXG4qKlJlZ2V4IFJldmVsYXRpb24qKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCByYW4gbXkgcmVnZXggYW5kIHRob3VnaHQgaXQgd2FzIHByZXR0eSBjb21wcmVoZW5zaXZlLCBidXQgSSdtIGdldHRpbmcgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBzb21ldGhpbmcncyBzbGlwcGVkIHRocm91Z2guIERhbW4sIEkgZGlkbid0IGFjY291bnQgZm9yIGZ1bmN0aW9ucyB3aXRoIGV4cGxpY2l0IHJldHVybiB0eXBlcyEgVGhhdCdzIGEgZ2xhcmluZyBvdmVyc2lnaHQuIE15IGluaXRpYWwgZXhwcmVzc2lvbiB3YXMgbGlrZWx5IHRvbyBzaW1wbGlzdGljLCBmb2N1c2luZyBvbiBiYXNpYyBwYXR0ZXJucyB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBtb3JlIGNvbXBsZXggc3RydWN0dXJlIHRoYXQgZnVuY3Rpb25zIGludHJvZHVjZS4gVGhlIHdob2xlIHJldHVybiB0eXBlIGJ1c2luZXNzIGlzIHRoZSBrZXkgZGlmZmVyZW50aWF0b3IgaGVyZSwgaXNuJ3QgaXQ/IEdvdHRhIHJldmlzZSB0aGF0IHJlZ2V4OyBpdCBuZWVkcyB0byBiZSBmYXIgbW9yZSByb2J1c3QgaWYgSSB3YW50IHRvIGNhcHR1cmUgdGhlIGZ1bGwgc2NvcGUgb2Ygd2hhdCBJJ20gbG9va2luZyBmb3IgYW5kIG5vdCBtaXNzIHRob3NlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIEJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjQyLjg2NjYyMjI3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDI0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpfQS1aMC05XSsgW2Etel9BLVowLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BrdGdlbi5jPTUwMD1zdGF0aWMgaW50IGRlYnVnICBfX3JlYWRfbW9zdGx5O1xcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMS1cXG5uZXQvY29yZS9wa3RnZW4uYzo1MDI6c3RhdGljIERFRklORV9NVVRFWChwa3RnZW5fdGhyZWFkX2xvY2spO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTUwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6NDIuOTE0Nzc0MzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Njc2MjE4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUGFja2V0IEdlbmVyYXRvciBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuLi4gYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5faWZfc2hvd2AgaW1tZWRpYXRlbHkganVtcCBvdXQgYXQgbWUuIEkga25vdyB0aGV5J3JlIHN0YXRpYyBmdW5jdGlvbnMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIGNhcHR1cmVkLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGlubGluZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEV4cGFuZGluZyBvbiB0aGlzLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgcGt0Z2VuX3RocmVhZF93b3JrZXJgIGFzIGEga2V5IGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6NDYuMzgyMzk5MDMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyODU3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5fdGhyZWFkX3dvcmtlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz0zNTE0PXN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzcwMi1cXG5uZXQvY29yZS9wa3RnZW4uYzozNzAzOnN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxcbm5ldC9jb3JlL3BrdGdlbi5jLTM3MDQte1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzkxOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGt0Z2VuX2NyZWF0ZV90aHJlYWQoaW50IGNwdSwgc3RydWN0IHBrdGdlbl9uZXQgKnBuKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzkzOC1cXG5uZXQvY29yZS9wa3RnZW4uYzozOTM5OlxcdHAgPSBrdGhyZWFkX2NyZWF0ZV9vbl9jcHUocGt0Z2VuX3RocmVhZF93b3JrZXIsIHQsIGNwdSwgXFxcImtwa3RnZW5kXyVkXFxcIik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMzk0MC1cXHRpZiAoSVNfRVJSKHApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjQ2LjQyOTYzNTg2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3MzIzNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIFRocmVhZCBTYWZldHkgYW5kIFBvdGVudGlhbCBTY29wZSBJc3N1ZXMqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCB0aGUgY29kZSBJJ20gbG9va2luZyBhdC4gTGV0J3Mgc2VlIGlmIHRoYXQgYHBrdGdlbl90aHJlYWRfd29ya2VyYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gWXVwLCBpdCBpcy4gR29vZCwgdGhhdCBoZWxwcyB3aXRoIHBvdGVudGlhbCB0aHJlYWRpbmcgaXNzdWVzLCBsaW1pdGluZyBpdHMgc2NvcGUuIE5vdywgSSB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHNlZSBpZiBhbnkgYXJlIG5vdCBzdGF0aWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBhbnkgb3RoZXIgZnVuY3Rpb25zIEkgbWF5IGhhdmUgbWlzc2VkLiBJJ2xsIHVzZSBhIGBncmVwYCB0byBxdWlja2x5IGZpbmQgdGhlIGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggYHZvaWQgYCwgYGludCBgLCBgc3NpemVfdGAsIGV0Yy4sIHdoaWNoIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBjb2RlYmFzZSwgb3IgYW55IG90aGVyIHR5cGUgZGVmaW5pdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCBwb3RlbnRpYWwgdGhyZWFkIHNhZmV0eSBjb25jZXJucyBvciBnbG9iYWwgc3RhdGUgYWNjZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6NTk6NTAuMTg2OTYyMzM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEyNjI5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxzc2l6ZV90KSBbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjU5OjUwLjIzNjA5ODUwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgwOTY1MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIERlY2xhcmF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGRlY2xhcmF0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoYXQgcmV0dXJuIHR5cGUgSSdtIGV4cGVjdGluZyB0dWNrZWQgYXdheSBvbiB0aGUgKnByZXZpb3VzKiBsaW5lP1wiIEl0J3MgYSBjb21tb24gdHJpY2ssIGVzcGVjaWFsbHkgaW4gbGFuZ3VhZ2VzIHdpdGggbGVzcyByaWdpZCBzeW50YXggb3Igd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCwgbXVsdGktbGluZSBkZWNsYXJhdGlvbnMuIE15IGV5ZXMgYXJlIHNjYW5uaW5nIGJhY2t3YXJkLCBtZW50YWxseSB0cmFjaW5nIHRoZSBzdHJ1Y3R1cmUuIEl04oCZcyBhIHF1aWNrIG1lbnRhbCBjaGVjaywgYWxtb3N0IGluc3RpbmN0aXZlIGF0IHRoaXMgcG9pbnQsIGJ1dCBjcnVjaWFsIGZvciBlbnN1cmluZyBJJ20gcGFyc2luZyB0aGlzIGNvcnJlY3RseSBiZWZvcmUgSSBnbyBtdWNoIGZ1cnRoZXIuIElmIHRoZSB0eXBlIGlzbuKAmXQgaW1tZWRpYXRlbHkgb2J2aW91cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYSBzdWJ0bGV0eSBpbiB0aGUgZm9ybWF0dGluZyBvciBkZWNsYXJhdGlvbiBzdHlsZSBvZiB0aGUgY3VycmVudCBsYW5ndWFnZS4gVGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBzbyBJIGRvbid0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucyB1bnRpbCBJJ3ZlIGNvbmZpcm1lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyOTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTo1My45MTcwNjYzNTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDY5OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9NDExND1zdGF0aWMgdm9pZCBfX2V4aXQgcGdfY2xlYW51cCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMC1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTIxOm1vZHVsZV9pbml0KHBnX2luaXQpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjI6bW9kdWxlX2V4aXQocGdfY2xlYW51cCk7XFxubmV0L2NvcmUvcGt0Z2VuLmMtNDEyMy1cXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI0Ok1PRFVMRV9BVVRIT1IoXFxcIlJvYmVydCBPbHNzb24gXFx1MDAzY3JvYmVydC5vbHNzb25AaXRzLnV1LnNlXFx1MDAzZVxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjU6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQYWNrZXQgR2VuZXJhdG9yIHRvb2xcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI2Ok1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvY29yZS9wa3RnZW4uYzo0MTI3Ok1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMjg6bW9kdWxlX3BhcmFtKHBnX2NvdW50X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEyOTpNT0RVTEVfUEFSTV9ERVNDKHBnX2NvdW50X2QsIFxcXCJEZWZhdWx0IG51bWJlciBvZiBwYWNrZXRzIHRvIGluamVjdFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzA6bW9kdWxlX3BhcmFtKHBnX2RlbGF5X2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMTpNT0RVTEVfUEFSTV9ERVNDKHBnX2RlbGF5X2QsIFxcXCJEZWZhdWx0IGRlbGF5IGJldHdlZW4gcGFja2V0cyAobmFub3NlY29uZHMpXFxcIik7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMjptb2R1bGVfcGFyYW0ocGdfY2xvbmVfc2tiX2QsIGludCwgMCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6NDEzMzpNT0RVTEVfUEFSTV9ERVNDKHBnX2Nsb25lX3NrYl9kLCBcXFwiRGVmYXVsdCBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBzYW1lIHBhY2tldFxcXCIpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzQ6bW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjQxMzU6TU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgXFxcIkVuYWJsZSBkZWJ1Z2dpbmcgb2YgcGt0Z2VuIG1vZHVsZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTo1OTo1My45NjYxNDE4OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2NDc2MTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZXQvY29yZS9wa3RnZW4uY2AgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3BrdGdlbi5jYC4gRmlyc3QsIEkgcXVpY2tseSBjaGVja2VkIGZvciBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGp1bXBzIG91dC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIHRoZSBlbnRyeSBwb2ludHMuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGBwa3RnZW5faWZfd3JpdGVgLCBgcGt0Z2VuX2lmX3Nob3dgLCBhbmQgYHBrdGdlbl90aHJlYWRfd29ya2VyYCBhcyB0aGUga2V5IHRhcmdldHMuXG5cbkFoLCBoZXJlJ3MgYW4gaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uLiBUaGUgZnVuY3Rpb24gYGZfcGlja2AgaGFzIGl0cyBzaWduYXR1cmUgY2hhbmdlZDogaXQgbm93IHRha2VzIGBjZmxvd3NgIGFzIGFuIGFyZ3VtZW50LiBJIGFsc28gc2VlIHRoYXQgYG1vZF9jdXJfaGVhZGVyc2AgaXMgcHJlc2VudCwgdG9vLlxuXG5Mb29raW5nIGNsb3NlciwgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgZGF0YSByYWNlIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgb24gYHBrdF9kZXYtXHUwMDNlY2Zsb3dzYC4gSW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhICpidWcgZml4KiBldmVuLiBGaXhpbmcgYSBkYXRhIHJhY2UgdGhhdCBjb3VsZCBjYXVzZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBpcyBhbHdheXMgYSBoaWdoIHByaW9yaXR5LiBUaGF0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGBjZmxvd3NgIGlzIHRoZSBrZXkuXG5cbkhvbGQgb24sIEkgc2VlIHRoZSBjb25uZWN0aW9uIG5vdy4gYGNmbG93c2AgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGBmX3BpY2tgLlxuXG5gYGBjXG4tXHRcdGZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhwa3RfZGV2LVx1MDAzZWNmbG93cyk7XG4rXHRcdGZsb3cgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhjZmxvd3MpO1xuYGBgXG5cbkJlZm9yZSB0aGUgZml4LCB0aGUgY29kZSByZWFkIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgZGlyZWN0bHkgbXVsdGlwbGUgdGltZXMsIGlmIHRoZSBgY2Zsb3dzYCB2YWx1ZSB3YXMgcmVhZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgaXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGNvbmN1cnJlbnRseSwgd2hpY2ggbWlnaHQgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gTm93LCB0aGUgYGNmbG93c2AgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LiBBIHZlcnkgcmVhbCBidWcgZml4ISBTbywgaXQgbG9va3MgbGlrZSBhIGdvb2Qgb25lIHRvIGhpdCB3aXRoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uZmlndXJhdGlvbnMgYXJlOiBgTkVUX1BLVEdFTmAuIEFuZCBJJ2xsIGZvY3VzIG15IHN5bWJvbGljIGV4cGxvcmF0aW9uIG9uIHRob3NlIGVudHJ5IHBvaW50IGZ1bmN0aW9uczogYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5faWZfc2hvd2AsIGFuZCBgcGt0Z2VuX3RocmVhZF93b3JrZXJgLiBJJ2xsIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWVzIGZvciB0aG9zZSBlbnRyeSBwb2ludHMgYmVmb3JlIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDEuNTMwOTA1OTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ0NTE1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5faWZfc2hvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wa3RnZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wa3RnZW4uYz01NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwa3RnZW5fcHJvY19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy01NjUtXFxubmV0L2NvcmUvcGt0Z2VuLmM6NTY2OnN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtNTY3LXtcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTE4NzM9c3RhdGljIGludCBwa3RnZW5faWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5uZXQvY29yZS9wa3RnZW4uYy0xODc0LXtcXG5uZXQvY29yZS9wa3RnZW4uYzoxODc1OlxcdHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwa3RnZW5faWZfc2hvdywgcGRlX2RhdGEoaW5vZGUpKTtcXG5uZXQvY29yZS9wa3RnZW4uYy0xODc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDEuNTgyMzU4NzAzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTY2OTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipBZmZpcm1hdGlvbiBhbmQgQWN0aW9uOiBTZXR0aW5nIHRoZSBTdGFnZSoqXG5cblllcywgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycyBpcyBhcyBJIHVuZGVyc3RhbmQgaXQuIEdpdmVuIHRoaXMgY29uZmlybWF0aW9uLCBJIHdpbGwgbm93IHByb2NlZWQgdG8gZGVmaW5lIGFuZCBlc3RhYmxpc2ggdGhlIGRlc2lyZWQgcmVzdWx0cy4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJIGFtIHNldHRpbmcgdGhlIHBhcmFtZXRlcnMsIGFuZCBJIGFtIGluIGNvbnRyb2wgb2YgdGhlIG91dGNvbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM3LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjAwOjA2LjA3OTA1NTU3M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTQ1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5faWZfc2hvd1wiLFxuICAgIFwicGt0Z2VuX3RocmVhZF93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5faWZfc2hvd1wiLFxuICAgIFwicGt0Z2VuX3RocmVhZF93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBieSB1c2luZyBSRUFEX09OQ0UgYW5kIFdSSVRFX09OQ0UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb25zaXN0ZW50IHN0YXRlIHdoZW4gYGNmbG93c2AgaXMgbW9kaWZpZWQgY29uY3VycmVudGx5IHZpYSBwcm9jZnMgd2hpbGUgdGhlIHBrdGdlbiB0aHJlYWQgaXMgcnVubmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDYuMTYzNjExMjQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMxNTExODI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjAwOjA2LjE2NDExODIzNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjMxNDYwNDMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZWNmNTk2MjEwMWUzNThlZGU3NzU1OGEwZTliMmNlMmVjZmJhZjRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6NTg6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCBlZTY0ZjMwMTIzMjEwLi5lMTRiYjlhNDhhOGY5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmNcbisrKyBiL25ldC9jb3JlL3BrdGdlbi5jXG5AQCAtNTY2LDYgKzU2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX3Byb2Nfb3BzID0ge1xuIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbitcdHVuc2lnbmVkIGludCBjZmxvd3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuIFx0a3RpbWVfdCBzdG9wcGVkO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXHR1NjQgaWRsZTtcbkBAIC01OTAsNyArNTkxLDcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdFx0ICAgcGt0X2Rldi1cdTAwM2VuZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXHUwMDNlZGVsYXksXG4gXHRcdCAgIHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiLCBwa3RfZGV2LVx1MDAzZW9kZXZuYW1lKTtcbiBcbi1cdHNlcV9wcmludGYoc2VxLCBcIiAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XFxuXCIsIHBrdF9kZXYtXHUwMDNlY2Zsb3dzLFxuK1x0c2VxX3ByaW50ZihzZXEsIFwiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcXG5cIiwgY2Zsb3dzLFxuIFx0XHQgICBwa3RfZGV2LVx1MDAzZWxmbG93KTtcbiBcbiBcdHNlcV9wcmludGYoc2VxLFxuQEAgLTY3NSw3ICs2NzYsNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfUEtUX0ZMQUdTOyBpKyspIHtcbiBcdFx0aWYgKGkgPT0gRkxPV19TRVFfU0hJRlQpXG4tXHRcdFx0aWYgKCFwa3RfZGV2LVx1MDAzZWNmbG93cylcbitcdFx0XHRpZiAoIWNmbG93cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpKSB7XG5AQCAtMTYzMiw4ICsxNjMzLDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAodmFsdWUgXHUwMDNlIE1BWF9DRkxPV1MpXG4gXHRcdFx0dmFsdWUgPSBNQVhfQ0ZMT1dTO1xuIFxuLVx0XHRwa3RfZGV2LVx1MDAzZWNmbG93cyA9IHZhbHVlO1xuLVx0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCJPSzogZmxvd3M9JXVcIiwgcGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuK1x0XHRXUklURV9PTkNFKHBrdF9kZXYtXHUwMDNlY2Zsb3dzLCB2YWx1ZSk7XG4rXHRcdHNwcmludGYocGdfcmVzdWx0LCBcIk9LOiBmbG93cz0ldVwiLCAodW5zaWduZWQgaW50KXZhbHVlKTtcbiBcdFx0cmV0dXJuIGNvdW50O1xuIFx0fVxuICNpZmRlZiBDT05GSUdfWEZSTVxuQEAgLTIzNzMsNyArMjM3NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZfc2Vlbihjb25zdCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgaW50IGZsb3cpXG4gXHRyZXR1cm4gISEocGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5mbGFncyBcdTAwMjYgRl9JTklUKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZl9waWNrKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuK3N0YXRpYyBpbmxpbmUgaW50IGZfcGljayhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgdW5zaWduZWQgaW50IGNmbG93cylcbiB7XG4gXHRpbnQgZmxvdyA9IHBrdF9kZXYtXHUwMDNlY3VyZmw7XG4gXG5AQCAtMjM4MywxMSArMjM4NCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jb3VudCA9IDA7XG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5mbGFncyA9IDA7XG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJmbCArPSAxO1xuLVx0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWN1cmZsIFx1MDAzZT0gcGt0X2Rldi1cdTAwM2VjZmxvd3MpXG4rXHRcdFx0aWYgKHBrdF9kZXYtXHUwMDNlY3VyZmwgXHUwMDNlPSBjZmxvd3MpXG4gXHRcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cmZsID0gMDsgLypyZXNldCAqL1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3cocGt0X2Rldi1cdTAwM2VjZmxvd3MpO1xuK1x0XHRmbG93ID0gZ2V0X3JhbmRvbV91MzJfYmVsb3coY2Zsb3dzKTtcbiBcdFx0cGt0X2Rldi1cdTAwM2VjdXJmbCA9IGZsb3c7XG4gXG4gXHRcdGlmIChwa3RfZGV2LVx1MDAzZWZsb3dzW2Zsb3ddLmNvdW50IFx1MDAzZSBwa3RfZGV2LVx1MDAzZWxmbG93KSB7XG5AQCAtMjQ2MSwxMiArMjQ2MiwxNCBAQCBzdGF0aWMgdm9pZCBzZXRfY3VyX3F1ZXVlX21hcChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiAgKi9cbiBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4ge1xuK1x0dW5zaWduZWQgaW50IGNmbG93cztcbiBcdF9fdTMyIGltbjtcbiBcdF9fdTMyIGlteDtcbiBcdGludCBmbG93ID0gMDtcbiBcbi1cdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cylcbi1cdFx0ZmxvdyA9IGZfcGljayhwa3RfZGV2KTtcbitcdGNmbG93cyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWNmbG93cyk7XG4rXHRpZiAoY2Zsb3dzKVxuK1x0XHRmbG93ID0gZl9waWNrKHBrdF9kZXYsIGNmbG93cyk7XG4gXG4gXHQvKiAgRGVhbCB3aXRoIHNvdXJjZSBNQUMgKi9cbiBcdGlmIChwa3RfZGV2LVx1MDAzZXNyY19tYWNfY291bnQgXHUwMDNlIDEpIHtcbkBAIC0yNTgyLDcgKzI1ODUsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0cGt0X2Rldi1cdTAwM2VjdXJfc2FkZHIgPSBodG9ubCh0KTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAocGt0X2Rldi1cdTAwM2VjZmxvd3MgXHUwMDI2XHUwMDI2IGZfc2Vlbihwa3RfZGV2LCBmbG93KSkge1xuK1x0XHRpZiAoY2Zsb3dzIFx1MDAyNlx1MDAyNiBmX3NlZW4ocGt0X2RldiwgZmxvdykpIHtcbiBcdFx0XHRwa3RfZGV2LVx1MDAzZWN1cl9kYWRkciA9IHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uY3VyX2RhZGRyO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGltbiA9IG50b2hsKHBrdF9kZXYtXHUwMDNlZGFkZHJfbWluKTtcbkBAIC0yNjExLDcgKzI2MTQsNyBAQCBzdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdFx0XHRcdHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyID0gaHRvbmwodCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChwa3RfZGV2LVx1MDAzZWNmbG93cykge1xuK1x0XHRcdGlmIChjZmxvd3MpIHtcbiBcdFx0XHRcdHBrdF9kZXYtXHUwMDNlZmxvd3NbZmxvd10uZmxhZ3MgfD0gRl9JTklUO1xuIFx0XHRcdFx0cGt0X2Rldi1cdTAwM2VmbG93c1tmbG93XS5jdXJfZGFkZHIgPVxuIFx0XHRcdFx0ICAgIHBrdF9kZXYtXHUwMDNlY3VyX2RhZGRyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDA6MDYuMTY0MTE4OTk0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzE0NTYyOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4IGZvciBwa3RnZW4uYyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgZml4aW5nIGEgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIGBuZXQvY29yZS9wa3RnZW4uY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGlzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IEJ1dCBubywgaXQncyBhIGRhdGEgcmFjZSBpc3N1ZS4gVGhlIHBhdGNoIHVzZXMgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhcm91bmQgdGhlIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2UgaXQncyBwYXNzaW5nIGBjZmxvd3NgIChvciB0aGUgcmVhZC1vbmNlIHZhbHVlKSBhcyBhbiBhcmd1bWVudCBpbiBgZl9waWNrYCBhbmQgdXNpbmcgaXQgY29uc2lzdGVudGx5IGluIHBsYWNlcyBsaWtlIGBtb2RfY3VyX2hlYWRlcnNgIGFuZCBgcGt0Z2VuX2lmX3Nob3dgLlxuXG5UaGUgY29yZSBwcm9ibGVtIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AgdG8gY2hhbmdlIGJldHdlZW4gdGhlIGNoZWNrIGlmIGl0IGlzIG5vbi16ZXJvLCBhbmQgaXRzIHVzZSwgd2hpY2ggY291bGQgbGVhZCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coMClgIG9yLCB3b3JzZSwgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIHZhbHVlIGNoYW5nZXMgc2lnbmlmaWNhbnRseS4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIOKAkyBhIGRhdGEgcmFjZS5cblxuSSB3ZW50IGJhY2sgYW5kIGRvdWJsZS1jaGVja2VkIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFllcCwgaXQgdXNlcyBgUkVBRF9PTkNFYCBjb25zaXN0ZW50bHkgaW4gdGhlIHJlYWRlciBmdW5jdGlvbnMuIEFuZCBgV1JJVEVfT05DRWAgZm9yIHdyaXRpbmcgaXQuIGBmX3BpY2tgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCBmcm9tIGBwa3RfZGV2LVx1MDAzZWNmbG93c2AuIFRoaXMgcmVpbmZvcmNlcyB0aGF0IGl0IGlzIGluZGVlZCBhIGRhdGEgcmFjZS5cblxuVGhlcmVmb3JlLCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhpcyBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEtDU0FOIHdvdWxkIGxpa2VseSBjYXRjaCB0aGUgZGF0YSByYWNlIGRpcmVjdGx5LCBhbmQgS0FTQU4gbWlnaHQgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgdGhhdCByZXN1bHQgZnJvbSB0aGUgcmFjZS4gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMga2luZCBvZiBidWcuXG5cblNvLCBJIHdpbGwgZm9ybXVsYXRlIHRoZSBLTVNBTlJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGRhdGEgcmFjZSBvbiBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cdTAwM2VjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExLCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjAwOjE4LjQ3ODY4OTMzN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9uIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMgYW5kIGNhY2hpbmcgdGhlIHZhbHVlIGluIGEgbG9jYWwgdmFyaWFibGUgYGNmbG93c2AuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBgcGt0X2Rldi1cXHUwMDNlY2Zsb3dzYCBjb3VsZCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGxlYWRpbmcgdG8gaW5jb25zaXN0ZW50IHJlYWRzIChlLmcuLCBwYXNzaW5nIDAgdG8gYGdldF9yYW5kb21fdTMyX2JlbG93KClgIG9yIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcykuIFRoZXNlIHR5cGVzIG9mIGNvbmN1cnJlbmN5IGJ1Z3MgYW5kIHJlc3VsdGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBkZXRlY3RlZCBieSBLQ1NBTiBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBkYXRhIHJhY2Ugb24gYHBrdF9kZXYtXFx1MDAzZWNmbG93c2AgYnkgaW50cm9kdWNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhbm5vdGF0aW9ucyBhbmQgY2FjaGluZyB0aGUgdmFsdWUgaW4gYSBsb2NhbCB2YXJpYWJsZSBgY2Zsb3dzYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZXJlIGBwa3RfZGV2LVxcdTAwM2VjZmxvd3NgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgcmVhZHMgKGUuZy4sIHBhc3NpbmcgMCB0byBgZ2V0X3JhbmRvbV91MzJfYmVsb3coKWAgb3IgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKS4gVGhlc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgYnVncyBhbmQgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGRldGVjdGVkIGJ5IEtDU0FOIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbc97l[1] Phase: Succeeded StartedAt: 2026-08-12 06:00:30 +0000 UTC FinishedAt: 2026-08-12 06:00:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 06:00:30 +0000 UTC FinishedAt: 2026-08-12 06:00:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2] Phase: Succeeded StartedAt: 2026-08-12 06:00:30 +0000 UTC FinishedAt: 2026-08-12 09:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 06:00:30 +0000 UTC FinishedAt: 2026-08-12 09:44:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 06:00:30 +0000 UTC FinishedAt: 2026-08-12 06:00:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 06:00:30 +0000 UTC FinishedAt: 2026-08-12 06:00:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbc97l/series-workflowbc97l-convert-artifact-3862255227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 06:00:40 +0000 UTC FinishedAt: 2026-08-12 06:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 06:00:40 +0000 UTC FinishedAt: 2026-08-12 06:17:56 +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:*8ec30e4a-8fdb-4c01-bbac-63428287286e,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-workflowbc97l/series-workflowbc97l-convert-artifact-3862255227/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": "7d9a7816-74ed-4fae-9b87-897467a063f8", "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-workflowbc97l/series-workflowbc97l-build-action-4197975481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 06:00:40 +0000 UTC FinishedAt: 2026-08-12 06:17:45 +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:*8ec30e4a-8fdb-4c01-bbac-63428287286e,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-workflowbc97l/series-workflowbc97l-convert-artifact-3862255227/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": "7d9a7816-74ed-4fae-9b87-897467a063f8", "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-workflowbc97l/series-workflowbc97l-build-action-4197975481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 06:17:56 +0000 UTC FinishedAt: 2026-08-12 06:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 06:17:56 +0000 UTC FinishedAt: 2026-08-12 06:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 06:17:56 +0000 UTC FinishedAt: 2026-08-12 06:18:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 06:17:56 +0000 UTC FinishedAt: 2026-08-12 06:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbc97l/series-workflowbc97l-convert-artifact-3115907538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 06:18:07 +0000 UTC FinishedAt: 2026-08-12 06:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 06:18:07 +0000 UTC FinishedAt: 2026-08-12 06:20:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d9a7816-74ed-4fae-9b87-897467a063f8,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-workflowbc97l/series-workflowbc97l-build-action-4197975481/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-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 06:20:10 +0000 UTC FinishedAt: 2026-08-12 06:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:20:10 +0000 UTC FinishedAt: 2026-08-12 06:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 06:20:10 +0000 UTC FinishedAt: 2026-08-12 06:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 06:20:10 +0000 UTC FinishedAt: 2026-08-12 06:41:01 +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:*8ec30e4a-8fdb-4c01-bbac-63428287286e,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-workflowbc97l/series-workflowbc97l-convert-artifact-3115907538/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": "5d007ed9-68e5-4959-8765-ed7fae4617f7", "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-workflowbc97l/series-workflowbc97l-build-action-4262951014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 06:20:10 +0000 UTC FinishedAt: 2026-08-12 06:40:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8ec30e4a-8fdb-4c01-bbac-63428287286e,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-workflowbc97l/series-workflowbc97l-convert-artifact-3115907538/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": "5d007ed9-68e5-4959-8765-ed7fae4617f7", "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-workflowbc97l/series-workflowbc97l-build-action-4262951014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 06:41:01 +0000 UTC FinishedAt: 2026-08-12 06:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 06:41:01 +0000 UTC FinishedAt: 2026-08-12 06:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 06:41:01 +0000 UTC FinishedAt: 2026-08-12 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 06:41:01 +0000 UTC FinishedAt: 2026-08-12 06:42:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d007ed9-68e5-4959-8765-ed7fae4617f7,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-workflowbc97l/series-workflowbc97l-build-action-4262951014/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-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 09:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 09:44:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7d9a7816-74ed-4fae-9b87-897467a063f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d007ed9-68e5-4959-8765-ed7fae4617f7,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-workflowbc97l/series-workflowbc97l-build-action-4197975481/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-workflowbc97l/series-workflowbc97l-build-action-4262951014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 06:43:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 06:43:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbc97l/series-workflowbc97l-convert-artifact-3835227943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:43:02 +0000 UTC FinishedAt: 2026-08-12 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 06:43:40 +0000 UTC FinishedAt: 2026-08-12 09:44:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc97l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pktgen_if_write","pktgen_if_show","pktgen_thread_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_PKTGEN"],"series_id":"4a49f77e-c3bd-499a-96f2-3508daf03bef","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 06:43:40 +0000 UTC FinishedAt: 2026-08-12 09:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d9a7816-74ed-4fae-9b87-897467a063f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d007ed9-68e5-4959-8765-ed7fae4617f7,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-workflowbc97l/series-workflowbc97l-build-action-4197975481/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-workflowbc97l/series-workflowbc97l-build-action-4262951014/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-workflowbc97l/series-workflowbc97l-convert-artifact-3835227943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}