Name: series-workflowbbfc2 Phase: Succeeded StartedAt: 2026-09-13 10:46:39 +0000 UTC FinishedAt: 2026-09-13 14:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[0] Phase: Succeeded StartedAt: 2026-09-13 10:46:39 +0000 UTC FinishedAt: 2026-09-13 10:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 10:46:39 +0000 UTC FinishedAt: 2026-09-13 10:51:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_WQ" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_WQ" ], "series_id": "886ff704-6e85-4a82-8f0a-aa56434dbdd9" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_acct_cancel_running_work", "io_wq_cancel_running_work", "io_wq_cancel_cb", "io_async_cancel" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0lPX1dRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsmIzM0OywKICAgICYjMzQ7aW9fd3FfY2FuY2VsX2NiJiMzNDssCiAgICAmIzM0O2lvX2FzeW5jX2NhbmNlbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBhbmQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgdG8gcmV0dXJuIGVhcmx5IHdoZW4gYSBtYXRjaGluZyB3b3JrZXIgaGFzIGJlZW4gY2FuY2VsZWQgYW5kIGNhbmNlbF9hbGwgaXMgZmFsc2UuIEl0IGNoYW5nZXMgY29udHJvbCBmbG93IGJ5IHByb3BhZ2F0aW5nIHRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBmcm9tIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKCkgdGhyb3VnaCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBzbyB0aGUgbG9vcCBvdmVyIGFjY291bnRzIGJyZWFrcyBlYXJseS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJiMzOTtyZXQmIzM5OyBpcyBkaXJlY3RseSBhc3NpZ25lZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyLCB3aGljaCBhbHdheXMgcmV0dXJucyBhIGZ1bGx5IGluaXRpYWxpemVkIGJvb2wpLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyB3aXRoIGlvX3dvcmtlciBvciBpb193cSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNTEwMzEyZTZhZTBiZTg3ZmZlOTZhZDY0ZDc3ZTJlYmNjM2ZhZTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6NDg6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmNcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pby13cS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9pby13cS5jXG5AQCAtMTE4MSwxMiAmIzQzOzExODEsMTUgQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4mIzQzO3N0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbiBcdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcbiB7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuIFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tXHRpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XG4mIzQzO1x0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xuIFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5AQCAtMTE5NSw3ICYjNDM7MTE5OCw4IEBAIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbi1cdFx0aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcbiYjNDM7XHRcdGlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoXHUwMDI2d3EtXHUwMDNlYWNjdFtpXSwgbWF0Y2gpKVxuJiM0MztcdFx0XHRicmVhaztcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19XUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICAgJiMzNDtpb19hc3luY19jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjQ4OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmMKaW5kZXggMmNhMjIzZTQ3ZDQxZi4uOWY5MDM5ZTNkMzhmYyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvaW8td3EuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9pby13cS5jCkBAIC0xMTgxLDEyICYjNDM7MTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsCiAJfQogfQogCi1zdGF0aWMgdm9pZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsCiYjNDM7c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LAogCQkJCQlzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKQogewomIzQzOwlib29sIHJldDsKJiM0MzsKIAlyYXdfc3Bpbl9sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKLQlpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7CiYjNDM7CXJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTsKIAlyYXdfc3Bpbl91bmxvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsCkBAIC0xMTk1LDcgJiM0MzsxMTk4LDggQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspCi0JCWlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygmYW1wO3dxLSZndDthY2N0W2ldLCBtYXRjaCk7CiYjNDM7CQlpZiAoaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCZhbXA7d3EtJmd0O2FjY3RbaV0sIG1hdGNoKSkKJiM0MzsJCQlicmVhazsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvaW8td3EuYyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhcHBsaWVkIHRvIGBpb191cmluZy9pby13cS5jYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvZGUgY2hhbmdlcyBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb2RpZmllZCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYC4gUHJldmlvdXNseSwgaXQgd2FzIGEgYHZvaWRgIGZ1bmN0aW9uLCBhbmQgbm93IGl0IHJldHVybnMgYSBgYm9vbGAuIFRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSB3cmFwcGluZyB0aGUgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBjYWxsIHdpdGggYHJhd19zcGluX2xvY2tgIGFuZCBgcmF3X3NwaW5fdW5sb2NrYCwgYW5kIHRoZSBuZXcgcmV0dXJuIHZhbHVlLiBBbHNvIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYCBub3cgYnJlYWtzIG9uIGEgdHJ1ZSByZXR1cm4gZnJvbSBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZXkgaW50cm9kdWNlZCB0aGlzIGJvb2xlYW4gcmV0dXJuIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgYnJlYWtgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIG9mIGBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcmAsIGFuZCB3aHkgbG9ja2luZyBpcyBub3cgcmVxdWlyZWQuIFdoYXQgaXMgdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyB0aGF0IHRoaXMgaXMgZW5hYmxpbmcgb3IgaW1wcm92aW5nPwoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBJJiMzOTtsbCBsb29rIGF0IHRoZSBmdW5jdGlvbnMgYGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmtgLCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgYW5kIGBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcmAgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIHdpbGwgbGlrZWx5IGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlbnQgb2YgdGhlIHBhdGNoIGFuZCB3aGV0aGVyIHRoZSBjaGFuZ2VzIGFyZSBzZW5zaWJsZSBhbmQgY29ycmVjdC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdHtcbjExNzE6XHRcdGludCBpO1xuMTE3MjpcdHJldHJ5OlxuMTE3MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbjExNzQ6XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb19nZXRfYWNjdCh3cSwgaSA9PSAwKTtcbjExNzU6XHRcbjExNzY6XHRcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayh3cSwgYWNjdCwgbWF0Y2gpKSB7XG4xMTc3Olx0XHRcdFx0aWYgKG1hdGNoLVx1MDAzZWNhbmNlbF9hbGwpXG4xMTc4Olx0XHRcdFx0XHRnb3RvIHJldHJ5O1xuMTE3OTpcdFx0XHRcdGJyZWFrO1xuMTE4MDpcdFx0XHR9XG4xMTgxOlx0XHR9XG4xMTgyOlx0fVxuMTE4MzpcdFxuMTE4NDpcdHN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbjExODU6XHRcdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcbjExODY6XHR7XG4xMTg3Olx0XHRib29sIHJldDtcbjExODg6XHRcbjExODk6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuMTE5MDpcdFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xuMTE5MTpcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbjExOTI6XHRcdHJldHVybiByZXQ7XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbjExOTY6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuMTE5NzpcdHtcbjExOTg6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjExOTk6XHRcbjEyMDA6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbjEyMDE6XHRcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4xMjAyOlx0XHRcdFx0YnJlYWs7XG4xMjAzOlx0XG4xMjA0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjEyMDU6XHR9XG4xMjA2Olx0XG4xMjA3Olx0ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXG4xMjA4Olx0XHRcdFx0XHQgIHZvaWQgKmRhdGEsIGJvb2wgY2FuY2VsX2FsbClcbjEyMDk6XHR7XG4xMjEwOlx0XHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XG4xMjExOlx0XHRcdC5mblx0XHQ9IGNhbmNlbCxcbjEyMTI6XHRcdFx0LmRhdGFcdFx0PSBkYXRhLFxuMTIxMzpcdFx0XHQuY2FuY2VsX2FsbFx0PSBjYW5jZWxfYWxsLFxuMTIxNDpcdFx0fTtcbjEyMTU6XHRcbjEyMTY6XHRcdC8qXG4xMjE3Olx0XHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJiMzOTtyZSBsdWNreSB3ZSBjYW4ganVzdCByZW1vdmUgaXRcbjEyMTg6XHRcdCAqIGZyb20gdGhlcmUuIENBTkNFTF9PSyBtZWFucyB0aGF0IHRoZSB3b3JrIGlzIHJldHVybmVkIGFzLW5ldyxcbjEyMTk6XHRcdCAqIG5vIGNvbXBsZXRpb24gd2lsbCBiZSBwb3N0ZWQgZm9yIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGtlZXBpbmcgaW4gbWluZCBteSBkZWVwIGtub3dsZWRnZSBvZiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIGlvX3dxX2NhbmNlbF9jYiAmYW1wOyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYGlvX3dxX2NhbmNlbF9jYmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBjb250ZXh0LiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiBhbmQgcXVpY2tseSB1bmRlcnN0YW5kIGhvdyBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgaXMgYWN0dWFsbHkgKmludm9rZWQqIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHNwb3QgZm9yIEkvTyBjYW5jZWxsYXRpb24sIHNvIGdldHRpbmcgdGhlIGZsb3cgcmlnaHQgaXMgcGFyYW1vdW50LgoKVGhlbiwgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCByZXR1cm4gdmFsdWUgb2YgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYC4gSSBzdXNwZWN0IGl0JiMzOTtzIGdpdmluZyBzb21lIGNyaXRpY2FsIHN0YXR1cyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgd29ya2VycyB3aXRoaW4gdGhlIEkvTyBxdWV1ZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBtZWFucywgYW5kIGhvdyB0aGlzIHJldHVybiB2YWx1ZSBpbmZsdWVuY2VzIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFByb2JhYmx5IHNvbWUga2luZCBvZiBhY2NvdW50aW5nIGRhdGEuIFRoZSBmdW5jdGlvbiBuYW1lIGNlcnRhaW5seSBzdWdnZXN0cyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxNTpcdFxuMTIxNjpcdFx0LypcbjEyMTc6XHRcdCAqIEZpcnN0IGNoZWNrIHBlbmRpbmcgbGlzdCwgaWYgd2UmIzM5O3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxuMTIxODpcdFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxuMTIxOTpcdFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXG4xMjIwOlx0XHQgKlxuMTIyMTpcdFx0ICogVGhlbiBjaGVjayBpZiBhIGZyZWUgKGdvaW5nIGJ1c3kpIG9yIGJ1c3kgd29ya2VyIGhhcyB0aGUgd29ya1xuMTIyMjpcdFx0ICogY3VycmVudGx5IHJ1bm5pbmcuIElmIHdlIGZpbmQgaXQgdGhlcmUsIHdlJiMzOTtsbCByZXR1cm4gQ0FOQ0VMX1JVTk5JTkdcbjEyMjM6XHRcdCAqIGFzIGFuIGluZGljYXRpb24gdGhhdCB3ZSBhdHRlbXB0IHRvIHNpZ25hbCBjYW5jZWxsYXRpb24uIFRoZVxuMTIyNDpcdFx0ICogY29tcGxldGlvbiB3aWxsIHJ1biBub3JtYWxseSBpbiB0aGlzIGNhc2UuXG4xMjI1Olx0XHQgKlxuMTIyNjpcdFx0ICogRG8gYm90aCBvZiB0aGVzZSB3aGlsZSBob2xkaW5nIHRoZSBhY2N0LVx1MDAzZXdvcmtlcnNfbG9jaywgdG8gZW5zdXJlIHRoYXRcbjEyMjc6XHRcdCAqIHdlJiMzOTtsbCBmaW5kIGEgd29yayBpdGVtIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuXG4xMjI4Olx0XHQgKi9cbjEyMjk6XHRcdGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsod3EsIFx1MDAyNm1hdGNoKTtcbjEyMzA6XHRcdGlmIChtYXRjaC5ucl9wZW5kaW5nIFx1MDAyNlx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcbjEyMzE6XHRcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcbjEyMzI6XHRcbjEyMzM6XHRcdGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsod3EsIFx1MDAyNm1hdGNoKTtcbjEyMzQ6XHRcdGlmIChtYXRjaC5ucl9ydW5uaW5nIFx1MDAyNlx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcbjEyMzU6XHRcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9SVU5OSU5HO1xuMTIzNjpcdFxuMTIzNzpcdFx0aWYgKG1hdGNoLm5yX3J1bm5pbmcpXG4xMjM4Olx0XHRcdHJldHVybiBJT19XUV9DQU5DRUxfUlVOTklORztcbjEyMzk6XHRcdGlmIChtYXRjaC5ucl9wZW5kaW5nKVxuMTI0MDpcdFx0XHRyZXR1cm4gSU9fV1FfQ0FOQ0VMX09LO1xuMTI0MTpcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9OT1RGT1VORDtcbjEyNDI6XHR9XG4xMjQzOlx0XG4xMjQ0Olx0c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4xMjQ1Olx0XHRcdFx0ICAgIGludCBzeW5jLCB2b2lkICprZXkpXG4xMjQ2Olx0e1xuMTI0NzpcdFx0c3RydWN0IGlvX3dxICp3cSA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3QgaW9fd3EsIHdhaXQpO1xuMTI0ODpcdFx0aW50IGk7XG4xMjQ5Olx0XG4xMjUwOlx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNndhaXQtXHUwMDNlZW50cnkpO1xuMTI1MTpcdFxuMTI1MjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTI1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbjEyNTQ6XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3JrIFF1ZXVlIENhbmNlbGxhdGlvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTG9va2luZyBhdCBsaW5lcyAxMjAwLTEyMDIsIEkgc2VlIGEgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYGlvX2FjY3RgIGFycmF5IHdpdGhpbiBhIHdvcmsgcXVldWUgKGB3cWApLiBUaGUgY29kZSBhdHRlbXB0cyB0byBjYW5jZWwgcnVubmluZyB3b3JrIGl0ZW1zIHVzaW5nIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLCBicmVha2luZyB0aGUgbG9vcCBpZiBhIGNhbmNlbGxhdGlvbiBpcyBzdWNjZXNzZnVsLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgaWYgYG1hdGNoLSZndDtjYW5jZWxfYWxsYCBpcyB0cnVlPwoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V291bGRuJiMzOTt0IHdlIHdhbnQgdG8gY2FuY2VsICphbGwqIHJ1bm5pbmcgd29yayBpdGVtcyBpbiB0aGF0IGNhc2U/JiMzNDsgUHJldmlvdXNseSwgaWYgYGNhbmNlbF9hbGxgICp3YXMqIHRydWUsIHRoZSBjb2RlIGl0ZXJhdGVkIHRocm91Z2ggdGhlIGFycmF5IHdpdGhvdXQgYSBgYnJlYWtgLiBDbGVhcmx5LCB0aGF0IGJlaGF2aW91ciBoYXMgY2hhbmdlZC4gTm93IGl0IGJyZWFrcyEKClRoaXMgbWVhbnMgdGhhdCBpZiBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCAqcmV0dXJucyogdHJ1ZSwgdGhlIGxvb3Agbm93IGJyZWFrcy4gVGhhdCByYWlzZXMgdGhlIHF1ZXN0aW9uOiBpcyB0aGF0IGludGVuZGVkIGJlaGF2aW9yLCBldmVuIHdoZW4gd2Ugd2FudCB0byBjYW5jZWwgZXZlcnl0aGluZz8gT3IsIHNob3VsZCB0aGUgbG9vcCBjb250aW51ZSByZWdhcmRsZXNzIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiBgY2FuY2VsX2FsbGAgaXMgdHJ1ZT8KClRvIGNsYXJpZnkgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCByZXR1cm5zIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIE1vcmUgaW1wb3J0YW50bHksIHdoYXQmIzM5O3MgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBhbmQgaG93IGl0IG1pZ2h0IHBsYXkgaW50byB0aGUgb3ZlcmFsbCBsb2dpYy4gSSBuZWVkIHRvIGdvIGxvb2sgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIGJlaGF2aW9yIGhlcmUgc2VlbXMgY291bnRlcmludHVpdGl2ZSB0byBhIGZ1bGwgY2FuY2VsbGF0aW9uIGFwcHJvYWNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2FjY3RfZm9yX2VhY2hfd29ya2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9OTAxPXN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NDItICovXG5pb191cmluZy9pby13cS5jOjk0MzpzdGF0aWMgYm9vbCBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmMtOTQ0LVx0XHRcdFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4tLVxuaW9fdXJpbmcvaW8td3EuYz05NjQ9c3RhdGljIHZvaWQgaW9fd3FfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NjgtXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG5pb191cmluZy9pby13cS5jOjk2OTpcdFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxuaW9fdXJpbmcvaW8td3EuYy05NzAtXHRcdFx0YnJlYWs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTExODktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyIGFuZCBpb193cV93b3JrZXJfY2FuY2VsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgdHdvLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIEkvTyBhY2NvdW50aW5nIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgd29ya2VyIHRocmVhZCBvciBncm91cCBvZiB3b3JrZXIgdGhyZWFkcy4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgYWNjb3VudGluZyB1cGRhdGVzIG9yIHBlcmhhcHMgYWdncmVnYXRlIHN0YXRpc3RpY3MuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gYGlvX3dxX3dvcmtlcl9jb3VudGAgdG8gaW5mZXIgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB3b3JrZXIgcXVldWUuIEl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgaXMgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zLCBieXRlcyB0cmFuc2ZlcnJlZCwgb3IgdGltZXN0YW1wcy4gSSBhbnRpY2lwYXRlIHRoZXJlJiMzOTtsbCBiZSBzb21lIHNvcnQgb2Ygc3BpbmxvY2sgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbnZvbHZlZCwgdG8gZW5zdXJlIGF0b21pYyB1cGRhdGVzLgoKTm93LCBgaW9fd3Ffd29ya2VyX2NhbmNlbGAuIFRoZSAmIzM0O2NhbmNlbCYjMzQ7IHBhcnQgaW1tZWRpYXRlbHkgc2NyZWFtcyByZXNvdXJjZSBjbGVhbnVwLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgY2FuY2VsbGluZyBwZW5kaW5nIEkvTyB3b3JrIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgd29ya2VyIG9yIHRoZSBxdWV1ZS4gSSBzaG91bGQgbG9vayB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB3b3JrcXVldWUmIzM5O3MgY2FuY2VsbGF0aW9uIG1lY2hhbmlzbXMuIEkmIzM5O2QgZXhwZWN0IHRoYXQgaXQgaGFuZGxlcyBlbnN1cmluZyB0aGUgdGhyZWFkIGRvZXNuJiMzOTt0IGNvbnRpbnVlIGRvaW5nIGl0cyBqb2Igd2l0aCBpbnZhbGlkYXRlZCBwYXJhbWV0ZXJzLiBHaXZlbiB0aGF0IHRoaXMgaXMgd29ya2luZyB3aXRoIEkvTywgSSB3b3VsZCBleHBlY3QgdGhlIGNhbmNlbGxhdGlvbiB0byBoYXZlIHRvIGhhcHBlbiBpbiBhIHZlcnkgY2FyZWZ1bCB3YXkuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBhbnkgcmVsYXRpb24gdG8gc3BlY2lmaWMgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FuY2VsbGF0aW9uOyBhcmUgd2UgdGFsa2luZyBhYm91dCBpbW1lZGlhdGUsIGRlZmVycmVkLCBvciBncmFjZWZ1bCB0ZXJtaW5hdGlvbiBvZiB3b3JrPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gZGF0YSBjb25zaXN0ZW5jeSwgYW5kIGhvdyBhcmUgZXJyb3JzIGhhbmRsZWQ/IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBob3cgY2FuY2VsbGF0aW9uIGFmZmVjdHMgcGVuZGluZyBjb21wbGV0aW9uIGNhbGxiYWNrcyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLgoKSSBzaG91bGQgYWxzbyBsb29rIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybnMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk0MDpcdCAqIEl0ZXJhdGUgdGhlIHBhc3NlZCBpbiBsaXN0IGFuZCBjYWxsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaFxuIDk0MTpcdCAqIHdvcmtlciB0aGF0IGlzbiYjMzk7dCBleGl0aW5nXG4gOTQyOlx0ICovXG4gOTQzOlx0c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4gOTQ0Olx0XHRcdFx0XHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcbiA5NDU6XHRcdFx0XHRcdCAgICB2b2lkICpkYXRhKVxuIDk0NjpcdHtcbiA5NDc6XHRcdHN0cnVjdCBpb193b3JrZXIgKndvcmtlcjtcbiA5NDg6XHRcdGJvb2wgcmV0ID0gZmFsc2U7XG4gOTQ5Olx0XG4gOTUwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3b3JrZXIsIFx1MDAyNmFjY3QtXHUwMDNlYWxsX2xpc3QsIGFsbF9saXN0KSB7XG4gOTUxOlx0XHRcdGlmIChpb193b3JrZXJfZ2V0KHdvcmtlcikpIHtcbiA5NTI6XHRcdFx0XHQvKiBubyB0YXNrIGlmIG5vZGUgaXMvd2FzIG9mZmxpbmUgKi9cbiA5NTM6XHRcdFx0XHRpZiAod29ya2VyLVx1MDAzZXRhc2spXG4gOTU0Olx0XHRcdFx0XHRyZXQgPSBmdW5jKHdvcmtlciwgZGF0YSk7XG4gOTU1Olx0XHRcdFx0aW9fd29ya2VyX3JlbGVhc2Uod29ya2VyKTtcbiA5NTY6XHRcdFx0XHRpZiAocmV0KVxuIDk1NzpcdFx0XHRcdFx0YnJlYWs7XG4gOTU4Olx0XHRcdH1cbiA5NTk6XHRcdH1cbiA5NjA6XHRcbiA5NjE6XHRcdHJldHVybiByZXQ7XG4gOTYyOlx0fVxuIDk2MzpcdFxuIDk2NDpcdHN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxuIDk2NTpcdFx0XHRcdFx0ICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxuIDk2NjpcdFx0XHRcdFx0ICB2b2lkICpkYXRhKVxuIDk2NzpcdHtcbiA5Njg6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbiA5Njk6XHRcdFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxuIDk3MDpcdFx0XHRcdGJyZWFrO1xuIDk3MTpcdH1cbiA5NzI6XHRcbiA5NzM6XHRzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG4gOTc0Olx0e1xuIDk3NTpcdFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXHUwMDNldGFzayk7XG4gOTc2Olx0XHR3YWtlX3VwX3Byb2Nlc3Mod29ya2VyLVx1MDAzZXRhc2spO1xuIDk3NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDk3ODpcdH1cbiA5Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlvX3dxX3dvcmtlcl9jYW5jZWxgIGZ1bmN0aW9uLiBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBJL08gYW5kIHdvcmtlciB0aHJlYWRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNhbmNlbGxhdGlvbiBwcm9jZXNzIHdvcmtzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoZSBjb3JlIHByb2JsZW0gaGVyZSBpcyBsaWtlbHkgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIGFuIEkvTyBvcGVyYXRpb24gYW5kIGVuc3VyaW5nIGEgY2xlYW4gc2h1dGRvd24gb2YgYSB3b3JrZXIgdGhyZWFkIHdpdGhvdXQgY29ycnVwdGluZyBkYXRhIG9yIGxlYXZpbmcgcmVzb3VyY2VzIGRhbmdsaW5nLgoKKiAgIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMuIElmIGEgd29ya2VyIHRocmVhZCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyBhbiBJL08gcmVxdWVzdCwgYW5kIGEgY2FuY2VsIHNpZ25hbCBhcnJpdmVzLCB3ZSBuZWVkIGEgbWVjaGFuaXNtIHRvIHByZXZlbnQgaXQgZnJvbSBjb21wbGV0aW5nIGFmdGVyIHRoZSBjYW5jZWwgaGFzIGJlZW4gcmVxdWVzdGVkLiBXZSBhbHNvIG5lZWQgdG8gYXZvaWQgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBpZiB0aGUgd29ya2VyIGlzIGhvbGRpbmcgYW55IGxvY2tzLgoqICAgTmV4dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBtZWNoYW5pc20gdG8gc2lnbmFsIHRvIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb3BlcmF0aW9uLCB0aGF0IGl0IGhhcyBiZWVuIGNhbmNlbGVkLgoqICAgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSB0cmFja3MgdGhlIEkvTyByZXF1ZXN0JiMzOTtzIHByb2dyZXNzLiBBcmUgdGhlcmUgZmxhZ3M/IFN0YXRlIHZhcmlhYmxlcz8gQXRvbWljIG9wZXJhdGlvbnM/IFRob3NlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5bmNocm9uaXphdGlvbi4KKiAgIEkgc3VzcGVjdCB0aGUgY2FuY2VsbGF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgc2V0dGluZyBzb21lIGtpbmQgb2YgJiMzNDtjYW5jZWwmIzM0OyBmbGFnLCBhbmQgcG90ZW50aWFsbHkgd2FraW5nIHVwIHRoZSB3b3JrZXIgdGhyZWFkIGlmIGl0JiMzOTtzIGN1cnJlbnRseSBzbGVlcGluZy4gV2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgbWVhbnMgZm9yIHJlc291cmNlIGNsZWFudXAuCiogICBJIGFsc28gbmVlZCB0byBzZWUgaWYgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgcGFydGlhbCBjb21wbGV0aW9ucyBvZiBhbiBJL08gcmVxdWVzdDsgZG9lcyBpdCBhbGxvdyBmb3IgdGhlIEkvTyB0byBiZSBjYW5jZWxlZCBhbmQgcmV0dXJuIHBhcnRpYWwgZGF0YSwgb3IgbXVzdCB0aGUgSS9PIGJlIGNvbXBsZXRlbHkgcm9sbGVkIGJhY2s/CiogICBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGVkZ2UgY2FzZXMgbGlrZSBpZiBhIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHNjaGVkdWxlZCB5ZXQuCiogICBGaW5hbGx5LCBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCwgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UgbGVha3MgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGEgcHJlbWF0dXJlIG9yIGluY29tcGxldGUgY2FuY2VsbGF0aW9uLgoKTGV0IG1lIGdvIHRocm91Z2ggaXQgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMgYW5kIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTgwOlx0dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKVxuIDk4MTpcdHtcbiA5ODI6XHRcdGlmICghd3EtXHUwMDNldGFzaylcbiA5ODM6XHRcdFx0cmV0dXJuO1xuIDk4NDpcdFxuIDk4NTpcdFx0aWYgKCFlbmFibGUpIHtcbiA5ODY6XHRcdFx0Y2xlYXJfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFx1MDAyNndxLVx1MDAzZXN0YXRlKTtcbiA5ODc6XHRcdFx0cmV0dXJuO1xuIDk4ODpcdFx0fVxuIDk4OTpcdFxuIDk5MDpcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSU9fV1FfQklUX0VYSVRfT05fSURMRSwgXHUwMDI2d3EtXHUwMDNlc3RhdGUpKVxuIDk5MTpcdFx0XHRyZXR1cm47XG4gOTkyOlx0XG4gOTkzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gOTk0Olx0XHRpb193cV9mb3JfZWFjaF93b3JrZXIod3EsIGlvX3dxX3dvcmtlcl93YWtlLCBOVUxMKTtcbiA5OTU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDk5NjpcdH1cbiA5OTc6XHRcbiA5OTg6XHRzdGF0aWMgdm9pZCBpb19ydW5fY2FuY2VsKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCBzdHJ1Y3QgaW9fd3EgKndxKVxuIDk5OTpcdHtcbjEwMDA6XHRcdGRvIHtcbjEwMDE6XHRcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbjEwMDI6XHRcdFx0aW9fd3Ffc3VibWl0X3dvcmsod29yayk7XG4xMDAzOlx0XHRcdHdvcmsgPSBpb193cV9mcmVlX3dvcmsod29yayk7XG4xMDA0Olx0XHR9IHdoaWxlICh3b3JrKTtcbjEwMDU6XHR9XG4xMDA2Olx0XG4xMDA3Olx0c3RhdGljIHZvaWQgaW9fd3FfaW5zZXJ0X3dvcmsoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4xMDA4Olx0XHRcdFx0ICAgICAgc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxuMTAwOTpcdHtcbjEwMTA6XHRcdHVuc2lnbmVkIGludCBoYXNoO1xuMTAxMTpcdFx0c3RydWN0IGlvX3dxX3dvcmsgKnRhaWw7XG4xMDEyOlx0XG4xMDEzOlx0XHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKSB7XG4xMDE0Olx0YXBwZW5kOlxuMTAxNTpcdFx0XHR3cV9saXN0X2FkZF90YWlsKFx1MDAyNndvcmstXHUwMDNlbGlzdCwgXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QpO1xuMTAxNjpcdFx0XHRyZXR1cm47XG4xMDE3Olx0XHR9XG4xMDE4Olx0XG4xMDE5Olx0XHRoYXNoID0gX19pb19nZXRfd29ya19oYXNoKHdvcmtfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGBpb193cV93b3JrZXJfY2FuY2VsYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgYGlvX3dxX3dvcmtlcl9jYW5jZWxgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgSS9PIGNvbXBsZXRpb24gcXVldWUgZnJhbWV3b3JrLiBJdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiBoYW5kbGluZyB0YXNrIGNhbmNlbGxhdGlvbiBvciBhYm9ydHMgd2l0aGluIHRoZSBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRldGVybWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGgsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkLiBJcyBpdCBjYWxsZWQgZGlyZWN0bHksIG9yIGluZGlyZWN0bHkgdGhyb3VnaCBhIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbj8gSXMgaXQgaW52b2x2ZWQgaW4gY2xlYW51cCwgcmVzb3VyY2UgcmVsZWFzZSwgb3IgcGVyaGFwcyBzaWduYWxpbmcgdG8gb3RoZXIgdGhyZWFkcz8gSeKAmW0gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zIGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHN5bmNocm9uaXphdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgSS9PIGNvbXBsZXRpb25zLiBJIHN1c3BlY3QgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGVpdGhlciB0aGUgY2FuY2VsbGF0aW9uIG9mIHdvcmsgaXRlbXMgdGhlbXNlbHZlcyBvciB0aGUgcHJldmVudGlvbiBvZiBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gYmVoYWxmIG9mIGEgZ2l2ZW4gY2FuY2VsZWQgcmVxdWVzdC4gS25vd2luZyB0aGUgc3BlY2lmaWMgZGV2aWNlIGRyaXZlciBpdCB0b3VjaGVzIHVwb24gd2lsbCBwcm92aWRlIGZ1cnRoZXIgaW5zaWdodCBpbiB3aGF0IHRoZSBpbnRlbnQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX3dvcmtlcl9jYW5jZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xMDg3PXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDk0LVxuaW9fdXJpbmcvaW8td3EuYzoxMDk1OnN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG5pb191cmluZy9pby13cS5jLTEwOTYtXHRcdFx0XHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTA3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTA4OnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMTA5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTExMTYtXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNndvcmtlci1cdTAwM2Vsb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTExNzpcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVx1MDAzZWN1cl93b3JrKSlcbmlvX3VyaW5nL2lvLXdxLmMtMTExOC1cdFx0bWF0Y2gtXHUwMDNlbnJfcnVubmluZyYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTExODktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGlvX3VyaW5nL2lvLXdxLmM6IExpbmVzIDEwOTUtMTEzMCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDEwOTUgdGhyb3VnaCAxMTMwIG9mIGBpb191cmluZy9pby13cS5jYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgaW9fd3Egc3Vic3lzdGVtLCBsaWtlbHkgZm9jdXNpbmcgb24gc29tZSBhc3BlY3Qgb2Ygd29yayBxdWV1ZSBtYW5hZ2VtZW50IG9yIGNvbXBsZXRpb24gaGFuZGxpbmcuIFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LCBidXQganVzdCBiYXNlZCBvbiB0aGUgbG9jYXRpb24sIEkmIzM5O2QgYW50aWNpcGF0ZSB0aGlzIGNvZGUgaXMgaW52b2x2ZWQgaW4gcXVldWluZyBvciByZXRyaWV2aW5nIHRhc2tzIGZvciBvZmZsb2FkIHRvIGEgd29ya2VyIHRocmVhZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIHN1Y2ggYXMgc3BpbmxvY2tzIG9yIG11dGV4ZXMsIGJlY2F1c2UgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgc2hhcmVkIHJlc291cmNlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBwcm90ZWN0aW9uLiBUaGUgY29kZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggZWl0aGVyIHN1Ym1pdHRpbmcgd29yayB0byB0aGUgaW9fd3EsIG9yIGhhbmRsaW5nIGNvbXBsZXRpb25zLiBHaXZlbiB0aGUgcmFuZ2UsIGl0IGNvdWxkIGJlIGEgc21hbGwgZnVuY3Rpb24gb3IgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBjb21wbGV4IGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIGNoZWNrcyBmb3IgZXJyb3IgY29uZGl0aW9ucywgc3VjaCBhcyB0aGUgd29ya2VyIHRocmVhZCBub3QgYmVpbmcgYXZhaWxhYmxlIG9yIGV4Y2VlZGluZyBhIHF1ZXVlIHNpemUsIHdoaWNoIHNob3VsZCBwcm9iYWJseSBpbnZvbHZlIHNvbWUgZm9ybSBvZiBiYWNrb2ZmIG9yIHJldHJ5IGxvZ2ljLiBVbmRlcnN0YW5kaW5nIHRoZSBlcnJvciBoYW5kbGluZyBoZXJlIHdpbGwgYmUgY3J1Y2lhbCBpbiBnYXVnaW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGJlIHdhcnkgb2YgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGlmIHRoZSBjb2RlIGhhbmRsZXMgaW50ZXJydXB0cyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCB0byBoYW5kbGUgSS9PIGNvbXBsZXRpb24uIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDk1Olx0c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbjEwOTY6XHRcdFx0XHRcdCAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCxcbjEwOTc6XHRcdFx0XHRcdCAgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4xMDk4Olx0e1xuMTA5OTpcdFx0aWYgKHdvcmsgXHUwMDI2XHUwMDI2IG1hdGNoLVx1MDAzZWZuKHdvcmssIG1hdGNoLVx1MDAzZWRhdGEpKSB7XG4xMTAwOlx0XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG4xMTAxOlx0XHRcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVx1MDAzZXRhc2spO1xuMTEwMjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdHJldHVybiBmYWxzZTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG4xMTA5Olx0e1xuMTExMDpcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCA9IGRhdGE7XG4xMTExOlx0XG4xMTEyOlx0XHQvKlxuMTExMzpcdFx0ICogSG9sZCB0aGUgbG9jayB0byBhdm9pZCAtXHUwMDNlY3VyX3dvcmsgZ29pbmcgb3V0IG9mIHNjb3BlLCBjYWxsZXJcbjExMTQ6XHRcdCAqIG1heSBkZXJlZmVyZW5jZSB0aGUgcGFzc2VkIGluIHdvcmsuXG4xMTE1Olx0XHQgKi9cbjExMTY6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2d29ya2VyLVx1MDAzZWxvY2spO1xuMTExNzpcdFx0aWYgKF9faW9fd3Ffd29ya2VyX2NhbmNlbCh3b3JrZXIsIG1hdGNoLCB3b3JrZXItXHUwMDNlY3VyX3dvcmspKVxuMTExODpcdFx0XHRtYXRjaC1cdTAwM2Vucl9ydW5uaW5nJiM0MzsmIzQzOztcbjExMTk6XHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZ3b3JrZXItXHUwMDNlbG9jayk7XG4xMTIwOlx0XG4xMTIxOlx0XHRyZXR1cm4gbWF0Y2gtXHUwMDNlbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLVx1MDAzZWNhbmNlbF9hbGw7XG4xMTIyOlx0fVxuMTEyMzpcdFxuMTEyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxuMTEyNTpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbjExMjY6XHRcdFx0XHRcdFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxuMTEyNzpcdFx0XHRcdFx0XHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcbjExMjg6XHR7XG4xMTI5Olx0XHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XG4xMTMwOlx0XHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcbjExMzE6XHRcbjExMzI6XHRcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXHUwMDI2XHUwMDI2IHdvcmsgPT0gd3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XG4xMTMzOlx0XHRcdGlmIChwcmV2KVxuMTEzNDpcdFx0XHRcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIC8gaW8td3EgUGF0Y2g6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2Agd2l0aGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBjYW5jZWxsYXRpb24gb2YgcXVldWVkIHdvcmsuIFRoZSBrZXkgaXMgaW4gaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGFjY291bnRzLCB3aGljaCBhcmUgZWl0aGVyIGJvdW5kIG9yIHVuYm91bmRlZCAoYElPX1dRX0FDQ1RfQk9VTkRgIGFuZCBgSU9fV1FfQUNDVF9VTkJPVU5EYCkuCgpCZWZvcmUgdGhlIHBhdGNoLCBldmVuIGlmIGEgbWF0Y2ggd2FzIGZvdW5kIGZvciBjYW5jZWxsYXRpb24gd2l0aGluIGFuIGFjY291bnQsIHRoZSBjb2RlIHdvdWxkIGl0ZXJhdGUgdGhyb3VnaCAqYWxsKiBhY2NvdW50cyAodGhlIGxvb3AgYGZvciAoaW50IGkgPSAwOyBpICZsdDsgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspYCkuIE5vdywgd2l0aCB0aGUgY2hhbmdlcywgdGhlIGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJldHVybnMgdHJ1ZSBpZiBgIW1hdGNoLSZndDtjYW5jZWxfYWxsYCBhbmQgYSBydW5uaW5nIHdvcmsgaXMgbWF0Y2hlZC4gQ3JpdGljYWxseSwgaWYgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AgcmV0dXJucyB0cnVlLCB0aGUgbWFpbiBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgZnVuY3Rpb24gYnJlYWtzIGl0cyBsb29wICh0aGUgYGlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoJmFtcDt3cS0mZ3Q7YWNjdFtpXSwgbWF0Y2gpKSBicmVhaztgKS4gVGhpcyBpbnRyb2R1Y2VzIGEgc2lnbmlmaWNhbnQgZWFybHktZXhpdCBjb25kaXRpb24gYmFzZWQgb24gdGhlIGZpcnN0IG1hdGNoLgoKVGhlIGNvZGUgY2hhbmdlcyBhcmUgc3VidGxlLCBidXQgdGhleSByZXByZXNlbnQgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiBpbiB0aGUgaW9fdXJpbmcgLyBpby13cSBpbXBsZW1lbnRhdGlvbi4gVGhlIGBpb193cV93b3JrZXJfY2FuY2VsYCBmdW5jdGlvbiBpdHNlbGYgaXMgdGhlIGNvcmUgb2YgdGhpcyBsb2dpYy4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIHJldHVybiB2YWx1ZXMgYXMgc2lnbmlmaWNhbnQ6IGlmIGBtYXRjaC0mZ3Q7Y2FuY2VsX2FsbGAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2U7IGlmIGl0JiMzOTtzIGZhbHNlLCBhbmQgYSB3b3JrZXIgbWF0Y2hlcywgaXQgcmV0dXJucyB0cnVlLCBpbmNyZW1lbnRpbmcgYG1hdGNoLSZndDtucl9ydW5uaW5nYC4KCk5vdywgY29uc2lkZXJpbmcgZnV6emluZywgbGV0JiMzOTtzIGFwcGx5IHRoZSBjcml0ZXJpYS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHBhcnQgb2Ygb25lIG9mIHRoZSBtb3N0IGZ1enplZCBhbmQgY3JpdGljYWwgc3Vic3lzdGVtcyBpbiBMaW51eCEgVGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBhbGdvcml0aG0gZmxvdyBvZiB3b3JrIGNhbmNlbGxhdGlvbi4gSW4gdGhlIGNvbnRleHQgb2YgdGhlIHdvcnRoLWZ1enppbmcgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGl2ZWx5IGZhbGxzIGludG8gdGhlIGNhdGVnb3J5IG9mICYjMzQ7bG9naWMgbW9kaWZpY2F0aW9ucyBpbiAuLi4gY29yZSBzdWJzeXN0ZW1zJiMzNDsgYW5kICYjMzQ7cmVzdHJ1Y3R1cmluZyBvZiAuLi4gYWxnb3JpdGhtIGZsb3dzLiYjMzQ7Cgppb191cmluZyBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgY2FuIHVzZSB0aGUgc3RhbmRhcmQgc3lzY2FsbHMgYGlvX3VyaW5nX3NldHVwYCwgYGlvX3VyaW5nX2VudGVyYCwgYW5kIGBpb191cmluZ19yZWdpc3RlcmAgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLiBTeXprYWxsZXIsIGluIHBhcnRpY3VsYXIsIGhhcyBleHRlbnNpdmUgY292ZXJhZ2Ugb2YgaW9fdXJpbmcuIFRoaXMgbWFrZXMgdGhpcyBwYXRjaCBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGUgZ2l0IGxvZyBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgcmF0aW9uYWxlIGFuZCBpbnRlbnQgYmVoaW5kIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTE4ND1zdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTk0LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk1OnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbmlvX3VyaW5nL2lvLXdxLmMtMTE5Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTIwNz1lbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbi0tXG5pb191cmluZy9pby13cS5jLTEyMzItXG5pb191cmluZy9pby13cS5jOjEyMzM6XHRpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHdxLCBcdTAwMjZtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTEyMzQtXHRpZiAobWF0Y2gubnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzQwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGlvX3dxX2NhbmNlbF9jYmAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgaW9fd3FfY2FuY2VsX2NiYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGNhbGxiYWNrIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcnVubmluZyBhIHF1aWNrIHNlYXJjaCwgcHJvYmFibHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGdyZXBgIG9yIGBjc2NvcGVgIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdCBzZXR1cCwgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgcGFzc2luZyBpbnRvIGl0LCBjb250ZXh0LXdpc2UsIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlLiBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IGl0IGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgSS9PIGNvbXBsZXRpb24gZnJhbWV3b3JrLiBBcmUgd2UgdGFsa2luZyBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRocmVhZCBwb29scywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjYWxsIGNvbnRleHQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bSBsb29raW5nIGZvciBib3RoIGRpcmVjdCBjYWxscyBhbmQgYW55IGluZGlyZWN0IGNhbGxzLCBwZXJoYXBzIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm8gZXhwYW5zaW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgSS9PIHdvcmsgcXVldWUgaXRzZWxmLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgSS9PIGlzIHNjaGVkdWxlZCBhbmQgY2FuY2VsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9jYW5jZWxfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvY2FuY2VsLmM9Nzg9c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTg4LVx0YWxsID0gY2QtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfQVNZTkNfQ0FOQ0VMX0FMTHxJT1JJTkdfQVNZTkNfQ0FOQ0VMX0FOWSk7XG5pb191cmluZy9jYW5jZWwuYzo4OTpcdGNhbmNlbF9yZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cdTAwM2Vpb193cSwgaW9fY2FuY2VsX2NiLCBjZCwgYWxsKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTkwLVx0c3dpdGNoIChjYW5jZWxfcmV0KSB7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtNTA1LVx0XHRcdGNvbnRpbnVlO1xuaW9fdXJpbmcvY2FuY2VsLmM6NTA2Olx0XHRjcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XG5pb191cmluZy9jYW5jZWwuYy01MDctXHRcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTUzOS1cdFx0ICovXG5pb191cmluZy9jYW5jZWwuYzo1NDA6XHRcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cdTAwM2Vpb193cSwgaW9fY2FuY2VsX3Rhc2tfY2IsXG5pb191cmluZy9jYW5jZWwuYy01NDEtXHRcdFx0XHQgICAgICAgXHUwMDI2Y2FuY2VsLCB0cnVlKTtcbi0tXG5pb191cmluZy9pby13cS5jPTExOTU9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTIwNi1cbmlvX3VyaW5nL2lvLXdxLmM6MTIwNzplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbmlvX3VyaW5nL2lvLXdxLmMtMTIwOC1cdFx0XHRcdCAgdm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmg9NjQ9dHlwZWRlZiBib29sICh3b3JrX2NhbmNlbF9mbikoc3RydWN0IGlvX3dxX3dvcmsgKiwgdm9pZCAqKTtcbmlvX3VyaW5nL2lvLXdxLmgtNjUtXG5pb191cmluZy9pby13cS5oOjY2OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuaW9fdXJpbmcvaW8td3EuaC02Ny1cdFx0XHRcdFx0dm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIzMDk9c3RhdGljIF9fY29sZCB2b2lkIGlvX3JpbmdfZXhpdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIzNDgtXHRcdFx0aWYgKHRzayBcdTAwMjZcdTAwMjYgdHNrLVx1MDAzZWlvX3VyaW5nIFx1MDAyNlx1MDAyNiB0c2stXHUwMDNlaW9fdXJpbmctXHUwMDNlaW9fd3EpXG5pb191cmluZy9pb191cmluZy5jOjIzNDk6XHRcdFx0XHRpb193cV9jYW5jZWxfY2IodHNrLVx1MDAzZWlvX3VyaW5nLVx1MDAzZWlvX3dxLFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzUwLVx0XHRcdFx0XHRcdGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgaW9fd3FfY2FuY2VsX2NiKioKCk9rYXksIHNvIGBpb193cV9jYW5jZWxfY2JgIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGEgY291cGxlIG9mIGltcG9ydGFudCBsb2NhdGlvbnMuIFByaW1hcmlseSwgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgaW9fYXN5bmNfY2FuY2VsX29uZWAsIHdoaWNoIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMYCBvcGVyYXRpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBtZWNoYW5pc20gZm9yIGNhbmNlbGxpbmcgYXN5bmNocm9ub3VzIEkvTyByZXF1ZXN0cy4gQnV0LCBpdCYjMzk7cyBhbHNvIHVzZWQgZHVyaW5nIGNvbnRleHQgZXhpdCBhbmQgd2hlbiByZXF1ZXN0cyBhcmUgZXhwbGljaXRseSBjYW5jZWxsZWQgdGhyb3VnaCBvdGhlciBtZWFucy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBjYW5jZWxsYXRpb24gZnJvbSBtdWx0aXBsZSBzb3VyY2VzIG1ha2VzIGl0IGEgY3JpdGljYWwgcGFydCBvZiB0aGUgSS9PIHJpbmcgbWFuYWdlbWVudC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUsIGxldCYjMzk7cyBkaXZlIGludG8gYGlvX2FzeW5jX2NhbmNlbF9vbmVgLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBjb29yZGluYXRpbmcgd2l0aCBgaW9fd3FfY2FuY2VsX2NiYCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYmV5b25kIHRoZSBvYnZpb3VzIGBBU1lOQ19DQU5DRUxgIHBhdGguIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIGltcGxpY2F0aW9ucyBoZXJlIGZvciByZXNvdXJjZSBjbGVhbnVwIGFuZCBwcmV2ZW50aW5nIGRvdWJsZS1mcmVlcywgc28gbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2NhbmNlbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdHN0YXRpYyBib29sIGlvX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqZGF0YSlcbiAgNzE6XHR7XG4gIDcyOlx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9fa2lvY2IsIHdvcmspO1xuICA3MzpcdFx0c3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCA9IGRhdGE7XG4gIDc0Olx0XG4gIDc1Olx0XHRyZXR1cm4gaW9fY2FuY2VsX3JlcV9tYXRjaChyZXEsIGNkKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxuICA3OTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkKVxuICA4MDpcdHtcbiAgODE6XHRcdGVudW0gaW9fd3FfY2FuY2VsIGNhbmNlbF9yZXQ7XG4gIDgyOlx0XHRpbnQgcmV0ID0gMDtcbiAgODM6XHRcdGJvb2wgYWxsO1xuICA4NDpcdFxuICA4NTpcdFx0aWYgKCF0Y3R4IHx8ICF0Y3R4LVx1MDAzZWlvX3dxKVxuICA4NjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAgODc6XHRcbiAgODg6XHRcdGFsbCA9IGNkLVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX0FTWU5DX0NBTkNFTF9BTEx8SU9SSU5HX0FTWU5DX0NBTkNFTF9BTlkpO1xuICA4OTpcdFx0Y2FuY2VsX3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xuICA5MDpcdFx0c3dpdGNoIChjYW5jZWxfcmV0KSB7XG4gIDkxOlx0XHRjYXNlIElPX1dRX0NBTkNFTF9PSzpcbiAgOTI6XHRcdFx0cmV0ID0gMDtcbiAgOTM6XHRcdFx0YnJlYWs7XG4gIDk0Olx0XHRjYXNlIElPX1dRX0NBTkNFTF9SVU5OSU5HOlxuICA5NTpcdFx0XHRyZXQgPSAtRUFMUkVBRFk7XG4gIDk2Olx0XHRcdGJyZWFrO1xuICA5NzpcdFx0Y2FzZSBJT19XUV9DQU5DRUxfTk9URk9VTkQ6XG4gIDk4Olx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gIDk5Olx0XHRcdGJyZWFrO1xuIDEwMDpcdFx0fVxuIDEwMTpcdFxuIDEwMjpcdFx0cmV0dXJuIHJldDtcbiAxMDM6XHR9XG4gMTA0Olx0XG4gMTA1Olx0aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG4gMTA2Olx0XHRcdCAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4gMTA3Olx0e1xuIDEwODpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBjZC1cdTAwM2VjdHg7XG4gMTA5Olx0XHRpbnQgcmV0O1xuIDExMDpcdFxuIDExMTpcdFx0V0FSTl9PTl9PTkNFKCFpb193cV9jdXJyZW50X2lzX3dvcmtlcigpIFx1MDAyNlx1MDAyNiB0Y3R4ICE9IGN1cnJlbnQtXHUwMDNlaW9fdXJpbmcpO1xuIDExMjpcdFxuIDExMzpcdFx0cmV0ID0gaW9fYXN5bmNfY2FuY2VsX29uZSh0Y3R4LCBjZCk7XG4gMTE0Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIGlvX3VyaW5nL2lvLXdxLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpb191cmluZy9pby13cS5jYCBmaWxlIGFuZCBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSBnb3Zlcm5pbmcgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZWl0aGVyIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseSwgYXMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIG9yIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBiYXNlZCBvbiBLY29uZmlnIHN5bWJvbHMuIExldCYjMzk7cyBzZWUgd2hhdCBjbHVlcyB3ZSBjYW4gZmluZCBpbiBlaXRoZXIgb2YgdGhvc2UgbG9jYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byB1bmNvdmVyIHRoZSByZWxldmFudCBzeW1ib2xzIHF1aWNrbHk7IHRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgaW9fdXJpbmdcbiAgIDQ6XHRcbiAgIDU6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX1VSSU5HXG4gICA2Olx0R0NPVl9QUk9GSUxFIDo9IHlcbiAgIDc6XHRlbmRpZlxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19JT19VUklORylcdFx0JiM0Mzs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcbiAgMTA6XHRcdFx0XHRcdFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXG4gIDExOlx0XHRcdFx0XHRcdHR3Lm8gd2FpdC5vIGV2ZW50ZmQubyB1cmluZ19jbWQubyBcXFxuICAxMjpcdFx0XHRcdFx0XHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXG4gIDEzOlx0XHRcdFx0XHRcdGZzLm8gc3BsaWNlLm8gc3luYy5vIG1zZ19yaW5nLm8gXFxcbiAgMTQ6XHRcdFx0XHRcdFx0YWR2aXNlLm8gb3BlbmNsb3NlLm8gc3RhdHgubyB0aW1lb3V0Lm8gXFxcbiAgMTU6XHRcdFx0XHRcdFx0Y2FuY2VsLm8gd2FpdGlkLm8gcmVnaXN0ZXIubyBcXFxuICAxNjpcdFx0XHRcdFx0XHR0cnVuY2F0ZS5vIG1lbW1hcC5vIGFsbG9jX2NhY2hlLm8gXFxcbiAgMTc6XHRcdFx0XHRcdFx0cXVlcnkubyBsb29wLm9cbiAgMTg6XHRcbiAgMTk6XHRvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcdCYjNDM7PSB6Y3J4Lm9cbiAgMjA6XHRvYmotJChDT05GSUdfSU9fV1EpXHRcdCYjNDM7PSBpby13cS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTM5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSB0YXNrIGlzIHByZXR0eSBjbGVhciwgYW5kIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIHRoZSBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpb191cmluZywgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBjb250cm9sbGFibGUsIHdoYXQgZGVmYXVsdHMgYXJlIHNldCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZXNzZW50aWFsbHkgYmUgdGhlIHJvYWRtYXAgZm9yIGhvdyB0aGlzIG1vZHVsZSBiZWhhdmVzLCB3aGljaCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhdCB0aGlzIHBvaW50LiBUaW1lIHRvIGdldCBzdGFydGVkIGFuZCBzZWUgd2hhdCB3ZSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJT19XUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcdCYjNDM7PSB6Y3J4Lm9cbmlvX3VyaW5nL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbmlvX3VyaW5nL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19GVVRFWClcdFx0JiM0Mzs9IGZ1dGV4Lm9cbi0tXG5pb191cmluZy9jYW5jZWwuYz03OD1zdGF0aWMgaW50IGlvX2FzeW5jX2NhbmNlbF9vbmUoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtOTAtXHRzd2l0Y2ggKGNhbmNlbF9yZXQpIHtcbmlvX3VyaW5nL2NhbmNlbC5jOjkxOlx0Y2FzZSBJT19XUV9DQU5DRUxfT0s6XG5pb191cmluZy9jYW5jZWwuYy05Mi1cdFx0cmV0ID0gMDtcbmlvX3VyaW5nL2NhbmNlbC5jLTkzLVx0XHRicmVhaztcbmlvX3VyaW5nL2NhbmNlbC5jOjk0Olx0Y2FzZSBJT19XUV9DQU5DRUxfUlVOTklORzpcbmlvX3VyaW5nL2NhbmNlbC5jLTk1LVx0XHRyZXQgPSAtRUFMUkVBRFk7XG5pb191cmluZy9jYW5jZWwuYy05Ni1cdFx0YnJlYWs7XG5pb191cmluZy9jYW5jZWwuYzo5NzpcdGNhc2UgSU9fV1FfQ0FOQ0VMX05PVEZPVU5EOlxuaW9fdXJpbmcvY2FuY2VsLmMtOTgtXHRcdHJldCA9IC1FTk9FTlQ7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtNTA2LVx0XHRjcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XG5pb191cmluZy9jYW5jZWwuYzo1MDc6XHRcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xuaW9fdXJpbmcvY2FuY2VsLmMtNTA4LVx0fVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cdFx0XHRcdCAgICAgICBcdTAwMjZjYW5jZWwsIHRydWUpO1xuaW9fdXJpbmcvY2FuY2VsLmM6NTQyOlx0XHRyZXQgfD0gKGNyZXQgIT0gSU9fV1FfQ0FOQ0VMX05PVEZPVU5EKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTU0My1cdH1cbi0tXG5pb191cmluZy9pby13cS5jPTM3PWVudW0ge1xuaW9fdXJpbmcvaW8td3EuYzozODpcdElPX1dRX0JJVF9FWElUXHRcdD0gMCxcdC8qIHdxIGV4aXRpbmcgKi9cbmlvX3VyaW5nL2lvLXdxLmM6Mzk6XHRJT19XUV9CSVRfRVhJVF9PTl9JRExFXHQ9IDEsXHQvKiBhbGxvdyBhbGwgd29ya2VycyB0byBleGl0IG9uIGlkbGUgKi9cbmlvX3VyaW5nL2lvLXdxLmMtNDAtfTtcbi0tXG5pb191cmluZy9pby13cS5jPTQ5PXN0cnVjdCBpb193b3JrZXIge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzMtI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjRcbmlvX3VyaW5nL2lvLXdxLmM6NzQ6I2RlZmluZSBJT19XUV9IQVNIX09SREVSXHQ2XG5pb191cmluZy9pby13cS5jLTc1LSNlbHNlXG5pb191cmluZy9pby13cS5jOjc2OiNkZWZpbmUgSU9fV1FfSEFTSF9PUkRFUlx0NVxuaW9fdXJpbmcvaW8td3EuYy03Ny0jZW5kaWZcbmlvX3VyaW5nL2lvLXdxLmMtNzgtXG5pb191cmluZy9pby13cS5jOjc5OiNkZWZpbmUgSU9fV1FfTlJfSEFTSF9CVUNLRVRTXHQoMXUgXHUwMDNjXHUwMDNjIElPX1dRX0hBU0hfT1JERVIpXG5pb191cmluZy9pby13cS5jLTgwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTA4PWVudW0ge1xuaW9fdXJpbmcvaW8td3EuYzoxMDk6XHRJT19XUV9BQ0NUX0JPVU5ELFxuaW9fdXJpbmcvaW8td3EuYzoxMTA6XHRJT19XUV9BQ0NUX1VOQk9VTkQsXG5pb191cmluZy9pby13cS5jOjExMTpcdElPX1dRX0FDQ1RfTlIsXG5pb191cmluZy9pby13cS5jLTExMi19O1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE3PXN0cnVjdCBpb193cSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjgtXG5pb191cmluZy9pby13cS5jOjEyOTpcdHN0cnVjdCBpb193cV9hY2N0IGFjY3RbSU9fV1FfQUNDVF9OUl07XG5pb191cmluZy9pby13cS5jLTEzMC1cbi0tXG5pb191cmluZy9pby13cS5jLTEzMi1cbmlvX3VyaW5nL2lvLXdxLmM6MTMzOlx0c3RydWN0IGlvX3dxX3dvcmsgKmhhc2hfdGFpbFtJT19XUV9OUl9IQVNIX0JVQ0tFVFNdO1xuaW9fdXJpbmcvaW8td3EuYy0xMzQtXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xNTY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pb19nZXRfd29ya19oYXNoKHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxuaW9fdXJpbmcvaW8td3EuYy0xNTcte1xuaW9fdXJpbmcvaW8td3EuYzoxNTg6XHRyZXR1cm4gd29ya19mbGFncyBcdTAwM2VcdTAwM2UgSU9fV1FfSEFTSF9TSElGVDtcbmlvX3VyaW5nL2lvLXdxLmMtMTU5LX1cbi0tXG5pb191cmluZy9pby13cS5jPTE3Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb193cV9hY2N0ICppb19nZXRfYWNjdChzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGJvdW5kKVxuaW9fdXJpbmcvaW8td3EuYy0xNzgte1xuaW9fdXJpbmcvaW8td3EuYzoxNzk6XHRyZXR1cm4gXHUwMDI2d3EtXHUwMDNlYWNjdFtib3VuZCA/IElPX1dRX0FDQ1RfQk9VTkQgOiBJT19XUV9BQ0NUX1VOQk9VTkRdO1xuaW9fdXJpbmcvaW8td3EuYy0xODAtfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTgyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX3dvcmtfZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSxcbi0tXG5pb191cmluZy9pby13cS5jLTE4NC17XG5pb191cmluZy9pby13cS5jOjE4NTpcdHJldHVybiBpb19nZXRfYWNjdCh3cSwgISh3b3JrX2ZsYWdzIFx1MDAyNiBJT19XUV9XT1JLX1VOQk9VTkQpKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTg2LX1cbi0tXG5pb191cmluZy9pby13cS5jPTE5OT1ib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yMDUtXG5pb191cmluZy9pby13cS5jOjIwNjpcdHJldHVybiB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXHUwMDI2d29ya2VyLVx1MDAzZXdxLVx1MDAzZXN0YXRlKTtcbmlvX3VyaW5nL2lvLXdxLmMtMjA3LX1cbi0tXG5pb191cmluZy9pby13cS5jPTM5MT1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbi0tXG5pb191cmluZy9pby13cS5jLTM5Ny1cdC8qIHJhY2VkIHdpdGggZXhpdCwganVzdCBpZ25vcmUgY3JlYXRlIGNhbGwgKi9cbmlvX3VyaW5nL2lvLXdxLmM6Mzk4Olx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpXG5pb191cmluZy9pby13cS5jLTM5OS1cdFx0Z290byBmYWlsO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVx0XHQgKi9cbmlvX3VyaW5nL2lvLXdxLmM6NDIxOlx0XHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSlcbmlvX3VyaW5nL2lvLXdxLmMtNDIyLVx0XHRcdGlvX3dxX2NhbmNlbF90d19jcmVhdGUod3EpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9NjAyPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9oYW5kbGVfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTY0My1cdFx0ZG8ge1xuaW9fdXJpbmcvaW8td3EuYzo2NDQ6XHRcdFx0Ym9vbCBkb19raWxsID0gdGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjQ1LVx0XHRcdHN0cnVjdCBpb193cV93b3JrICpuZXh0X2hhc2hlZCwgKmxpbmtlZDtcbi0tXG5pb191cmluZy9pby13cS5jLTY1NC1cdFx0XHRpZiAoZG9fa2lsbCBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL2lvLXdxLmM6NjU1Olx0XHRcdCAgICAod29ya19mbGFncyBcdTAwMjYgSU9fV1FfV09SS19VTkJPVU5EKSlcbmlvX3VyaW5nL2lvLXdxLmM6NjU2Olx0XHRcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjU3LVx0XHRcdHJlcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9fa2lvY2IsIHdvcmspO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9NjkwPXN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy03MDMtXG5pb191cmluZy9pby13cS5jOjcwNDpcdHdoaWxlICghdGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSkge1xuaW9fdXJpbmcvaW8td3EuYy03MDUtXHRcdGxvbmcgcmV0O1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzI0LVx0XHRpZiAoKGxhc3RfdGltZW91dCBcdTAwMjZcdTAwMjYgKGV4aXRfbWFzayB8fCBhY2N0LVx1MDAzZW5yX3dvcmtlcnMgXHUwMDNlIDEpKSB8fFxuaW9fdXJpbmcvaW8td3EuYzo3MjU6XHRcdCAgICB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVF9PTl9JRExFLCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpIHtcbmlvX3VyaW5nL2lvLXdxLmMtNzI2LVx0XHRcdGFjY3QtXHUwMDNlbnJfd29ya2Vycy0tO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVxuaW9fdXJpbmcvaW8td3EuYzo3NTE6XHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjYgaW9fYWNjdF9ydW5fcXVldWUoYWNjdCkpXG5pb191cmluZy9pby13cS5jLTc1Mi1cdFx0aW9fd29ya2VyX2hhbmRsZV93b3JrKGFjY3QsIHdvcmtlcik7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz05NjQ9c3RhdGljIHZvaWQgaW9fd3FfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05Njcte1xuaW9fdXJpbmcvaW8td3EuYzo5Njg6XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG5pb191cmluZy9pby13cS5jLTk2OS1cdFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9OTgwPXZvaWQgaW9fd3Ffc2V0X2V4aXRfb25faWRsZShzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGVuYWJsZSlcbi0tXG5pb191cmluZy9pby13cS5jLTk4NS1cdGlmICghZW5hYmxlKSB7XG5pb191cmluZy9pby13cS5jOjk4NjpcdFx0Y2xlYXJfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFx1MDAyNndxLVx1MDAzZXN0YXRlKTtcbmlvX3VyaW5nL2lvLXdxLmMtOTg3LVx0XHRyZXR1cm47XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05ODktXG5pb191cmluZy9pby13cS5jOjk5MDpcdGlmICh0ZXN0X2FuZF9zZXRfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSlcbmlvX3VyaW5nL2lvLXdxLmMtOTkxLVx0XHRyZXR1cm47XG4tLVxuaW9fdXJpbmcvaW8td3EuYz05OTg9c3RhdGljIHZvaWQgaW9fcnVuX2NhbmNlbChzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTEwMDAtXHRkbyB7XG5pb191cmluZy9pby13cS5jOjEwMDE6XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jLTEwMDItXHRcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTAzMz12b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDQ3LVx0ICovXG5pb191cmluZy9pby13cS5jOjEwNDg6XHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSB8fFxuaW9fdXJpbmcvaW8td3EuYzoxMDQ5Olx0ICAgICh3b3JrX2ZsYWdzIFx1MDAyNiBJT19XUV9XT1JLX0NBTkNFTCkpIHtcbmlvX3VyaW5nL2lvLXdxLmMtMTA1MC1cdFx0aW9fcnVuX2NhbmNlbCh3b3JrLCB3cSk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDYyLVxuaW9fdXJpbmcvaW8td3EuYzoxMDYzOlx0aWYgKGRvX2NyZWF0ZSBcdTAwMjZcdTAwMjYgKCh3b3JrX2ZsYWdzIFx1MDAyNiBJT19XUV9XT1JLX0NPTkNVUlJFTlQpIHx8XG5pb191cmluZy9pby13cS5jLTEwNjQtXHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZykpKSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDg3PXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDkwLVxuaW9fdXJpbmcvaW8td3EuYzoxMDkxOlx0Yml0ID0gaGFzaF9wdHIodmFsLCBJT19XUV9IQVNIX09SREVSKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTA5MjpcdGF0b21pY19vcihJT19XUV9XT1JLX0hBU0hFRCB8IChiaXQgXHUwMDNjXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTA5My19XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDk1PXN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDk5LVx0aWYgKHdvcmsgXHUwMDI2XHUwMDI2IG1hdGNoLVx1MDAzZWZuKHdvcmssIG1hdGNoLVx1MDAzZWRhdGEpKSB7XG5pb191cmluZy9pby13cS5jOjExMDA6XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jLTExMDEtXHRcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVx1MDAzZXRhc2spO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE2OD1zdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTcyLXJldHJ5OlxuaW9fdXJpbmcvaW8td3EuYzoxMTczOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbmlvX3VyaW5nL2lvLXdxLmMtMTE3NC1cdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb19nZXRfYWNjdCh3cSwgaSA9PSAwKTtcbi0tXG5pb191cmluZy9pby13cS5jPTExOTU9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE5OS1cbmlvX3VyaW5nL2lvLXdxLmM6MTIwMDpcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbmlvX3VyaW5nL2lvLXdxLmMtMTIwMS1cdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMjA3PWVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTIzMC1cdGlmIChtYXRjaC5ucl9wZW5kaW5nIFx1MDAyNlx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcbmlvX3VyaW5nL2lvLXdxLmM6MTIzMTpcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcbmlvX3VyaW5nL2lvLXdxLmMtMTIzMi1cbi0tXG5pb191cmluZy9pby13cS5jLTEyMzQtXHRpZiAobWF0Y2gubnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXG5pb191cmluZy9pby13cS5jOjEyMzU6XHRcdHJldHVybiBJT19XUV9DQU5DRUxfUlVOTklORztcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNi1cbmlvX3VyaW5nL2lvLXdxLmMtMTIzNy1cdGlmIChtYXRjaC5ucl9ydW5uaW5nKVxuaW9fdXJpbmcvaW8td3EuYzoxMjM4Olx0XHRyZXR1cm4gSU9fV1FfQ0FOQ0VMX1JVTk5JTkc7XG5pb191cmluZy9pby13cS5jLTEyMzktXHRpZiAobWF0Y2gubnJfcGVuZGluZylcbmlvX3VyaW5nL2lvLXdxLmM6MTI0MDpcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcbmlvX3VyaW5nL2lvLXdxLmM6MTI0MTpcdHJldHVybiBJT19XUV9DQU5DRUxfTk9URk9VTkQ7XG5pb191cmluZy9pby13cS5jLTEyNDItfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTI0ND1zdGF0aWMgaW50IGlvX3dxX2hhc2hfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSxcbi0tXG5pb191cmluZy9pby13cS5jLTEyNTItXHRyY3VfcmVhZF9sb2NrKCk7XG5pb191cmluZy9pby13cS5jOjEyNTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykge1xuaW9fdXJpbmcvaW8td3EuYy0xMjU0LVx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFx1MDAyNndxLVx1MDAzZWFjY3RbaV07XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMjYzPXN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTI4Mi1cdGNwdXNldF9jcHVzX2FsbG93ZWQoZGF0YS1cdTAwM2V0YXNrLCB3cS1cdTAwM2VjcHVfbWFzayk7XG5pb191cmluZy9pby13cS5jOjEyODM6XHR3cS1cdTAwM2VhY2N0W0lPX1dRX0FDQ1RfQk9VTkRdLm1heF93b3JrZXJzID0gYm91bmRlZDtcbmlvX3VyaW5nL2lvLXdxLmM6MTI4NDpcdHdxLVx1MDAzZWFjY3RbSU9fV1FfQUNDVF9VTkJPVU5EXS5tYXhfd29ya2VycyA9XG5pb191cmluZy9pby13cS5jLTEyODUtXHRcdFx0XHR0YXNrX3JsaW1pdChjdXJyZW50LCBSTElNSVRfTlBST0MpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTI4Ny1cdHdxLVx1MDAzZXdhaXQuZnVuYyA9IGlvX3dxX2hhc2hfd2FrZTtcbmlvX3VyaW5nL2lvLXdxLmM6MTI4ODpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jLTEyODktXHRcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gXHUwMDI2d3EtXHUwMDNlYWNjdFtpXTtcbi0tXG5pb191cmluZy9pby13cS5jPTEzMjg9dm9pZCBpb193cV9leGl0X3N0YXJ0KHN0cnVjdCBpb193cSAqd3EpXG5pb191cmluZy9pby13cS5jLTEzMjkte1xuaW9fdXJpbmcvaW8td3EuYzoxMzMwOlx0c2V0X2JpdChJT19XUV9CSVRfRVhJVCwgXHUwMDI2d3EtXHUwMDNlc3RhdGUpO1xuaW9fdXJpbmcvaW8td3EuYy0xMzMxLX1cbi0tXG5pb191cmluZy9pby13cS5jPTE0MDc9dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTQwOC17XG5pb191cmluZy9pby13cS5jOjE0MDk6XHRXQVJOX09OX09OQ0UoIXRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDEwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTQ4OT1pbnQgaW9fd3FfbWF4X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSwgaW50ICpuZXdfY291bnQpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNDkxLVx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3Q7XG5pb191cmluZy9pby13cS5jOjE0OTI6XHRpbnQgcHJldltJT19XUV9BQ0NUX05SXTtcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5My1cdGludCBpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDk0LVxuaW9fdXJpbmcvaW8td3EuYzoxNDk1Olx0QlVJTERfQlVHX09OKChpbnQpIElPX1dRX0FDQ1RfQk9VTkQgICAhPSAoaW50KSBJT19XUV9CT1VORCk7XG5pb191cmluZy9pby13cS5jOjE0OTY6XHRCVUlMRF9CVUdfT04oKGludCkgSU9fV1FfQUNDVF9VTkJPVU5EICE9IChpbnQpIElPX1dRX1VOQk9VTkQpO1xuaW9fdXJpbmcvaW8td3EuYzoxNDk3Olx0QlVJTERfQlVHX09OKChpbnQpIElPX1dRX0FDQ1RfTlIgICAgICAhPSAyKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5OC1cbmlvX3VyaW5nL2lvLXdxLmM6MTQ5OTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jLTE1MDAtXHRcdGlmIChuZXdfY291bnRbaV0gXHUwMDNlIHRhc2tfcmxpbWl0KGN1cnJlbnQsIFJMSU1JVF9OUFJPQykpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNTAzLVxuaW9fdXJpbmcvaW8td3EuYzoxNTA0Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG5pb191cmluZy9pby13cS5jLTE1MDUtXHRcdHByZXZbaV0gPSAwO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTUwOC1cbmlvX3VyaW5nL2lvLXdxLmM6MTUwOTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jLTE1MTAtXHRcdGFjY3QgPSBcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTUxOC1cbmlvX3VyaW5nL2lvLXdxLmM6MTUxOTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KVxuaW9fdXJpbmcvaW8td3EuYy0xNTIwLVx0XHRuZXdfY291bnRbaV0gPSBwcmV2W2ldO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuaW9fdXJpbmcvaW8td3EuaDoyOiNpZm5kZWYgSU5URVJOQUxfSU9fV1FfSFxuaW9fdXJpbmcvaW8td3EuaDozOiNkZWZpbmUgSU5URVJOQUxfSU9fV1FfSFxuaW9fdXJpbmcvaW8td3EuaC00LVxuLS1cbmlvX3VyaW5nL2lvLXdxLmg9MTA9ZW51bSB7XG5pb191cmluZy9pby13cS5oOjExOlx0SU9fV1FfV09SS19DQU5DRUxcdD0gMSxcbmlvX3VyaW5nL2lvLXdxLmg6MTI6XHRJT19XUV9XT1JLX0hBU0hFRFx0PSAyLFxuaW9fdXJpbmcvaW8td3EuaDoxMzpcdElPX1dRX1dPUktfVU5CT1VORFx0PSA0LFxuaW9fdXJpbmcvaW8td3EuaDoxNDpcdElPX1dRX1dPUktfQ09OQ1VSUkVOVFx0PSAxNixcbmlvX3VyaW5nL2lvLXdxLmgtMTUtXG5pb191cmluZy9pby13cS5oOjE2Olx0SU9fV1FfSEFTSF9TSElGVFx0PSAyNCxcdC8qIHVwcGVyIDggYml0cyBhcmUgdXNlZCBmb3IgaGFzaCBrZXkgKi9cbmlvX3VyaW5nL2lvLXdxLmgtMTctfTtcbi0tXG5pb191cmluZy9pby13cS5oPTE5PWVudW0gaW9fd3FfY2FuY2VsIHtcbmlvX3VyaW5nL2lvLXdxLmg6MjA6XHRJT19XUV9DQU5DRUxfT0ssXHQvKiBjYW5jZWxsZWQgYmVmb3JlIHN0YXJ0ZWQgKi9cbmlvX3VyaW5nL2lvLXdxLmg6MjE6XHRJT19XUV9DQU5DRUxfUlVOTklORyxcdC8qIGZvdW5kLCBydW5uaW5nLCBhbmQgYXR0ZW1wdGVkIGNhbmNlbGxlZCAqL1xuaW9fdXJpbmcvaW8td3EuaDoyMjpcdElPX1dRX0NBTkNFTF9OT1RGT1VORCxcdC8qIHdvcmsgbm90IGZvdW5kICovXG5pb191cmluZy9pby13cS5oLTIzLX07XG4tLVxuaW9fdXJpbmcvaW8td3EuaD01ND1zdGF0aWMgaW5saW5lIGJvb2wgX19pb193cV9pc19oYXNoZWQodW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXG5pb191cmluZy9pby13cS5oLTU1LXtcbmlvX3VyaW5nL2lvLXdxLmg6NTY6XHRyZXR1cm4gd29ya19mbGFncyBcdTAwMjYgSU9fV1FfV09SS19IQVNIRUQ7XG5pb191cmluZy9pby13cS5oLTU3LX1cbi0tXG5pb191cmluZy9pby13cS5oPTY2PWVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmgtNjgtXG5pb191cmluZy9pby13cS5oOjY5OiNpZiBkZWZpbmVkKENPTkZJR19JT19XUSlcbmlvX3VyaW5nL2lvLXdxLmgtNzAtZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTM2MT1zdGF0aWMgdm9pZCBpb19wcmVwX2FzeW5jX3dvcmsoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zNzItXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9GT1JDRV9BU1lOQylcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MzczOlx0XHRhdG9taWNfb3IoSU9fV1FfV09SS19DT05DVVJSRU5ULCBcdTAwMjZyZXEtXHUwMDNld29yay5mbGFncyk7XG5pb191cmluZy9pb191cmluZy5jLTM3NC1cbi0tXG5pb191cmluZy9pb191cmluZy5jLTM4OC1cdFx0aWYgKGRlZi1cdTAwM2V1bmJvdW5kX25vbnJlZ19maWxlKVxuaW9fdXJpbmcvaW9fdXJpbmcuYzozODk6XHRcdFx0YXRvbWljX29yKElPX1dRX1dPUktfVU5CT1VORCwgXHUwMDI2cmVxLVx1MDAzZXdvcmsuZmxhZ3MpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0zOTAtXHR9XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz00MTA9dm9pZCBpb19xdWV1ZV9pb3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMxLVx0aWYgKFdBUk5fT05fT05DRSghc2FtZV90aHJlYWRfZ3JvdXAodGN0eC1cdTAwM2V0YXNrLCBjdXJyZW50KSkpXG5pb191cmluZy9pb191cmluZy5jOjQzMjpcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZyZXEtXHUwMDNld29yay5mbGFncyk7XG5pb191cmluZy9pb191cmluZy5jLTQzMy1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTE0NjY9dm9pZCBpb193cV9zdWJtaXRfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE0ODAtXHQvKiBlaXRoZXIgY2FuY2VsbGVkIG9yIGlvLXdxIGlzIGR5aW5nLCBzbyBkb24mIzM5O3QgdG91Y2ggdGN0eC1cdTAwM2Vpb3dxICovXG5pb191cmluZy9pb191cmluZy5jOjE0ODE6XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2d29yay1cdTAwM2VmbGFncykgXHUwMDI2IElPX1dRX1dPUktfQ0FOQ0VMKSB7XG5pb191cmluZy9pb191cmluZy5jLTE0ODItZmFpbDpcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE0ODctXHRcdGVyciA9IC1FQkFERjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ4ODpcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQ4OS1cdFx0Z290byBmYWlsO1xuLS1cbmlvX3VyaW5nL3BvbGwuYz0zND1zdHJ1Y3QgaW9fcG9sbF90YWJsZSB7XG4tLVxuaW9fdXJpbmcvcG9sbC5jLTUzLVxuaW9fdXJpbmcvcG9sbC5jOjU0OiNkZWZpbmUgSU9fV1FFX0ZfRE9VQkxFXHRcdDFcbmlvX3VyaW5nL3BvbGwuYy01NS1cbi0tXG5pb191cmluZy9wb2xsLmM9NTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fa2lvY2IgKndxZV90b19yZXEoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndxZSlcbi0tXG5pb191cmluZy9wb2xsLmMtNjItXG5pb191cmluZy9wb2xsLmM6NjM6XHRyZXR1cm4gKHN0cnVjdCBpb19raW9jYiAqKShwcml2IFx1MDAyNiB+SU9fV1FFX0ZfRE9VQkxFKTtcbmlvX3VyaW5nL3BvbGwuYy02NC19XG4tLVxuaW9fdXJpbmcvcG9sbC5jPTY2PXN0YXRpYyBpbmxpbmUgYm9vbCB3cWVfaXNfZG91YmxlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cWUpXG4tLVxuaW9fdXJpbmcvcG9sbC5jLTY5LVxuaW9fdXJpbmcvcG9sbC5jOjcwOlx0cmV0dXJuIHByaXYgXHUwMDI2IElPX1dRRV9GX0RPVUJMRTtcbmlvX3VyaW5nL3BvbGwuYy03MS19XG4tLVxuaW9fdXJpbmcvcG9sbC5jPTQ2NT1zdGF0aWMgdm9pZCBfX2lvX3F1ZXVlX3Byb2Moc3RydWN0IGlvX3BvbGwgKnBvbGwsIHN0cnVjdCBpb19wb2xsX3RhYmxlICpwdCxcbi0tXG5pb191cmluZy9wb2xsLmMtNDk3LVx0XHQvKiBtYXJrIGFzIGRvdWJsZSB3cSBlbnRyeSAqL1xuaW9fdXJpbmcvcG9sbC5jOjQ5ODpcdFx0d3FlX3ByaXZhdGUgfD0gSU9fV1FFX0ZfRE9VQkxFO1xuaW9fdXJpbmcvcG9sbC5jLTQ5OS1cdFx0aW9faW5pdF9wb2xsX2lvY2IocG9sbCwgZmlyc3QtXHUwMDNlZXZlbnRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUmVsZXZhbnQgS2NvbmZpZyBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbiBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgZm9yIGBDT05GSUdfSU9fV1FgIGFuZCBgQ09ORklHX0lPX1VSSU5HYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgcG90ZW50aWFsbHksIHRvIGdhaW4gaW5zaWdodHMgaW50byB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBmZWF0dXJlIGZsYWdzIHN1cnJvdW5kaW5nIHRoZW0uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZWlyIGVuYWJsZW1lbnQgYXJlLiBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmUsIGRlcGVuZGVudCBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgb3IgZG8gdGhleSBzaW1wbHkgb2ZmZXIgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyBvZiBzaW1pbGFyIGZ1bmN0aW9uYWxpdHk/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBDT05GSUdfSU9fV1EqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19JT19XUWAuIFRoaXMgbWVhbnMgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGNoYWxsZW5nZSwgb2YgY291cnNlLCBpcyB0aGF0IGEgc3ltYm9sIGxpa2UgdGhpcyBjb3VsZCBiZSBkZWZpbmVkIChvciByZWZlcmVuY2VkKSBhbnl3aGVyZSB3aXRoaW4gdGhlIHZhc3Qgc2VhIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSByZWN1cnNpdmUgc2VhcmNoIGFjcm9zcyB0aGUgZW50aXJlIEtjb25maWcgaGllcmFyY2h5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2VseSBgZ3JlcGAgb3IgYGZpbmRgIGNvbWJpbmVkIHdpdGggYGdyZXBgLCB0byBlZmZpY2llbnRseSBsb2NhdGUgYWxsIGluc3RhbmNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZXhhY3QgbWF0Y2hlcywgYnV0IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBwb3NzaWJsZSBpbmRpcmVjdCBkZWZpbml0aW9ucyAoZS5nLiwgdmlhIGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCkuIEkmIzM5O2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlYXJjaCBpcyBwcm9wZXJseSBzY29wZWQgdG8gdGhlIEtjb25maWcgZmlsZXMgc3BlY2lmaWNhbGx5LCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBvdGhlciBzb3VyY2UgZmlsZXMuIE9uY2UgSSBoYXZlIHRoZSBpbml0aWFsIGhpdCBsaXN0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgZWFjaCBkZWZpbml0aW9uIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dDogd2hhdCBhcmNoaXRlY3R1cmUsIHN1YnN5c3RlbSwgYW5kIGRlcGVuZGVuY2llcyBhcmUgaW52b2x2ZWQ/IEFuZCwgcGVyaGFwcyBtb3N0IGltcG9ydGFudGx5LCBob3cgaXMgdGhpcyBzeW1ib2wgKnVzZWQqIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIEkvTyBzdWJzeXN0ZW0/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBtdWx0aS1zdGVwIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19XUSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTQxOT1zb3VyY2UgXCYjMzQ7ZnMvdW5pY29kZS9LY29uZmlnXCYjMzQ7XG5mcy9LY29uZmlnLTQyMC1cbmZzL0tjb25maWc6NDIxOmNvbmZpZyBJT19XUVxuZnMvS2NvbmZpZy00MjItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcmVmbGVjdGluZyB0aGUgYXBwcm9hY2ggSSYjMzk7ZCB0YWtlIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDIxLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgYSBrZXkgc2V0dGluZyBvciByZWxhdGVkIGdyb3VwIG9mIHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgbG9jYXRlZC4gSSYjMzk7bGwgcmVhZCB0aG9zZSAyMCBsaW5lcyBjYXJlZnVsbHksIGxvb2tpbmcgZm9yOgoKKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgc2V0dGluZ3MsIGZlYXR1cmVzLCBvciBrZXJuZWwgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgc2VjdGlvbiBpcyByZWxldmFudD8gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gZmxvdy4KKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogV2hhdCBhcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3M/IEFyZSB0aGV5IHNlbnNpYmxlIGRlZmF1bHRzIGZvciBtb3N0IHVzZSBjYXNlcywgb3IgYXJlIHRoZXkgdGFpbG9yZWQgZm9yIHNwZWNpZmljIHNjZW5hcmlvcz8gVGhpcyByZXZlYWxzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgZGV2ZWxvcGVycy4KKiAgICoqSGVscCBUZXh0OioqIElzIHRoZSBoZWxwIHRleHQgY2xlYXIgYW5kIGNvbmNpc2U/IERvZXMgaXQgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNob2ljZXM/IEFtYmlndWl0eSBoZXJlIGlzIGEgcmVkIGZsYWcuCiogICAqKlN5bWJvbGljIE5hbWVzOioqIEFyZSB0aGV5IHVzaW5nIG1lYW5pbmdmdWwgc3ltYm9saWMgbmFtZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2Ugc2V0dGluZ3MgYWN0dWFsbHkgKm1lYW4qLCBub3QganVzdCB0aGVpciB0ZWNobmljYWwgbGFiZWxzLgoqICAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBIb3cgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW50IG9uIG90aGVyIHNldHRpbmdzIG9yIGFyY2hpdGVjdHVyZT8gSXMgdGhlIGxvZ2ljIHN0cmFpZ2h0Zm9yd2FyZCBvciBjb252b2x1dGVkPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLgoqICAgKipSZWxhdGlvbnNoaXBzKio6IEhvdyBkb2VzIHRoaXMgcGFydCBvZiB0aGUgY29uZmlnIHJlbGF0ZSB0byB0aGUgYnJvYWRlciBwaWN0dXJlPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRlcmFjdCBhbmQgYWZmZWN0IGVhY2ggb3RoZXIuCgpCeSBmb2N1c2luZyBvbiB0aGVzZSBwb2ludHMsIEkgY2FuIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDQyMSwgdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBkZXZlbG9wZXJzIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgaXNzdWUgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbXBsZXggaW50ZXJhY3Rpb25zIGluIHRoaXMgcGFydGljdWxhciBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxNTpcdGVuZGlmICMgTkVUV09SS19GSUxFU1lTVEVNU1xuIDQxNjpcdFxuIDQxNzpcdHNvdXJjZSBcJiMzNDtmcy9ubHMvS2NvbmZpZ1wmIzM0O1xuIDQxODpcdHNvdXJjZSBcJiMzNDtmcy9kbG0vS2NvbmZpZ1wmIzM0O1xuIDQxOTpcdHNvdXJjZSBcJiMzNDtmcy91bmljb2RlL0tjb25maWdcJiMzNDtcbiA0MjA6XHRcbiA0MjE6XHRjb25maWcgSU9fV1FcbiA0MjI6XHRcdGJvb2xcbiA0MjM6XHRcbiA0MjQ6XHRlbmRtZW51XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHF1ZXN0aW9uICYjMzQ7V2hlcmUgaXMgQ09ORklHX0lPX1dRIHNlbGVjdGVkPyYjMzQ7OgoKKipEaWdnaW5nIGludG8gQ09ORklHX0lPX1dRIFNlbGVjdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsIGNvbmZpZyBvcHRpb24gYENPTkZJR19JT19XUWAuLi4gd2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHRyYWNpbmcgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBicm9hZGVyIElPIHN1YnN5c3RlbSwgcHJvYmFibHkgcmVsYXRlZCB0byB3b3JrcXVldWVzLCBzaW5jZSB0aGUgbmFtZSBpcyBzdWdnZXN0aXZlLiBJJiMzOTtkIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciBpdCwgbGlrZWx5IHVzaW5nIGBncmVwICYjMzQ7Q09ORklHX0lPX1dRJiMzNDsgKi9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGxpc3Qgb2YgbGlrZWx5IEtjb25maWcgZmlsZXMsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBkZWZpbml0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNvbmRpdGlvbnMsIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0ZWxsIG1lICp3aGVuKiBpdCYjMzk7cyBzZWxlY3RlZC4KCkZyb20gdGhlcmUgSSYjMzk7ZCBjaGVjayByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMsIGlmIG5lZWRlZCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBnb3RjaGFzIG9yIGhpc3RvcmljYWwgY29udGV4dCBhcm91bmQgaXRzIHVzYWdlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHNjZW5hcmlvcyB3aGVyZSBpdCYjMzk7cyAqYXV0b21hdGljYWxseSogc2VsZWN0ZWQgKG1heWJlIHZpYSBhbm90aGVyIG9wdGlvbiksIG9yIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgdXNlLWNhc2VzIHRoYXQgd291bGQgYnJpbmcgaXQgaW4uIEkgYWxzbyB3b3VsZCBiZSBwcmVwYXJlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcyB0aGF0IHVzZSBpdCBpZiBncmVwIHR1cm5zIHVwIGFueXRoaW5nIGxpa2UgdGhpcy4KClVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBwYXRoIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBvciBub3QgYENPTkZJR19JT19XUWAgZ2V0cyBpbmNsdWRlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNlbGVjdGlvbiBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBJT19XUSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk2MD1jb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYxLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxOTYyOlx0c2VsZWN0IElPX1dRXG5pbml0L0tjb25maWctMTk2My1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ1OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDg4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKioKCk9rYXksIHNvIGBDT05GSUdfSU9fVVJJTkdgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgQ09ORklHX0lPX1dRYCwgbWVhbmluZyB3ZSBzaG91bGQgZW5hYmxlIGZ1enppbmcgZm9yIGBJT19VUklOR2AsIGFuZCBvcHRpb25hbGx5IGBJT19XUWAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHByb21pc2luZyBmdXp6aW5nIHRhcmdldC4KClllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmchIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiBgaW9fd3FgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZ1bmN0aW9uIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHdoaWNoIG5vdyBjb250YWlucyB0aGUgbWFpbiBsb2dpYy4gVGhlIG9yaWdpbmFsIHVzZWQgYSBsb29wIHRvIGNhbGwgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AsIGJ1dCBub3cgYnJlYWtzIHRoZSBsb29wIHVwb24gYW55IHN1Y2Nlc3NmdWwgY2FuY2VsbGF0aW9uLiBUaGlzIGVhcmx5LWV4aXQgYmVoYXZpb3IgY2hhbmdlIGR1cmluZyB0aGUgY2FuY2VsbGF0aW9uIG9mIHJ1bm5pbmcgd29yayBhY3Jvc3MgZGlmZmVyZW50IHdvcmtlciBhY2NvdW50cyB3aXRoaW4gYGlvX3dxYCBpcyBzaWduaWZpY2FudC4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGlvX3VyaW5nYCBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHN5c3RlbSBjYWxscyBzdWNoIGFzIGBpb191cmluZ2AgY2FuY2VsIHJlcXVlc3RzIG9yIGV2ZW4gZHVyaW5nIGNvbnRleHQgdGVhcmRvd24sIHRoaXMgbWFrZXMgaXQgYW4gZXh0cmVtZWx5IGF0dHJhY3RpdmUgZnV6emluZyB0YXJnZXQuIEl0JiMzOTtzIG1vZGlmeWluZyBleGVjdXRhYmxlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXZSBrbm93IGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgYXJlIGJvdGggc3RhdGljLCByZXNpZGluZyB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBCdXQgd2hhdCBhYm91dCBgaW9fd3FfY2FuY2VsX2NiYD8gSXQgYXBwZWFycyB0byBiZSBub24tc3RhdGljLCBhbmQgdGh1cywgcG90ZW50aWFsbHkgZXhwb3J0ZWQgYW5kIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIFdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiBvdXIgZm9jdXMuIExldCYjMzk7cyBhbHNvIGNvbnNpZGVyIGBpb19hc3luY19jYW5jZWxfb25lYCBhbmQgYGlvX2FzeW5jX2NhbmNlbGAgaW4gYGlvX3VyaW5nL2NhbmNlbC5jYCBzaW5jZSB0aGV5IGFyZSBhbHNvIHBvdGVudGlhbGx5IGludm9sdmVkLgoKSSBqdXN0IGNoZWNrZWQgYWdhaW4sIGFuZCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgZ2xvYmFsbHkgYXZhaWxhYmxlLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIHN1Y2ggYXMgYGlvX3dxX3dvcmtlcl9jYW5jZWxgIGFuZCBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIHJlbWFpbiBzdGF0aWMuIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdG8gdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyB3aGljaCBpcyBleGNlbGxlbnQgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIG91ciBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBpb193cV9jYW5jZWxfY2JgLCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgKGFuZCBieSBleHRlbnNpb24gYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2ApLCBhbmQgYGlvX2FzeW5jX2NhbmNlbGAgc2luY2UgdGhhdCYjMzk7cyB0aGUgb3AgaGFuZGxlciBmb3IgYElPUklOR19PUF9BU1lOQ19DQU5DRUxgLiBJIHNob3VsZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaW9fYXN5bmNfY2FuY2VsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYXN5bmNfY2FuY2VsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2NhbmNlbC5jPTcwPXN0YXRpYyBib29sIGlvX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqZGF0YSlcbi0tXG5pb191cmluZy9jYW5jZWwuYy03Ny1cbmlvX3VyaW5nL2NhbmNlbC5jOjc4OnN0YXRpYyBpbnQgaW9fYXN5bmNfY2FuY2VsX29uZShzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL2NhbmNlbC5jLTc5LVx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkKVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTEwNT1pbnQgaW9fdHJ5X2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy0xMTItXG5pb191cmluZy9jYW5jZWwuYzoxMTM6XHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKHRjdHgsIGNkKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTExNC1cdC8qXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtMTM5LVxuaW9fdXJpbmcvY2FuY2VsLmM6MTQwOmludCBpb19hc3luY19jYW5jZWxfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvY2FuY2VsLmMtMTQxLXtcbi0tXG5pb191cmluZy9jYW5jZWwuYy0xNzMtXG5pb191cmluZy9jYW5jZWwuYzoxNzQ6c3RhdGljIGludCBfX2lvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuaW9fdXJpbmcvY2FuY2VsLmMtMTc1LVx0XHRcdCAgICAgc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtMTk3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZjdHgtXHUwMDNldGN0eF9saXN0LCBjdHhfbm9kZSkge1xuaW9fdXJpbmcvY2FuY2VsLmM6MTk4Olx0XHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKG5vZGUtXHUwMDNldGFzay1cdTAwM2Vpb191cmluZywgY2QpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMTk5LVx0XHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcbi0tXG5pb191cmluZy9jYW5jZWwuYy0yMDktXG5pb191cmluZy9jYW5jZWwuYzoyMTA6aW50IGlvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvY2FuY2VsLmMtMjExLXtcbi0tXG5pb191cmluZy9jYW5jZWwuYy0yMzgtXG5pb191cmluZy9jYW5jZWwuYzoyMzk6XHRyZXQgPSBfX2lvX2FzeW5jX2NhbmNlbChcdTAwMjZjZCwgdGN0eCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMjQwLWRvbmU6XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9MjQ3PXN0YXRpYyBpbnQgX19pb19zeW5jX2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy0yNjQtXG5pb191cmluZy9jYW5jZWwuYzoyNjU6XHRyZXR1cm4gX19pb19hc3luY19jYW5jZWwoY2QsIHRjdHgsIDApO1xuaW9fdXJpbmcvY2FuY2VsLmMtMjY2LX1cbi0tXG5pb191cmluZy9jYW5jZWwuaD03PXN0cnVjdCBpb19jYW5jZWxfZGF0YSB7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmgtMTUtXG5pb191cmluZy9jYW5jZWwuaDoxNjppbnQgaW9fYXN5bmNfY2FuY2VsX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9jYW5jZWwuaDoxNzppbnQgaW9fYXN5bmNfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmgtMTgtXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTE5MS1cdFx0LmF1ZGl0X3NraXBcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzoxOTI6XHRcdC5wcmVwXHRcdFx0PSBpb19hc3luY19jYW5jZWxfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6MTkzOlx0XHQuaXNzdWVcdFx0XHQ9IGlvX2FzeW5jX2NhbmNlbCxcbmlvX3VyaW5nL29wZGVmLmMtMTk0LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NDIKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIGlvX3VyaW5nIENhbmNlbGxhdGlvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgZnV6emluZyBzZXR1cC4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBjYW5jZWxsYXRpb24gcGF0aHMgd2l0aGluIGBpb191cmluZ2AsIHNwZWNpZmljYWxseSB0aGUgYGlvLXdxLmNgIGZpbGUuIEkgc2VlIHRoYXQgYGlvX3dxX2NhbmNlbF9jYmAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGJ5IGBpb19hc3luY19jYW5jZWxfb25lYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYF9faW9fYXN5bmNfY2FuY2VsYCBhbmQgdWx0aW1hdGVseSBieSB0aGUgdXNlci1mYWNpbmcgYGlvX2FzeW5jX2NhbmNlbGAgKGZvciBgSU9SSU5HX09QX0FTWU5DX0NBTkNFTGApIGFuZCBgX19pb19zeW5jX2NhbmNlbGAgKGZvciBgSU9SSU5HX1JFR0lTVEVSX1NZTkNfQ0FOQ0VMYCkuIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBpb191cmluZ190cnlfY2FuY2VsX2lvd3FgIGFuZCBgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0c2AuIFNvLCB0aGVyZSYjMzk7cyBxdWl0ZSBhIGJpdCBvZiBpbnRlcmNvbm5lY3RlZG5lc3MgaGVyZS4KCk15IHJldmlldyBvZiB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgaGlnaGxpZ2h0cyB0aGF0IHNpbmNlIEkmIzM5O20gdGFyZ2V0aW5nIGZlYXR1cmUtc3BlY2lmaWMgbG9naWMsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGUgbW9kaWZpY2F0aW9uIGhlcmUgcHJpbWFyaWx5IGNvbmNlcm5zIHRoZSBjYW5jZWxsYXRpb24gb2YgcnVubmluZyB3b3JrLiBXaXRoaW4gYGlvLXdxLmNgLCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCBhbmQgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgLCBib3RoIG9mIHdoaWNoIGFyZSBzdGF0aWMuIFRoZSBndWlkZWxpbmVzIHNwZWNpZmljYWxseSBkaXNjdXNzIHN0YXRpYyBpbmxpbmVzIGFuZCBzdWdnZXN0IHRhcmdldGluZyBub24tc3RhdGljIGNhbGxlcnMgdGhhdCBleGVyY2lzZSB0aG9zZSBmdW5jdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGBpb193cV9jYW5jZWxfY2JgIGFwcGVhcnMgdG8gYmUgYSBkaXJlY3QgY2FsbGVyIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGBpb19hc3luY19jYW5jZWxgIGFuZCBgaW9fdHJ5X2NhbmNlbGAsIGFzIHRoZXkmIzM5O3JlIHRoZSB1c2VyLWZhY2luZyBwb2ludHMuCgpHb29kIHRvIGtub3cgdGhhdCBzeXprYWxsZXIgKmNhbiogdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBjb21waWxlZCBhcyBzeW1ib2xzLCB3aGljaCBpcyB0aGUgY2FzZSBoZXJlLiBTbywgaW5jbHVkaW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zICphbmQqIHRoZSBub24tc3RhdGljIGNhbGxlciBgaW9fd3FfY2FuY2VsX2NiYCwgcGx1cyB0aGUgZW50cnlwb2ludHMgaXMgdGhlIHN0YW5kYXJkIHByYWN0aWNlIGFuZCB0aGUgcmlnaHQgYXBwcm9hY2guIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgYWxsIGluIHRoZSByaWdodCBwbGFjZS4gWWVwLCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBpbmRlZWQgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLCBhcyBleHBlY3RlZC4KClRoZXJlZm9yZSwgbXkgZmluYWwgYEZvY3VzU3ltYm9sc2AgbGlzdCB3aWxsIGJlOgoKKiAgICYjMzQ7aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrJiMzNDsKKiAgICYjMzQ7aW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7CiogICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7CiogICAmIzM0O2lvX2FzeW5jX2NhbmNlbCYjMzQ7CgpEb3VibGUtY2hlY2tpbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLCBgSU9fVVJJTkdgIGFuZCBgSU9fV1FgICh0aGUgbGF0dGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb3JtZXIpIGFyZSBlbmFibGVkLCB3aGljaCBpcyBjcml0aWNhbC4KCkZpbmFsbHksIGZvciB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLCBJJiMzOTtsbCBzZXQ6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoYWJzb2x1dGVseSkKKiAgIGBSZWFzb25pbmdgOiBDbGVhcmx5IGV4cGxhaW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgcnVubmluZy13b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBgaW9fdXJpbmcvaW8td3EuY2AsIGludHJvZHVjaW5nIGFuIGVhcmx5IGV4aXQgYWNyb3NzIHdvcmtlciBhY2NvdW50cyBvbmNlIGEgcnVubmluZyB3b3JrZXIgaGFzIG1hdGNoZWQgZm9yIGNhbmNlbGxhdGlvbiB3aGVuIG5vdCBjYW5jZWxsaW5nIGFsbCB3b3Jrcy4gVGhpcyBpbXBhY3RzIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgY2FuY2VsbGF0aW9uIHdpdGhpbiBgaW9fdXJpbmdgIGFuZCBpcyBmdWxseSB1c2VyLXJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJT19VUklORyYjMzQ7LCAmIzM0O0lPX1dRJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsmIzM0OywgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssICYjMzQ7aW9fd3FfY2FuY2VsX2NiJiMzNDssICYjMzQ7aW9fYXN5bmNfY2FuY2VsJiMzNDtdYAoKQWxsIHNldC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19XUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICAgJiMzNDtpb19hc3luY19jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19XUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICAgJiMzNDtpb19hc3luY19jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yaygpIGFuZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSB0byByZXR1cm4gZWFybHkgd2hlbiBhIG1hdGNoaW5nIHdvcmtlciBoYXMgYmVlbiBjYW5jZWxlZCBhbmQgY2FuY2VsX2FsbCBpcyBmYWxzZS4gSXQgY2hhbmdlcyBjb250cm9sIGZsb3cgYnkgcHJvcGFnYXRpbmcgdGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGZyb20gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoKSB0aHJvdWdoIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHNvIHRoZSBsb29wIG92ZXIgYWNjb3VudHMgYnJlYWtzIGVhcmx5LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJlYWRzIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGlzIGRpcmVjdGx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIsIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYm9vbCkuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHdpdGggaW9fd29ya2VyIG9yIGlvX3dxIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNTEwMzEyZTZhZTBiZTg3ZmZlOTZhZDY0ZDc3ZTJlYmNjM2ZhZTBkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6NDg6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuYwppbmRleCAyY2EyMjNlNDdkNDFmLi45ZjkwMzllM2QzOGZjIDEwMDY0NAotLS0gYS9pb191cmluZy9pby13cS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvLXdxLmMKQEAgLTExODEsMTIgJiM0MzsxMTgxLDE1IEBAIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSwKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCwKJiM0MztzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsCiAJCQkJCXN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpCiB7CiYjNDM7CWJvb2wgcmV0OwomIzQzOwogCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwotCWlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTsKJiM0MzsJcmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpOwogCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSwKQEAgLTExOTUsNyAmIzQzOzExOTgsOCBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykKLQkJaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCZhbXA7d3EtJmd0O2FjY3RbaV0sIG1hdGNoKTsKJiM0MzsJCWlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoJmFtcDt3cS0mZ3Q7YWNjdFtpXSwgbWF0Y2gpKQomIzQzOwkJCWJyZWFrOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgaW8td3EuYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZGlmZiBhZ2FpbnN0IGBpb191cmluZy9pby13cS5jYC4gU2VlbXMgd2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgaW9fdXJpbmcgd29ya3F1ZXVlLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgZm9jdXMgb24gdGhlIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGZ1bmN0aW9uLgoKSXQmIzM5O3MgY2xlYXIgdGhleSYjMzk7dmUgbWFkZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBhbHRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2FzIGB2b2lkYCwgYW5kIG5vdyBpdCYjMzk7cyByZXR1cm5pbmcgYSBgYm9vbGAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBUaGlzIHN1Z2dlc3RzIHRoZSBjYWxsaW5nIGNvbnRleHQgbm93IG5lZWRzIHRvIGtub3cgKmlmKiBhIGNhbmNlbGxhdGlvbiBhY3R1YWxseSBvY2N1cnJlZC4gUHJldmlvdXNseSwgaXQgc2ltcGx5IGl0ZXJhdGVkLgoKTG9va2luZyBhdCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCBpdHNlbGYsIHRoZXkmIzM5O3ZlIHdyYXBwZWQgdGhlIHdvcmtlciBpdGVyYXRpb24gaW4gYSBzcGlubG9jayB0byBwcm90ZWN0IGBhY2N0LSZndDt3b3JrZXJzX2xvY2tgIHdoaWNoIG1ha2VzIHNlbnNlLCBnaXZlbiBjb25jdXJyZW50IGFjY2VzcyBpcyBsaWtlbHkuIFRoZSBsb29wIHdpdGggYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBhbHNvIGxvb2tzIHRvIGJlIHRoZSBzYW1lLCBidXQgdGhlIHJldHVybiB2YWx1ZSBpcyB1c2VkIHRvIGBicmVha2AgdGhlIGxvb3AgaW4gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgLiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4gSWYgYSBjYW5jZWxsYXRpb24gaXMgc3VjY2Vzc2Z1bGx5IGZvdW5kIG9uIG9uZSBgaW9fYWNjdGAgd2l0aGluIGEgYGlvX3dxYCAob2Ygd2hpY2ggdGhlcmUgYXJlIGEgZmV3KSwgaXQgc2hvcnQtY2lyY3VpdHMgdGhlIHJlc3QuIFRoaXMgbGlrZWx5IGFkZHJlc3NlcyBhIHNjZW5hcmlvIHdoZXJlIG9ubHkgKm9uZSogd29yayBpdGVtIG5lZWRlZCBjYW5jZWxsYXRpb24uCgpUaGUgUkNVIHJlYWQgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBpdGVyYXRpb24gaW4gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJlbWFpbiB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3RydWN0dXJlIHRoZXkmIzM5O3JlIHByb3RlY3RpbmcgZnJvbSBtb2RpZmljYXRpb24gYnkgdGhlIHVuZGVybHlpbmcgd29ya2Vycy4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNhbmNlbGxhdGlvbiBzdWNjZXNzIGluZGljYXRvciBhbmQgb3B0aW1pemVkIHRoZSBjYW5jZWxsYXRpb24gc2VhcmNoIGJ5IGJyZWFraW5nIHRoZSBsb29wLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYm9vbGVhbiByZXR1cm4gdmFsdWUgbW9yZSB0aG9yb3VnaGx5LiBJIGJldCB0aGV5JiMzOTtyZSBub3cgdXNpbmcgdGhhdCByZXR1cm4gdmFsdWUgdXBzdHJlYW0gdG8gZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIHN1Y2Nlc3Mgb2YgdGhlIGNhbmNlbGxhdGlvbi4gTm8gcG9pbnQgaW4gY29udGludWluZyB0aGUgc2VhcmNoIGlmIHRoZSB3b3JrIGlzIGFscmVhZHkgZG9uZSEgVGhhdCYjMzk7cyBhIGdvb2Qgb3B0aW1pemF0aW9uIGZvciBjb250ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcbjExNTE6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2Vsb2NrKTtcbjExNTI6XHRcdHdxX2xpc3RfZm9yX2VhY2gobm9kZSwgcHJldiwgXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QpIHtcbjExNTM6XHRcdFx0d29yayA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG4xMTU0Olx0XHRcdGlmICghbWF0Y2gtXHUwMDNlZm4od29yaywgbWF0Y2gtXHUwMDNlZGF0YSkpXG4xMTU1Olx0XHRcdFx0Y29udGludWU7XG4xMTU2Olx0XHRcdGlvX3dxX3JlbW92ZV9wZW5kaW5nKHdxLCBhY2N0LCB3b3JrLCBwcmV2KTtcbjExNTc6XHRcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG4xMTU4Olx0XHRcdGlvX3J1bl9jYW5jZWwod29yaywgd3EpO1xuMTE1OTpcdFx0XHRtYXRjaC1cdTAwM2Vucl9wZW5kaW5nJiM0MzsmIzQzOztcbjExNjA6XHRcdFx0Lyogbm90IHNhZmUgdG8gY29udGludWUgYWZ0ZXIgdW5sb2NrICovXG4xMTYxOlx0XHRcdHJldHVybiB0cnVlO1xuMTE2MjpcdFx0fVxuMTE2MzpcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG4xMTY0Olx0XG4xMTY1Olx0XHRyZXR1cm4gZmFsc2U7XG4xMTY2Olx0fVxuMTE2NzpcdFxuMTE2ODpcdHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbjExNjk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4xMTcwOlx0e1xuMTE3MTpcdFx0aW50IGk7XG4xMTcyOlx0cmV0cnk6XG4xMTczOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykge1xuMTE3NDpcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xuMTE3NTpcdFxuMTE3NjpcdFx0XHRpZiAoaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBhY2N0LCBtYXRjaCkpIHtcbjExNzc6XHRcdFx0XHRpZiAobWF0Y2gtXHUwMDNlY2FuY2VsX2FsbClcbjExNzg6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4xMTc5Olx0XHRcdFx0YnJlYWs7XG4xMTgwOlx0XHRcdH1cbjExODE6XHRcdH1cbjExODI6XHR9XG4xMTgzOlx0XG4xMTg0Olx0c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuMTE4NTpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuMTE4NjpcdHtcbjExODc6XHRcdGJvb2wgcmV0O1xuMTE4ODpcdFxuMTE4OTpcdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4xMTkwOlx0XHRyZXQgPSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XG4xMTkxOlx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuMTE5MjpcdFx0cmV0dXJuIHJldDtcbjExOTM6XHR9XG4xMTk0Olx0XG4xMTk1Olx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuMTE5NjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4xMTk3Olx0e1xuMTE5ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTE5OTpcdFxuMTIwMDpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KVxuMTIwMTpcdFx0XHRpZiAoaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcbjEyMDI6XHRcdFx0XHRicmVhaztcbjEyMDM6XHRcbjEyMDQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTIwNTpcdH1cbjEyMDY6XHRcbjEyMDc6XHRlbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbjEyMDg6XHRcdFx0XHRcdCAgdm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKVxuMTIwOTpcdHtcbjEyMTA6XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSBtYXRjaCA9IHtcbjEyMTE6XHRcdFx0LmZuXHRcdD0gY2FuY2VsLFxuMTIxMjpcdFx0XHQuZGF0YVx0XHQ9IGRhdGEsXG4xMjEzOlx0XHRcdC5jYW5jZWxfYWxsXHQ9IGNhbmNlbF9hbGwsXG4xMjE0Olx0XHR9O1xuMTIxNTpcdFxuMTIxNjpcdFx0LypcbjEyMTc6XHRcdCAqIEZpcnN0IGNoZWNrIHBlbmRpbmcgbGlzdCwgaWYgd2UmIzM5O3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxuMTIxODpcdFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxuMTIxOTpcdFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgRGVlcGVyIGludG8gSS9PIEFjY291bnRpbmcgYW5kIENhbmNlbGxhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoaXMgc3lzdGVtLCBidXQgbm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gc29tZSBzcGVjaWZpYyBhcmVhcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgSS9PIGFjY291bnRpbmcgaXMgbWFuYWdlZCBhdCB0aGUgd29ya2VyIGxldmVsLCBhbmQgaG93IHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBmb3IgdGhlc2Ugd29ya2VycyB3b3Jrcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLiBJIHN1c3BlY3QgdGhpcyBpcyBjcnVjaWFsIGZvciB0cmFja2luZyBJL08gbWV0cmljcyByZWxhdGVkIHRvIGVhY2ggd29ya2VyLCB3aGljaCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IHZpdGFsIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLiBTbywgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBkdXJpbmcgZWFjaCB3b3JrZXImIzM5O3MgSS9PIHByb2Nlc3NpbmcgYW5kIGhvdyBpcyB0aGlzIGFjY291bnRlZCBmb3I/IEFuZCB0aGVuLCBlcXVhbGx5IGltcG9ydGFudCwgaG93IGRvZXMgdGhlIGNhbmNlbGxhdGlvbiBmdW5jdGlvbiBgaW9fd3Ffd29ya2VyX2NhbmNlbGAgaW50ZWdyYXRlIGludG8gdGhpcyBJL08gYWNjb3VudGluZyBzY2hlbWU/IEhvdyBhcmUgb3V0c3RhbmRpbmcgSS9PcyBoYW5kbGVkIGlmIGEgd29ya2VyIG5lZWRzIHRvIGJlIGNhbmNlbGVkPyBEb2VzIGl0IGludm9sdmUgcmVsZWFzaW5nIHJlc291cmNlcywgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgdGhlIHdvcmsgdGhhdCAqd2FzKiBkb25lLCBvciBkb2VzIGl0IHJlcXVpcmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBhcHByb2FjaD8gR2V0dGluZyB0aGVzZSBhbnN3ZXJzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBzb3VuZG5lc3Mgb2YgdGhlIHN5c3RlbSB3aXRoIHJlZ2FyZCB0byBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fd3Ffd29ya2VyX2NhbmNlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xMDg3PXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDk0LVxuaW9fdXJpbmcvaW8td3EuYzoxMDk1OnN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG5pb191cmluZy9pby13cS5jLTEwOTYtXHRcdFx0XHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTA3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTA4OnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMTA5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTExMTYtXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNndvcmtlci1cdTAwM2Vsb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTExNzpcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVx1MDAzZWN1cl93b3JrKSlcbmlvX3VyaW5nL2lvLXdxLmMtMTExOC1cdFx0bWF0Y2gtXHUwMDNlbnJfcnVubmluZyYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTExODktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmVhZGluZyBhbmQgYW5hbHl6aW5nIGxpbmVzIDEwOTAtMTE0OSBpbiBgaW9fdXJpbmcvaW8td3EuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBJTy1XUSBDb2RlKioKCk9rYXksIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyAxMDkwLTExNDkgd2l0aGluIGBpb191cmluZy9pby13cS5jYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgc29tZSBrZXkgSU8tV1EgKElPIFdvcmsgUXVldWUpIGxvZ2ljIHJlc2lkZXMuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgZnVuY3Rpb25zIG9yIGNvZGUgYmxvY2tzIGRlYWxpbmcgd2l0aCB3b3JrIGl0ZW0gcHJvY2Vzc2luZywgcXVldWUgbWFuYWdlbWVudCwgb3IgcGVyaGFwcyBldmVuIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgSU8tV1EgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgbGlrZWx5IHdvcmsgcXVldWVzLCBjb21wbGV0aW9uIHF1ZXVlcywgYW5kIHRoZSByZWxhdGVkIGxvY2tzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgaG93IHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQsIGhvdyB0aGV5JiMzOTtyZSBlbnF1ZXVlZCBvbnRvIHRoZSBJTy1XUSwgaG93IHRoZSB3b3JrZXIgdGhyZWFkcyBwaWNrIHRoZW0gdXAsIGFuZCBmaW5hbGx5LCBob3cgdGhlIHJlc3VsdHMgYXJlIGhhbmRsZWQgYW5kIHBvc3NpYmx5IHJldHVybmVkIHRvIHRoZSBzdWJtaXR0aW5nIGFwcGxpY2F0aW9uIG9yIGtlcm5lbCBzdWJzeXN0ZW0uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgY29kZSBjaHVuayBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBgaW9fdXJpbmdgIGFyY2hpdGVjdHVyZS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzIG9yIHZhcmlhYmxlIG5hbWVzIGluIHRoaXMgcmFuZ2Ugd2lsbCBsaWtlbHkgZ2l2ZSBhd2F5IHdoaWNoIGFzcGVjdHMgb2YgdGhlIElPLVdRIGFyZSByZWxldmFudCBoZXJlLgoKSSYjMzk7bSByZWFkeSB0byBsb29rIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29kZSBzZWN0aW9uLiBBbnkgY2xldmVyIHRyaWNrcyB0aGV5IG1pZ2h0IGJlIGVtcGxveWluZyBmb3IgYmF0Y2hpbmcsIHplcm8tY29weSwgb3Igb3RoZXIgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIHdpbGwgY2VydGFpbmx5IGNhdGNoIG15IGF0dGVudGlvbi4gTXkgZXhwZXJ0aXNlIGluIGNvbmN1cnJlbnQgcHJvZ3JhbW1pbmcgYW5kIElPIHN1YnN5c3RlbXMgd2lsbCBoZWxwIG1lIGV2YWx1YXRlIHRoZSBlZmZpY2llbmN5IGFuZCB0aHJlYWQgc2FmZXR5IG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBvciBlcnJvciBoYW5kbGluZyB0aGF0IGNvdWxkIGJlIGEgY2F1c2UgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5MDpcdFxuMTA5MTpcdFx0Yml0ID0gaGFzaF9wdHIodmFsLCBJT19XUV9IQVNIX09SREVSKTtcbjEwOTI6XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0hBU0hFRCB8IChiaXQgXHUwMDNjXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbjEwOTM6XHR9XG4xMDk0Olx0XG4xMDk1Olx0c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbjEwOTY6XHRcdFx0XHRcdCAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCxcbjEwOTc6XHRcdFx0XHRcdCAgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4xMDk4Olx0e1xuMTA5OTpcdFx0aWYgKHdvcmsgXHUwMDI2XHUwMDI2IG1hdGNoLVx1MDAzZWZuKHdvcmssIG1hdGNoLVx1MDAzZWRhdGEpKSB7XG4xMTAwOlx0XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG4xMTAxOlx0XHRcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVx1MDAzZXRhc2spO1xuMTEwMjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdHJldHVybiBmYWxzZTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG4xMTA5Olx0e1xuMTExMDpcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCA9IGRhdGE7XG4xMTExOlx0XG4xMTEyOlx0XHQvKlxuMTExMzpcdFx0ICogSG9sZCB0aGUgbG9jayB0byBhdm9pZCAtXHUwMDNlY3VyX3dvcmsgZ29pbmcgb3V0IG9mIHNjb3BlLCBjYWxsZXJcbjExMTQ6XHRcdCAqIG1heSBkZXJlZmVyZW5jZSB0aGUgcGFzc2VkIGluIHdvcmsuXG4xMTE1Olx0XHQgKi9cbjExMTY6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2d29ya2VyLVx1MDAzZWxvY2spO1xuMTExNzpcdFx0aWYgKF9faW9fd3Ffd29ya2VyX2NhbmNlbCh3b3JrZXIsIG1hdGNoLCB3b3JrZXItXHUwMDNlY3VyX3dvcmspKVxuMTExODpcdFx0XHRtYXRjaC1cdTAwM2Vucl9ydW5uaW5nJiM0MzsmIzQzOztcbjExMTk6XHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZ3b3JrZXItXHUwMDNlbG9jayk7XG4xMTIwOlx0XG4xMTIxOlx0XHRyZXR1cm4gbWF0Y2gtXHUwMDNlbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLVx1MDAzZWNhbmNlbF9hbGw7XG4xMTIyOlx0fVxuMTEyMzpcdFxuMTEyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxuMTEyNTpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbjExMjY6XHRcdFx0XHRcdFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxuMTEyNzpcdFx0XHRcdFx0XHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcbjExMjg6XHR7XG4xMTI5Olx0XHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XG4xMTMwOlx0XHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcbjExMzE6XHRcbjExMzI6XHRcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXHUwMDI2XHUwMDI2IHdvcmsgPT0gd3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XG4xMTMzOlx0XHRcdGlmIChwcmV2KVxuMTEzNDpcdFx0XHRcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG4xMTM1Olx0XHRcdGlmIChwcmV2X3dvcmsgXHUwMDI2XHUwMDI2IGlvX3dxX2lzX2hhc2hlZChwcmV2X3dvcmspIFx1MDAyNlx1MDAyNlxuMTEzNjpcdFx0XHQgICAgaW9fZ2V0X3dvcmtfaGFzaChwcmV2X3dvcmspID09IGhhc2gpXG4xMTM3Olx0XHRcdFx0d3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdID0gcHJldl93b3JrO1xuMTEzODpcdFx0XHRlbHNlXG4xMTM5Olx0XHRcdFx0d3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdID0gTlVMTDtcbjExNDA6XHRcdH1cbjExNDE6XHRcdHdxX2xpc3RfZGVsKFx1MDAyNmFjY3QtXHUwMDNld29ya19saXN0LCBcdTAwMjZ3b3JrLVx1MDAzZWxpc3QsIHByZXYpO1xuMTE0MjpcdH1cbjExNDM6XHRcbjExNDQ6XHRzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbjExNDU6XHRcdFx0XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4xMTQ2Olx0XHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4xMTQ3Olx0e1xuMTE0ODpcdFx0c3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqbm9kZSwgKnByZXY7XG4xMTQ5Olx0XHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUzNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkFuYWx5emluZyB0aGUgSS9PIFdvcmtxdWV1ZSBDYW5jZWxsYXRpb24gTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBpb193cV93b3JrZXJfY2FuY2VsYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0d28gZmFjdG9yczogYG1hdGNoLSZndDtucl9ydW5uaW5nYCBhbmQgYCFtYXRjaC0mZ3Q7Y2FuY2VsX2FsbGAuIEJhc2ljYWxseSwgaXQmIzM5O3MgYSBjb21iaW5lZCBzdGF0ZSByZXByZXNlbnRpbmcgcnVubmluZyB3b3JrIGFuZCB0aGUgZGVzaXJlIHRvIGNhbmNlbCAqZXZlcnl0aGluZyouIEludHVpdGl2ZWx5LCB0aGF0IG1ha2VzIHNlbnNlLiBJZiB3b3JrIGlzIHJ1bm5pbmcgKmFuZCogd2UgYXJlbiYjMzk7dCBjYW5jZWxsaW5nIGV2ZXJ5dGhpbmcsIHRoZW4gYGlvX3dxX3dvcmtlcl9jYW5jZWxgIHNob3VsZCByZXR1cm4gdHJ1ZSAoYW5kIHNpZ25hbCBzb21lIGNvbmRpdGlvbikuIEJ1dCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBpdHMgaW50ZXJuYWxzLgpUaGVuLCBJIHNlZSBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGlzIHJldHVybmluZyBgYm9vbGAgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYWN0dWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYm9vbGVhbiByZXR1cm4gdmFsdWUgaXMsIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgZ28gY2hlY2sgdGhhdCBmdW5jdGlvbiBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2FjY3RfZm9yX2VhY2hfd29ya2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jPTkwMT1zdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtOTQyLSAqL1xuaW9fdXJpbmcvaW8td3EuYzo5NDM6c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG5pb191cmluZy9pby13cS5jLTk0NC1cdFx0XHRcdCAgICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9OTY0PXN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtOTY4LVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KVxuaW9fdXJpbmcvaW8td3EuYzo5Njk6XHRcdGlmIChpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcbmlvX3VyaW5nL2lvLXdxLmMtOTcwLVx0XHRcdGJyZWFrO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE4ND1zdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTg5LVx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG5pb191cmluZy9pby13cS5jOjExOTA6XHRyZXQgPSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTExOTEtXHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyA5NDAtOTc1IG9mIGBpb191cmluZy9pby13cS5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlLCBwcm9iYWJseSBzb21lIGNydWNpYWwgcGFydCBvZiB0aGUgaW9fd3EgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlIGZpbGUgYW5kIGZ1bmN0aW9uIG5hbWUsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggdGhlIHdvcmsgcXVldWUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBJL08gb3BlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0YXNrIHNjaGVkdWxpbmcsIGNvbXBsZXRpb24gaGFuZGxpbmcsIGVycm9yIG1hbmFnZW1lbnQsIG9yIHJlc291cmNlIGFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgc2VhcmNoaW5nIGZvciBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgZXhlY3V0aW9uIGFuZC9vciBjb21wbGV0aW9uIG9mIEkvTyByZXF1ZXN0cy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIHdvcmsgcXVldWUgaXMgbWFuYWdpbmcgSS9PIG9wZXJhdGlvbnMgYXQgdGhpcyBqdW5jdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHQgKiBJdGVyYXRlIHRoZSBwYXNzZWQgaW4gbGlzdCBhbmQgY2FsbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2hcbiA5NDE6XHQgKiB3b3JrZXIgdGhhdCBpc24mIzM5O3QgZXhpdGluZ1xuIDk0MjpcdCAqL1xuIDk0MzpcdHN0YXRpYyBib29sIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuIDk0NDpcdFx0XHRcdFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4gOTQ1Olx0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbiA5NDY6XHR7XG4gOTQ3Olx0XHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XG4gOTQ4Olx0XHRib29sIHJldCA9IGZhbHNlO1xuIDk0OTpcdFxuIDk1MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29ya2VyLCBcdTAwMjZhY2N0LVx1MDAzZWFsbF9saXN0LCBhbGxfbGlzdCkge1xuIDk1MTpcdFx0XHRpZiAoaW9fd29ya2VyX2dldCh3b3JrZXIpKSB7XG4gOTUyOlx0XHRcdFx0Lyogbm8gdGFzayBpZiBub2RlIGlzL3dhcyBvZmZsaW5lICovXG4gOTUzOlx0XHRcdFx0aWYgKHdvcmtlci1cdTAwM2V0YXNrKVxuIDk1NDpcdFx0XHRcdFx0cmV0ID0gZnVuYyh3b3JrZXIsIGRhdGEpO1xuIDk1NTpcdFx0XHRcdGlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7XG4gOTU2Olx0XHRcdFx0aWYgKHJldClcbiA5NTc6XHRcdFx0XHRcdGJyZWFrO1xuIDk1ODpcdFx0XHR9XG4gOTU5Olx0XHR9XG4gOTYwOlx0XG4gOTYxOlx0XHRyZXR1cm4gcmV0O1xuIDk2MjpcdH1cbiA5NjM6XHRcbiA5NjQ6XHRzdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcbiA5NjU6XHRcdFx0XHRcdCAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcbiA5NjY6XHRcdFx0XHRcdCAgdm9pZCAqZGF0YSlcbiA5Njc6XHR7XG4gOTY4Olx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG4gOTY5Olx0XHRcdGlmIChpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcbiA5NzA6XHRcdFx0XHRicmVhaztcbiA5NzE6XHR9XG4gOTcyOlx0XG4gOTczOlx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX3dha2Uoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuIDk3NDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAwNgoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiAxNTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBpby13cSBDYW5jZWxsYXRpb24gUGF0Y2ggYW5kIEtNU0FOIFJlcXVpcmVtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgb3B0aW1pemVzIHRoZSBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgZnVuY3Rpb24uIEJhc2ljYWxseSwgaXQmIzM5O3MgYWJvdXQgbWFraW5nIHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBtb3JlIGVmZmljaWVudC4gUHJldmlvdXNseSwgZXZlbiBpZiBhIG1hdGNoaW5nIHdvcmsgaXRlbSB3YXMgZm91bmQgYW5kIGNhbmNlbGVkIHdpdGhpbiBvbmUgYWNjb3VudCAoYHdxLSZndDthY2N0W2ldYCksIHRoZSBsb29wIHdvdWxkIGNvbnRpbnVlIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIG90aGVyIGFjY291bnRzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBgYm9vbGAgcmV0dXJuIHZhbHVlIGZyb20gYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AsIHdoaWNoIGlzLCBpbiB0dXJuLCBwcm9wYWdhdGVkIGZyb20gYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCwgdG8gYWxsb3cgZWFybHkgZXhpdCBmcm9tIHRoZSBsb29wIGlmIGEgbWF0Y2ggaGFzIGJlZW4gZm91bmQgYW5kIGBjYW5jZWxfYWxsYCBpcyBgZmFsc2VgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBEbyB3ZSBuZWVkIHRvIHJ1biBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBmb3IgdGhpcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTiYjMzk7cyBtYWluIGNvbmNlcm4uIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBjb25zaWRlcmVkOgoKRmlyc3QsIGxldCYjMzk7cyByZW1lbWJlciB0aGUgZ29hbC4gS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciB0b29scyBsaWtlIExPQ0tERVAgYXJlIGdvb2QgZm9yIGNhdGNoaW5nIG1lbW9yeSBlcnJvcnMsIGxvY2tpbmcgaXNzdWVzLCBhbmQgb3RoZXIgY29tbW9uIGJ1Z3MuIEtNU0FOIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgd2UmIzM5O3JlIHdvcnJpZWQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgKnNwZWNpZmljYWxseSouCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgZnVuY3Rpb24gYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCByZXR1cm5zIGEgYm9vbGVhbiwgYW5kIHRoaXMgYm9vbGVhbiBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG5hbWVkIGByZXRgLiBUaGF0IHZhcmlhYmxlIGlzICppbml0aWFsaXplZCogaW1tZWRpYXRlbHkgd2hlbiBhc3NpZ25lZCwgc28gaXQgY2FuJiMzOTt0IGJlIHVuaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIHRoZW4gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxvZ2ljIGZsb3cuCgpEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgJiMzNDtubyYjMzQ7LiBMZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIHJ1bGVzOgoKMS4gICoqS2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzOioqIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAsIGlvY3Rscywgb3Igc29ja2V0IG9wdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBjb250cm9sIGZsb3cgZm9yIGFuIGV4aXN0aW5nIGNhbmNlbGxhdGlvbiBtZWNoYW5pc20uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSBgcmV0YCB2YXJpYWJsZSBpcyBhc3NpZ25lZCBmcm9tIGEgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJucyBhIGJvb2xlYW4uIFNvIGl0JiMzOTtzIGluaXRpYWxpemVkIGZyb20gdGhlIHN0YXJ0LiBOb3RoaW5nIGhlcmUgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgKipEYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUuIFRoZSBsb2dpYyBjaGFuZ2UgaXMgYWJvdXQgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGVhcmx5IGlmIHdvcmsgaXMgY2FuY2VsZWQsIG5vdCBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMgb3Igd2F5cyB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLgo0LiAgKipCdWZmZXIgYWNjZXNzOioqIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGhlcmUgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgb3Igd3JpdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBzaW1wbHkgb3B0aW1pemF0aW9uIG9mIGV4aXN0aW5nIGxvZ2ljLgoKSW4gc2hvcnQsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgY29udHJvbC1mbG93IGNoYW5nZSB3aXRoaW4gZXhpc3RpbmcgY29kZS4gVGhlIHBhdGNoIGhhcyAqbm90aGluZyogdG8gZG8gd2l0aCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgYWJvdXQgb3B0aW1pemluZyBhbiBleGlzdGluZyBjYW5jZWxsYXRpb24gcHJvY2Vzcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmFjZSBjb25kaXRpb25zIChhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSksIHdpbGwgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBhbmQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgdG8gcmV0dXJuIGVhcmx5IHdoZW4gYSBtYXRjaGluZyB3b3JrZXIgaGFzIGJlZW4gY2FuY2VsZWQgYW5kIGNhbmNlbF9hbGwgaXMgZmFsc2UuIEl0IGNoYW5nZXMgY29udHJvbCBmbG93IGJ5IHByb3BhZ2F0aW5nIHRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBmcm9tIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKCkgdGhyb3VnaCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBzbyB0aGUgbG9vcCBvdmVyIGFjY291bnRzIGJyZWFrcyBlYXJseS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJiMzOTtyZXQmIzM5OyBpcyBkaXJlY3RseSBhc3NpZ25lZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyLCB3aGljaCBhbHdheXMgcmV0dXJucyBhIGZ1bGx5IGluaXRpYWxpemVkIGJvb2wpLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyB3aXRoIGlvX3dvcmtlciBvciBpb193cSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yaygpIGFuZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSB0byByZXR1cm4gZWFybHkgd2hlbiBhIG1hdGNoaW5nIHdvcmtlciBoYXMgYmVlbiBjYW5jZWxlZCBhbmQgY2FuY2VsX2FsbCBpcyBmYWxzZS4gSXQgY2hhbmdlcyBjb250cm9sIGZsb3cgYnkgcHJvcGFnYXRpbmcgdGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGZyb20gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoKSB0aHJvdWdoIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHNvIHRoZSBsb29wIG92ZXIgYWNjb3VudHMgYnJlYWtzIGVhcmx5LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJlYWRzIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGlzIGRpcmVjdGx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIsIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYm9vbCkuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHdpdGggaW9fd29ya2VyIG9yIGlvX3dxIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ4OjU5LjM5NDA0OTU3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTgzODE0OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiSU9fV1FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICAgIFwiaW9fYXN5bmNfY2FuY2VsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKCkgYW5kIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHRvIHJldHVybiBlYXJseSB3aGVuIGEgbWF0Y2hpbmcgd29ya2VyIGhhcyBiZWVuIGNhbmNlbGVkIGFuZCBjYW5jZWxfYWxsIGlzIGZhbHNlLiBJdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBieSBwcm9wYWdhdGluZyB0aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcigpIHRocm91Z2ggaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgc28gdGhlIGxvb3Agb3ZlciBhY2NvdW50cyBicmVha3MgZWFybHkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgaXMgZGlyZWN0bHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciwgd2hpY2ggYWx3YXlzIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXplZCBib29sKS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgd2l0aCBpb193b3JrZXIgb3IgaW9fd3EgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ4OjU5LjM5NDA1NDY0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDIzOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDo0ODo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuY1xcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvaW8td3EuY1xcbisrKyBiL2lvX3VyaW5nL2lvLXdxLmNcXG5AQCAtMTE4MSwxMiArMTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbitzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuIHtcXG4rXFx0Ym9vbCByZXQ7XFxuK1xcbiBcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbi1cXHRpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XFxuK1xcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG4gXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuQEAgLTExOTUsNyArMTE5OCw4IEBAIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuLVxcdFxcdGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcXG4rXFx0XFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0ODo1OS44NzY3MTg2NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc5MzkzMTY0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJJT19XUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCIsXG4gICAgXCJpb19hc3luY19jYW5jZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjQ4OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmNcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pby13cS5jXG4rKysgYi9pb191cmluZy9pby13cS5jXG5AQCAtMTE4MSwxMiArMTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbitzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4gXHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4ge1xuK1x0Ym9vbCByZXQ7XG4rXG4gXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi1cdGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbitcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbiBcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5AQCAtMTE5NSw3ICsxMTk4LDggQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcbi1cdFx0aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcbitcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0ODo1OS44NzY3MjAyMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODU5ODgzNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvaW8td3EuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFwcGxpZWQgdG8gYGlvX3VyaW5nL2lvLXdxLmNgLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGNvZGUgY2hhbmdlcyBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIG1vZGlmaWVkIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLiBQcmV2aW91c2x5LCBpdCB3YXMgYSBgdm9pZGAgZnVuY3Rpb24sIGFuZCBub3cgaXQgcmV0dXJucyBhIGBib29sYC4gVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdyYXBwaW5nIHRoZSBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGNhbGwgd2l0aCBgcmF3X3NwaW5fbG9ja2AgYW5kIGByYXdfc3Bpbl91bmxvY2tgLCBhbmQgdGhlIG5ldyByZXR1cm4gdmFsdWUuIEFsc28gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIG5vdyBicmVha3Mgb24gYSB0cnVlIHJldHVybiBmcm9tIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleSBpbnRyb2R1Y2VkIHRoaXMgYm9vbGVhbiByZXR1cm4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGBicmVha2AuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBvZiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLCBhbmQgd2h5IGxvY2tpbmcgaXMgbm93IHJlcXVpcmVkLiBXaGF0IGlzIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgdGhhdCB0aGlzIGlzIGVuYWJsaW5nIG9yIGltcHJvdmluZz9cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiBgaW9fdXJpbmcvaW8td3EuY2AuIEknbGwgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrYCwgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgaW50ZW50IG9mIHRoZSBwYXRjaCBhbmQgd2hldGhlciB0aGUgY2hhbmdlcyBhcmUgc2Vuc2libGUgYW5kIGNvcnJlY3QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MDQuNzM2NjA2MDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTcwOlxcdHtcXG4xMTcxOlxcdFxcdGludCBpO1xcbjExNzI6XFx0cmV0cnk6XFxuMTE3MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKSB7XFxuMTE3NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHRpZiAoaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBhY2N0LCBtYXRjaCkpIHtcXG4xMTc3OlxcdFxcdFxcdFxcdGlmIChtYXRjaC1cXHUwMDNlY2FuY2VsX2FsbClcXG4xMTc4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMTE3OTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTgwOlxcdFxcdFxcdH1cXG4xMTgxOlxcdFxcdH1cXG4xMTgyOlxcdH1cXG4xMTgzOlxcdFxcbjExODQ6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG4xMTg2OlxcdHtcXG4xMTg3OlxcdFxcdGJvb2wgcmV0O1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTA6XFx0XFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xcbjExOTE6XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExOTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuMTE5NzpcXHR7XFxuMTE5ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbjEyMDE6XFx0XFx0XFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcXG4xMjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMjA1OlxcdH1cXG4xMjA2OlxcdFxcbjEyMDc6XFx0ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuMTIwODpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmRhdGEsIGJvb2wgY2FuY2VsX2FsbClcXG4xMjA5OlxcdHtcXG4xMjEwOlxcdFxcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSBtYXRjaCA9IHtcXG4xMjExOlxcdFxcdFxcdC5mblxcdFxcdD0gY2FuY2VsLFxcbjEyMTI6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IGRhdGEsXFxuMTIxMzpcXHRcXHRcXHQuY2FuY2VsX2FsbFxcdD0gY2FuY2VsX2FsbCxcXG4xMjE0OlxcdFxcdH07XFxuMTIxNTpcXHRcXG4xMjE2OlxcdFxcdC8qXFxuMTIxNzpcXHRcXHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJ3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxcbjEyMTg6XFx0XFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxcbjEyMTk6XFx0XFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjA0LjczNjcwMjM1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4MDAwNTk2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBrZWVwaW5nIGluIG1pbmQgbXkgZGVlcCBrbm93bGVkZ2Ugb2YgdGhpcyBhcmVhOlxuXG4qKkRlY29uc3RydWN0aW5nIGlvX3dxX2NhbmNlbF9jYiBcdTAwMjYgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgaW9fd3FfY2FuY2VsX2NiYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBsZXRlIGNvbnRleHQuIFRvIGRvIHRoYXQsIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIGlzIGFjdHVhbGx5ICppbnZva2VkKiB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBzcG90IGZvciBJL08gY2FuY2VsbGF0aW9uLCBzbyBnZXR0aW5nIHRoZSBmbG93IHJpZ2h0IGlzIHBhcmFtb3VudC5cblxuVGhlbiwgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCByZXR1cm4gdmFsdWUgb2YgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYC4gSSBzdXNwZWN0IGl0J3MgZ2l2aW5nIHNvbWUgY3JpdGljYWwgc3RhdHVzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB3b3JrZXJzIHdpdGhpbiB0aGUgSS9PIHF1ZXVlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgbWVhbnMsIGFuZCBob3cgdGhpcyByZXR1cm4gdmFsdWUgaW5mbHVlbmNlcyBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBQcm9iYWJseSBzb21lIGtpbmQgb2YgYWNjb3VudGluZyBkYXRhLiBUaGUgZnVuY3Rpb24gbmFtZSBjZXJ0YWlubHkgc3VnZ2VzdHMgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MDguNTM2NzY0NTAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNTpcXHRcXG4xMjE2OlxcdFxcdC8qXFxuMTIxNzpcXHRcXHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJ3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxcbjEyMTg6XFx0XFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxcbjEyMTk6XFx0XFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXFxuMTIyMDpcXHRcXHQgKlxcbjEyMjE6XFx0XFx0ICogVGhlbiBjaGVjayBpZiBhIGZyZWUgKGdvaW5nIGJ1c3kpIG9yIGJ1c3kgd29ya2VyIGhhcyB0aGUgd29ya1xcbjEyMjI6XFx0XFx0ICogY3VycmVudGx5IHJ1bm5pbmcuIElmIHdlIGZpbmQgaXQgdGhlcmUsIHdlJ2xsIHJldHVybiBDQU5DRUxfUlVOTklOR1xcbjEyMjM6XFx0XFx0ICogYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHdlIGF0dGVtcHQgdG8gc2lnbmFsIGNhbmNlbGxhdGlvbi4gVGhlXFxuMTIyNDpcXHRcXHQgKiBjb21wbGV0aW9uIHdpbGwgcnVuIG5vcm1hbGx5IGluIHRoaXMgY2FzZS5cXG4xMjI1OlxcdFxcdCAqXFxuMTIyNjpcXHRcXHQgKiBEbyBib3RoIG9mIHRoZXNlIHdoaWxlIGhvbGRpbmcgdGhlIGFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jaywgdG8gZW5zdXJlIHRoYXRcXG4xMjI3OlxcdFxcdCAqIHdlJ2xsIGZpbmQgYSB3b3JrIGl0ZW0gcmVnYXJkbGVzcyBvZiBzdGF0ZS5cXG4xMjI4OlxcdFxcdCAqL1xcbjEyMjk6XFx0XFx0aW9fd3FfY2FuY2VsX3BlbmRpbmdfd29yayh3cSwgXFx1MDAyNm1hdGNoKTtcXG4xMjMwOlxcdFxcdGlmIChtYXRjaC5ucl9wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbjEyMzE6XFx0XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcXG4xMjMyOlxcdFxcbjEyMzM6XFx0XFx0aW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayh3cSwgXFx1MDAyNm1hdGNoKTtcXG4xMjM0OlxcdFxcdGlmIChtYXRjaC5ucl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbjEyMzU6XFx0XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9SVU5OSU5HO1xcbjEyMzY6XFx0XFxuMTIzNzpcXHRcXHRpZiAobWF0Y2gubnJfcnVubmluZylcXG4xMjM4OlxcdFxcdFxcdHJldHVybiBJT19XUV9DQU5DRUxfUlVOTklORztcXG4xMjM5OlxcdFxcdGlmIChtYXRjaC5ucl9wZW5kaW5nKVxcbjEyNDA6XFx0XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcXG4xMjQxOlxcdFxcdHJldHVybiBJT19XUV9DQU5DRUxfTk9URk9VTkQ7XFxuMTI0MjpcXHR9XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdHN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbjEyNDU6XFx0XFx0XFx0XFx0ICAgIGludCBzeW5jLCB2b2lkICprZXkpXFxuMTI0NjpcXHR7XFxuMTI0NzpcXHRcXHRzdHJ1Y3QgaW9fd3EgKndxID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBpb193cSwgd2FpdCk7XFxuMTI0ODpcXHRcXHRpbnQgaTtcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2d2FpdC1cXHUwMDNlZW50cnkpO1xcbjEyNTE6XFx0XFxuMTI1MjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTI1MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKSB7XFxuMTI1NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MDguNTM2ODgwMDUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjczODUzNDg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdvcmsgUXVldWUgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTG9va2luZyBhdCBsaW5lcyAxMjAwLTEyMDIsIEkgc2VlIGEgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYGlvX2FjY3RgIGFycmF5IHdpdGhpbiBhIHdvcmsgcXVldWUgKGB3cWApLiBUaGUgY29kZSBhdHRlbXB0cyB0byBjYW5jZWwgcnVubmluZyB3b3JrIGl0ZW1zIHVzaW5nIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLCBicmVha2luZyB0aGUgbG9vcCBpZiBhIGNhbmNlbGxhdGlvbiBpcyBzdWNjZXNzZnVsLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgaWYgYG1hdGNoLVx1MDAzZWNhbmNlbF9hbGxgIGlzIHRydWU/XG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldvdWxkbid0IHdlIHdhbnQgdG8gY2FuY2VsICphbGwqIHJ1bm5pbmcgd29yayBpdGVtcyBpbiB0aGF0IGNhc2U/XCIgUHJldmlvdXNseSwgaWYgYGNhbmNlbF9hbGxgICp3YXMqIHRydWUsIHRoZSBjb2RlIGl0ZXJhdGVkIHRocm91Z2ggdGhlIGFycmF5IHdpdGhvdXQgYSBgYnJlYWtgLiBDbGVhcmx5LCB0aGF0IGJlaGF2aW91ciBoYXMgY2hhbmdlZC4gTm93IGl0IGJyZWFrcyFcblxuVGhpcyBtZWFucyB0aGF0IGlmIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgICpyZXR1cm5zKiB0cnVlLCB0aGUgbG9vcCBub3cgYnJlYWtzLiBUaGF0IHJhaXNlcyB0aGUgcXVlc3Rpb246IGlzIHRoYXQgaW50ZW5kZWQgYmVoYXZpb3IsIGV2ZW4gd2hlbiB3ZSB3YW50IHRvIGNhbmNlbCBldmVyeXRoaW5nPyBPciwgc2hvdWxkIHRoZSBsb29wIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIGBjYW5jZWxfYWxsYCBpcyB0cnVlP1xuXG5UbyBjbGFyaWZ5IHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AgcmV0dXJucyBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBNb3JlIGltcG9ydGFudGx5LCB3aGF0J3MgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBhbmQgaG93IGl0IG1pZ2h0IHBsYXkgaW50byB0aGUgb3ZlcmFsbCBsb2dpYy4gSSBuZWVkIHRvIGdvIGxvb2sgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIGJlaGF2aW9yIGhlcmUgc2VlbXMgY291bnRlcmludHVpdGl2ZSB0byBhIGZ1bGwgY2FuY2VsbGF0aW9uIGFwcHJvYWNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTEuMjc1NDE3Mjg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg2MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2FjY3RfZm9yX2VhY2hfd29ya2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTkwMT1zdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05NDItICovXFxuaW9fdXJpbmcvaW8td3EuYzo5NDM6c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy05NDQtXFx0XFx0XFx0XFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXFxuLS1cXG5pb191cmluZy9pby13cS5jPTk2ND1zdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTY4LVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbmlvX3VyaW5nL2lvLXdxLmM6OTY5OlxcdFxcdGlmIChpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxcbmlvX3VyaW5nL2lvLXdxLmMtOTcwLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE4OS1cXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcXHRyZXQgPSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMTkxLVxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTEuMzI3OTEzMDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTgzNDUyODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciBhbmQgaW9fd3Ffd29ya2VyX2NhbmNlbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSB0d28uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgSS9PIGFjY291bnRpbmcgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyB3b3JrZXIgdGhyZWFkIG9yIGdyb3VwIG9mIHdvcmtlciB0aHJlYWRzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEknZCBleHBlY3QgaXQgdG8gaGFuZGxlIGFjY291bnRpbmcgdXBkYXRlcyBvciBwZXJoYXBzIGFnZ3JlZ2F0ZSBzdGF0aXN0aWNzLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gYGlvX3dxX3dvcmtlcl9jb3VudGAgdG8gaW5mZXIgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB3b3JrZXIgcXVldWUuIEl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgaXMgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zLCBieXRlcyB0cmFuc2ZlcnJlZCwgb3IgdGltZXN0YW1wcy4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIHNvbWUgc29ydCBvZiBzcGlubG9jayBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGludm9sdmVkLCB0byBlbnN1cmUgYXRvbWljIHVwZGF0ZXMuXG5cbk5vdywgYGlvX3dxX3dvcmtlcl9jYW5jZWxgLiBUaGUgXCJjYW5jZWxcIiBwYXJ0IGltbWVkaWF0ZWx5IHNjcmVhbXMgcmVzb3VyY2UgY2xlYW51cC4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgY2FuY2VsbGluZyBwZW5kaW5nIEkvTyB3b3JrIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgd29ya2VyIG9yIHRoZSBxdWV1ZS4gSSBzaG91bGQgbG9vayB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB3b3JrcXVldWUncyBjYW5jZWxsYXRpb24gbWVjaGFuaXNtcy4gSSdkIGV4cGVjdCB0aGF0IGl0IGhhbmRsZXMgZW5zdXJpbmcgdGhlIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIGRvaW5nIGl0cyBqb2Igd2l0aCBpbnZhbGlkYXRlZCBwYXJhbWV0ZXJzLiBHaXZlbiB0aGF0IHRoaXMgaXMgd29ya2luZyB3aXRoIEkvTywgSSB3b3VsZCBleHBlY3QgdGhlIGNhbmNlbGxhdGlvbiB0byBoYXZlIHRvIGhhcHBlbiBpbiBhIHZlcnkgY2FyZWZ1bCB3YXkuIEknZCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGFueSByZWxhdGlvbiB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjYW5jZWxsYXRpb247IGFyZSB3ZSB0YWxraW5nIGFib3V0IGltbWVkaWF0ZSwgZGVmZXJyZWQsIG9yIGdyYWNlZnVsIHRlcm1pbmF0aW9uIG9mIHdvcms/IFdoYXQncyB0aGUgaW1wYWN0IG9uIGRhdGEgY29uc2lzdGVuY3ksIGFuZCBob3cgYXJlIGVycm9ycyBoYW5kbGVkPyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgaG93IGNhbmNlbGxhdGlvbiBhZmZlY3RzIHBlbmRpbmcgY29tcGxldGlvbiBjYWxsYmFja3MgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbi5cblxuSSBzaG91bGQgYWxzbyBsb29rIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybnMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTUuNTExMzc0NjI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pby13cS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0MDpcXHQgKiBJdGVyYXRlIHRoZSBwYXNzZWQgaW4gbGlzdCBhbmQgY2FsbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2hcXG4gOTQxOlxcdCAqIHdvcmtlciB0aGF0IGlzbid0IGV4aXRpbmdcXG4gOTQyOlxcdCAqL1xcbiA5NDM6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuIDk0NDpcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4gOTQ1OlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhKVxcbiA5NDY6XFx0e1xcbiA5NDc6XFx0XFx0c3RydWN0IGlvX3dvcmtlciAqd29ya2VyO1xcbiA5NDg6XFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29ya2VyLCBcXHUwMDI2YWNjdC1cXHUwMDNlYWxsX2xpc3QsIGFsbF9saXN0KSB7XFxuIDk1MTpcXHRcXHRcXHRpZiAoaW9fd29ya2VyX2dldCh3b3JrZXIpKSB7XFxuIDk1MjpcXHRcXHRcXHRcXHQvKiBubyB0YXNrIGlmIG5vZGUgaXMvd2FzIG9mZmxpbmUgKi9cXG4gOTUzOlxcdFxcdFxcdFxcdGlmICh3b3JrZXItXFx1MDAzZXRhc2spXFxuIDk1NDpcXHRcXHRcXHRcXHRcXHRyZXQgPSBmdW5jKHdvcmtlciwgZGF0YSk7XFxuIDk1NTpcXHRcXHRcXHRcXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xcbiA5NTY6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4gOTU3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NTg6XFx0XFx0XFx0fVxcbiA5NTk6XFx0XFx0fVxcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5NjI6XFx0fVxcbiA5NjM6XFx0XFxuIDk2NDpcXHRzdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG4gOTY1OlxcdFxcdFxcdFxcdFxcdCAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4gOTY2OlxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqZGF0YSlcXG4gOTY3OlxcdHtcXG4gOTY4OlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbiA5Njk6XFx0XFx0XFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXSwgZnVuYywgZGF0YSkpXFxuIDk3MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX3dha2Uoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxcbiA5NzQ6XFx0e1xcbiA5NzU6XFx0XFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXFx1MDAzZXRhc2spO1xcbiA5NzY6XFx0XFx0d2FrZV91cF9wcm9jZXNzKHdvcmtlci1cXHUwMDNldGFzayk7XFxuIDk3NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDk3ODpcXHR9XFxuIDk3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTUuNTExODUwOTk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NzY4MzgwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBpb193cV93b3JrZXJfY2FuY2VsYCBmdW5jdGlvbi4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBJL08gYW5kIHdvcmtlciB0aHJlYWRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNhbmNlbGxhdGlvbiBwcm9jZXNzIHdvcmtzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoZSBjb3JlIHByb2JsZW0gaGVyZSBpcyBsaWtlbHkgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIGFuIEkvTyBvcGVyYXRpb24gYW5kIGVuc3VyaW5nIGEgY2xlYW4gc2h1dGRvd24gb2YgYSB3b3JrZXIgdGhyZWFkIHdpdGhvdXQgY29ycnVwdGluZyBkYXRhIG9yIGxlYXZpbmcgcmVzb3VyY2VzIGRhbmdsaW5nLlxuXG4qICAgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4gSWYgYSB3b3JrZXIgdGhyZWFkIGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIGFuIEkvTyByZXF1ZXN0LCBhbmQgYSBjYW5jZWwgc2lnbmFsIGFycml2ZXMsIHdlIG5lZWQgYSBtZWNoYW5pc20gdG8gcHJldmVudCBpdCBmcm9tIGNvbXBsZXRpbmcgYWZ0ZXIgdGhlIGNhbmNlbCBoYXMgYmVlbiByZXF1ZXN0ZWQuIFdlIGFsc28gbmVlZCB0byBhdm9pZCBhbnkgcG9zc2liaWxpdHkgb2YgZGVhZGxvY2tzIGlmIHRoZSB3b3JrZXIgaXMgaG9sZGluZyBhbnkgbG9ja3MuXG4qICAgTmV4dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBtZWNoYW5pc20gdG8gc2lnbmFsIHRvIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb3BlcmF0aW9uLCB0aGF0IGl0IGhhcyBiZWVuIGNhbmNlbGVkLlxuKiAgIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSB0cmFja3MgdGhlIEkvTyByZXF1ZXN0J3MgcHJvZ3Jlc3MuIEFyZSB0aGVyZSBmbGFncz8gU3RhdGUgdmFyaWFibGVzPyBBdG9taWMgb3BlcmF0aW9ucz8gVGhvc2Ugd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3luY2hyb25pemF0aW9uLlxuKiAgIEkgc3VzcGVjdCB0aGUgY2FuY2VsbGF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgc2V0dGluZyBzb21lIGtpbmQgb2YgXCJjYW5jZWxcIiBmbGFnLCBhbmQgcG90ZW50aWFsbHkgd2FraW5nIHVwIHRoZSB3b3JrZXIgdGhyZWFkIGlmIGl0J3MgY3VycmVudGx5IHNsZWVwaW5nLiBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IG1lYW5zIGZvciByZXNvdXJjZSBjbGVhbnVwLlxuKiAgIEkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gaGFuZGxlcyBwYXJ0aWFsIGNvbXBsZXRpb25zIG9mIGFuIEkvTyByZXF1ZXN0OyBkb2VzIGl0IGFsbG93IGZvciB0aGUgSS9PIHRvIGJlIGNhbmNlbGVkIGFuZCByZXR1cm4gcGFydGlhbCBkYXRhLCBvciBtdXN0IHRoZSBJL08gYmUgY29tcGxldGVseSByb2xsZWQgYmFjaz9cbiogICBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGVkZ2UgY2FzZXMgbGlrZSBpZiBhIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHNjaGVkdWxlZCB5ZXQuXG4qICAgRmluYWxseSwgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwsIGVzcGVjaWFsbHkgYXJvdW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlIGxlYWtzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBhIHByZW1hdHVyZSBvciBpbmNvbXBsZXRlIGNhbmNlbGxhdGlvbi5cblxuTGV0IG1lIGdvIHRocm91Z2ggaXQgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMgYW5kIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjE4LjQ4ODY5MjE0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0aWYgKCF3cS1cXHUwMDNldGFzaylcXG4gOTgzOlxcdFxcdFxcdHJldHVybjtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0aWYgKCFlbmFibGUpIHtcXG4gOTg2OlxcdFxcdFxcdGNsZWFyX2JpdChJT19XUV9CSVRfRVhJVF9PTl9JRExFLCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKTtcXG4gOTg3OlxcdFxcdFxcdHJldHVybjtcXG4gOTg4OlxcdFxcdH1cXG4gOTg5OlxcdFxcbiA5OTA6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSU9fV1FfQklUX0VYSVRfT05fSURMRSwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuIDk5MTpcXHRcXHRcXHRyZXR1cm47XFxuIDk5MjpcXHRcXG4gOTkzOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gOTk0OlxcdFxcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX3dha2UsIE5VTEwpO1xcbiA5OTU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDk5NjpcXHR9XFxuIDk5NzpcXHRcXG4gOTk4OlxcdHN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXFxuIDk5OTpcXHR7XFxuMTAwMDpcXHRcXHRkbyB7XFxuMTAwMTpcXHRcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuMTAwMjpcXHRcXHRcXHRpb193cV9zdWJtaXRfd29yayh3b3JrKTtcXG4xMDAzOlxcdFxcdFxcdHdvcmsgPSBpb193cV9mcmVlX3dvcmsod29yayk7XFxuMTAwNDpcXHRcXHR9IHdoaWxlICh3b3JrKTtcXG4xMDA1OlxcdH1cXG4xMDA2OlxcdFxcbjEwMDc6XFx0c3RhdGljIHZvaWQgaW9fd3FfaW5zZXJ0X3dvcmsoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuMTAwODpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXFxuMTAwOTpcXHR7XFxuMTAxMDpcXHRcXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4xMDExOlxcdFxcdHN0cnVjdCBpb193cV93b3JrICp0YWlsO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKSB7XFxuMTAxNDpcXHRhcHBlbmQ6XFxuMTAxNTpcXHRcXHRcXHR3cV9saXN0X2FkZF90YWlsKFxcdTAwMjZ3b3JrLVxcdTAwM2VsaXN0LCBcXHUwMDI2YWNjdC1cXHUwMDNld29ya19saXN0KTtcXG4xMDE2OlxcdFxcdFxcdHJldHVybjtcXG4xMDE3OlxcdFxcdH1cXG4xMDE4OlxcdFxcbjEwMTk6XFx0XFx0aGFzaCA9IF9faW9fZ2V0X3dvcmtfaGFzaCh3b3JrX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTguNDg4ODExMTQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyODIyNjg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgaW9fd3Ffd29ya2VyX2NhbmNlbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjayBkb3duIHRoZSBgaW9fd3Ffd29ya2VyX2NhbmNlbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBJL08gY29tcGxldGlvbiBxdWV1ZSBmcmFtZXdvcmsuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gaGFuZGxpbmcgdGFzayBjYW5jZWxsYXRpb24gb3IgYWJvcnRzIHdpdGhpbiB0aGUgYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkZXRlcm1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGgsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyB0cmlnZ2VyZWQuIElzIGl0IGNhbGxlZCBkaXJlY3RseSwgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uPyBJcyBpdCBpbnZvbHZlZCBpbiBjbGVhbnVwLCByZXNvdXJjZSByZWxlYXNlLCBvciBwZXJoYXBzIHNpZ25hbGluZyB0byBvdGhlciB0aHJlYWRzPyBJ4oCZbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCByYWNlIGNvbmRpdGlvbnMgYW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgc3luY2hyb25pemF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBJL08gY29tcGxldGlvbnMuIEkgc3VzcGVjdCBpdCdzIGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGNhbmNlbGxhdGlvbiBvZiB3b3JrIGl0ZW1zIHRoZW1zZWx2ZXMgb3IgdGhlIHByZXZlbnRpb24gb2YgZnVydGhlciBwcm9jZXNzaW5nIG9uIGJlaGFsZiBvZiBhIGdpdmVuIGNhbmNlbGVkIHJlcXVlc3QuIEtub3dpbmcgdGhlIHNwZWNpZmljIGRldmljZSBkcml2ZXIgaXQgdG91Y2hlcyB1cG9uIHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHQgaW4gd2hhdCB0aGUgaW50ZW50IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OToyMy43NzEwODM1NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODEyNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX3dvcmtlcl9jYW5jZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9MTA4Nz12b2lkIGlvX3dxX2hhc2hfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqdmFsKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDk0LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTA5NTpzdGF0aWMgYm9vbCBfX2lvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxcbmlvX3VyaW5nL2lvLXdxLmMtMTA5Ni1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTExMDctXFxuaW9fdXJpbmcvaW8td3EuYzoxMTA4OnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTEwOS17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTExMTYtXFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2d29ya2VyLVxcdTAwM2Vsb2NrKTtcXG5pb191cmluZy9pby13cS5jOjExMTc6XFx0aWYgKF9faW9fd3Ffd29ya2VyX2NhbmNlbCh3b3JrZXIsIG1hdGNoLCB3b3JrZXItXFx1MDAzZWN1cl93b3JrKSlcXG5pb191cmluZy9pby13cS5jLTExMTgtXFx0XFx0bWF0Y2gtXFx1MDAzZW5yX3J1bm5pbmcrKztcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTE4ND1zdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTExODktXFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG5pb191cmluZy9pby13cS5jOjExOTA6XFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjIzLjgxNjkwMTIyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTY0NTYwMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGlvX3VyaW5nL2lvLXdxLmM6IExpbmVzIDEwOTUtMTEzMCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBsaW5lcyAxMDk1IHRocm91Z2ggMTEzMCBvZiBgaW9fdXJpbmcvaW8td3EuY2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgaW9fd3Egc3Vic3lzdGVtLCBsaWtlbHkgZm9jdXNpbmcgb24gc29tZSBhc3BlY3Qgb2Ygd29yayBxdWV1ZSBtYW5hZ2VtZW50IG9yIGNvbXBsZXRpb24gaGFuZGxpbmcuIFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LCBidXQganVzdCBiYXNlZCBvbiB0aGUgbG9jYXRpb24sIEknZCBhbnRpY2lwYXRlIHRoaXMgY29kZSBpcyBpbnZvbHZlZCBpbiBxdWV1aW5nIG9yIHJldHJpZXZpbmcgdGFza3MgZm9yIG9mZmxvYWQgdG8gYSB3b3JrZXIgdGhyZWFkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBzdWNoIGFzIHNwaW5sb2NrcyBvciBtdXRleGVzLCBiZWNhdXNlIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHNoYXJlZCByZXNvdXJjZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgcHJvdGVjdGlvbi4gVGhlIGNvZGUgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBzdWJtaXR0aW5nIHdvcmsgdG8gdGhlIGlvX3dxLCBvciBoYW5kbGluZyBjb21wbGV0aW9ucy4gR2l2ZW4gdGhlIHJhbmdlLCBpdCBjb3VsZCBiZSBhIHNtYWxsIGZ1bmN0aW9uIG9yIHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgY29tcGxleCBmdW5jdGlvbi4gSSBhbnRpY2lwYXRlIGVuY291bnRlcmluZyBjaGVja3MgZm9yIGVycm9yIGNvbmRpdGlvbnMsIHN1Y2ggYXMgdGhlIHdvcmtlciB0aHJlYWQgbm90IGJlaW5nIGF2YWlsYWJsZSBvciBleGNlZWRpbmcgYSBxdWV1ZSBzaXplLCB3aGljaCBzaG91bGQgcHJvYmFibHkgaW52b2x2ZSBzb21lIGZvcm0gb2YgYmFja29mZiBvciByZXRyeSBsb2dpYy4gVW5kZXJzdGFuZGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSB3aWxsIGJlIGNydWNpYWwgaW4gZ2F1Z2luZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBiZSB3YXJ5IG9mIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBpZiB0aGUgY29kZSBoYW5kbGVzIGludGVycnVwdHMgdGhhdCBtaWdodCBiZSB0cmlnZ2VyZWQgdG8gaGFuZGxlIEkvTyBjb21wbGV0aW9uLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OToyNi43ODE0NjQxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdHN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXFxuMTA5NjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXFxuMTA5NzpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxcbjEwOTg6XFx0e1xcbjEwOTk6XFx0XFx0aWYgKHdvcmsgXFx1MDAyNlxcdTAwMjYgbWF0Y2gtXFx1MDAzZWZuKHdvcmssIG1hdGNoLVxcdTAwM2VkYXRhKSkge1xcbjExMDA6XFx0XFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbjExMDE6XFx0XFx0XFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXFx1MDAzZXRhc2spO1xcbjExMDI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTEwMzpcXHRcXHR9XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXFxuMTEwOTpcXHR7XFxuMTExMDpcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoID0gZGF0YTtcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0LypcXG4xMTEzOlxcdFxcdCAqIEhvbGQgdGhlIGxvY2sgdG8gYXZvaWQgLVxcdTAwM2VjdXJfd29yayBnb2luZyBvdXQgb2Ygc2NvcGUsIGNhbGxlclxcbjExMTQ6XFx0XFx0ICogbWF5IGRlcmVmZXJlbmNlIHRoZSBwYXNzZWQgaW4gd29yay5cXG4xMTE1OlxcdFxcdCAqL1xcbjExMTY6XFx0XFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2d29ya2VyLVxcdTAwM2Vsb2NrKTtcXG4xMTE3OlxcdFxcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVxcdTAwM2VjdXJfd29yaykpXFxuMTExODpcXHRcXHRcXHRtYXRjaC1cXHUwMDNlbnJfcnVubmluZysrO1xcbjExMTk6XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZ3b3JrZXItXFx1MDAzZWxvY2spO1xcbjExMjA6XFx0XFxuMTEyMTpcXHRcXHRyZXR1cm4gbWF0Y2gtXFx1MDAzZW5yX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgIW1hdGNoLVxcdTAwM2VjYW5jZWxfYWxsO1xcbjExMjI6XFx0fVxcbjExMjM6XFx0XFxuMTEyNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW9fd3FfcmVtb3ZlX3BlbmRpbmcoc3RydWN0IGlvX3dxICp3cSxcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbjExMjY6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxcbjExMjc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb193cV93b3JrX25vZGUgKnByZXYpXFxuMTEyODpcXHR7XFxuMTEyOTpcXHRcXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XFxuMTEzMDpcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcXG4xMTMxOlxcdFxcbjExMzI6XFx0XFx0aWYgKGlvX3dxX2lzX2hhc2hlZCh3b3JrKSBcXHUwMDI2XFx1MDAyNiB3b3JrID09IHdxLVxcdTAwM2VoYXNoX3RhaWxbaGFzaF0pIHtcXG4xMTMzOlxcdFxcdFxcdGlmIChwcmV2KVxcbjExMzQ6XFx0XFx0XFx0XFx0cHJldl93b3JrID0gY29udGFpbmVyX29mKHByZXYsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MjYuNzgxNTk5MDQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyMjY3OTYzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyAvIGlvLXdxIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgY2FuY2VsbGF0aW9uIG9mIHF1ZXVlZCB3b3JrLiBUaGUga2V5IGlzIGluIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBhY2NvdW50cywgd2hpY2ggYXJlIGVpdGhlciBib3VuZCBvciB1bmJvdW5kZWQgKGBJT19XUV9BQ0NUX0JPVU5EYCBhbmQgYElPX1dRX0FDQ1RfVU5CT1VORGApLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBldmVuIGlmIGEgbWF0Y2ggd2FzIGZvdW5kIGZvciBjYW5jZWxsYXRpb24gd2l0aGluIGFuIGFjY291bnQsIHRoZSBjb2RlIHdvdWxkIGl0ZXJhdGUgdGhyb3VnaCAqYWxsKiBhY2NvdW50cyAodGhlIGxvb3AgYGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspYCkuIE5vdywgd2l0aCB0aGUgY2hhbmdlcywgdGhlIGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJldHVybnMgdHJ1ZSBpZiBgIW1hdGNoLVx1MDAzZWNhbmNlbF9hbGxgIGFuZCBhIHJ1bm5pbmcgd29yayBpcyBtYXRjaGVkLiBDcml0aWNhbGx5LCBpZiBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCByZXR1cm5zIHRydWUsIHRoZSBtYWluIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYCBmdW5jdGlvbiBicmVha3MgaXRzIGxvb3AgKHRoZSBgaWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpIGJyZWFrO2ApLiBUaGlzIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBlYXJseS1leGl0IGNvbmRpdGlvbiBiYXNlZCBvbiB0aGUgZmlyc3QgbWF0Y2guXG5cblRoZSBjb2RlIGNoYW5nZXMgYXJlIHN1YnRsZSwgYnV0IHRoZXkgcmVwcmVzZW50IGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gaW4gdGhlIGlvX3VyaW5nIC8gaW8td3EgaW1wbGVtZW50YXRpb24uIFRoZSBgaW9fd3Ffd29ya2VyX2NhbmNlbGAgZnVuY3Rpb24gaXRzZWxmIGlzIHRoZSBjb3JlIG9mIHRoaXMgbG9naWMuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSByZXR1cm4gdmFsdWVzIGFzIHNpZ25pZmljYW50OiBpZiBgbWF0Y2gtXHUwMDNlY2FuY2VsX2FsbGAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2U7IGlmIGl0J3MgZmFsc2UsIGFuZCBhIHdvcmtlciBtYXRjaGVzLCBpdCByZXR1cm5zIHRydWUsIGluY3JlbWVudGluZyBgbWF0Y2gtXHUwMDNlbnJfcnVubmluZ2AuXG5cbk5vdywgY29uc2lkZXJpbmcgZnV6emluZywgbGV0J3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgcGFydCBvZiBvbmUgb2YgdGhlIG1vc3QgZnV6emVkIGFuZCBjcml0aWNhbCBzdWJzeXN0ZW1zIGluIExpbnV4ISBUaGUgcGF0Y2ggaXMgYWx0ZXJpbmcgdGhlIGFsZ29yaXRobSBmbG93IG9mIHdvcmsgY2FuY2VsbGF0aW9uLiBJbiB0aGUgY29udGV4dCBvZiB0aGUgd29ydGgtZnV6emluZyBwb3NpdGl2ZSBjcml0ZXJpYSwgdGhpcyBwYXRjaCBkZWZpbml0aXZlbHkgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgXCJsb2dpYyBtb2RpZmljYXRpb25zIGluIC4uLiBjb3JlIHN1YnN5c3RlbXNcIiBhbmQgXCJyZXN0cnVjdHVyaW5nIG9mIC4uLiBhbGdvcml0aG0gZmxvd3MuXCJcblxuaW9fdXJpbmcgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIGNhbiB1c2UgdGhlIHN0YW5kYXJkIHN5c2NhbGxzIGBpb191cmluZ19zZXR1cGAsIGBpb191cmluZ19lbnRlcmAsIGFuZCBgaW9fdXJpbmdfcmVnaXN0ZXJgIHRvIGV4ZXJjaXNlIHRoaXMgY29kZS4gU3l6a2FsbGVyLCBpbiBwYXJ0aWN1bGFyLCBoYXMgZXh0ZW5zaXZlIGNvdmVyYWdlIG9mIGlvX3VyaW5nLiBUaGlzIG1ha2VzIHRoaXMgcGF0Y2ggYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUbyBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgdGhlIGdpdCBsb2cgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIHJhdGlvbmFsZSBhbmQgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MzUuMDA4Mzk4MDA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg2MDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9jYW5jZWxfcnVubmluZ193b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTExODQ9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk0LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE5NTpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjA3PWVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjMyLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIzMzpcXHRpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHdxLCBcXHUwMDI2bWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNC1cXHRpZiAobWF0Y2gubnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MzUuMDU0MjY1ODkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MzUwMzI0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpb193cV9jYW5jZWxfY2JgIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgaW9fd3FfY2FuY2VsX2NiYC4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgYmVpbmcgaW52b2tlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgYSBxdWljayBzZWFyY2gsIHByb2JhYmx5IHVzaW5nIHNvbWV0aGluZyBsaWtlIGBncmVwYCBvciBgY3Njb3BlYCBkZXBlbmRpbmcgb24gdGhlIHByb2plY3Qgc2V0dXAsIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgcGFzc2luZyBpbnRvIGl0LCBjb250ZXh0LXdpc2UsIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlLiBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IGl0IGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgSS9PIGNvbXBsZXRpb24gZnJhbWV3b3JrLiBBcmUgd2UgdGFsa2luZyBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRocmVhZCBwb29scywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjYWxsIGNvbnRleHQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSdtIGxvb2tpbmcgZm9yIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMsIHBlcmhhcHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBtYWNybyBleHBhbnNpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIEkvTyB3b3JrIHF1ZXVlIGl0c2VsZi4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIEkvTyBpcyBzY2hlZHVsZWQgYW5kIGNhbmNlbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTozNy40ODkzMDA1OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODU5NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvY2FuY2VsLmM9Nzg9c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtODgtXFx0YWxsID0gY2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19BU1lOQ19DQU5DRUxfQUxMfElPUklOR19BU1lOQ19DQU5DRUxfQU5ZKTtcXG5pb191cmluZy9jYW5jZWwuYzo4OTpcXHRjYW5jZWxfcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXFx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTkwLVxcdHN3aXRjaCAoY2FuY2VsX3JldCkge1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MDUtXFx0XFx0XFx0Y29udGludWU7XFxuaW9fdXJpbmcvY2FuY2VsLmM6NTA2OlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNTA3LVxcdFxcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MzktXFx0XFx0ICovXFxuaW9fdXJpbmcvY2FuY2VsLmM6NTQwOlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF90YXNrX2NiLFxcbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNhbmNlbCwgdHJ1ZSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExOTU9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjA2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIwNzplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG5pb191cmluZy9pby13cS5jLTEyMDgtXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9pby13cS5oPTY0PXR5cGVkZWYgYm9vbCAod29ya19jYW5jZWxfZm4pKHN0cnVjdCBpb193cV93b3JrICosIHZvaWQgKik7XFxuaW9fdXJpbmcvaW8td3EuaC02NS1cXG5pb191cmluZy9pby13cS5oOjY2OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxcbmlvX3VyaW5nL2lvLXdxLmgtNjctXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjMwOT1zdGF0aWMgX19jb2xkIHZvaWQgaW9fcmluZ19leGl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzQ4LVxcdFxcdFxcdGlmICh0c2sgXFx1MDAyNlxcdTAwMjYgdHNrLVxcdTAwM2Vpb191cmluZyBcXHUwMDI2XFx1MDAyNiB0c2stXFx1MDAzZWlvX3VyaW5nLVxcdTAwM2Vpb193cSlcXG5pb191cmluZy9pb191cmluZy5jOjIzNDk6XFx0XFx0XFx0XFx0aW9fd3FfY2FuY2VsX2NiKHRzay1cXHUwMDNlaW9fdXJpbmctXFx1MDAzZWlvX3dxLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjM1MC1cXHRcXHRcXHRcXHRcXHRcXHRpb19jYW5jZWxfY3R4X2NiLCBjdHgsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTozNy41MzcxNjcxMDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIwMDU4MDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBpb193cV9jYW5jZWxfY2IqKlxuXG5Pa2F5LCBzbyBgaW9fd3FfY2FuY2VsX2NiYCBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCwgYW5kIGl0J3MgdHJpZ2dlcmVkIGZyb20gYSBjb3VwbGUgb2YgaW1wb3J0YW50IGxvY2F0aW9ucy4gUHJpbWFyaWx5LCBpdCdzIGNhbGxlZCB3aXRoaW4gYGlvX2FzeW5jX2NhbmNlbF9vbmVgLCB3aGljaCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgSU9SSU5HX09QX0FTWU5DX0NBTkNFTGAgb3BlcmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBtZWNoYW5pc20gZm9yIGNhbmNlbGxpbmcgYXN5bmNocm9ub3VzIEkvTyByZXF1ZXN0cy4gQnV0LCBpdCdzIGFsc28gdXNlZCBkdXJpbmcgY29udGV4dCBleGl0IGFuZCB3aGVuIHJlcXVlc3RzIGFyZSBleHBsaWNpdGx5IGNhbmNlbGxlZCB0aHJvdWdoIG90aGVyIG1lYW5zLiBUaGUgZmFjdCB0aGF0IGl0J3MgaGFuZGxpbmcgY2FuY2VsbGF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlcyBtYWtlcyBpdCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIEkvTyByaW5nIG1hbmFnZW1lbnQuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLCBsZXQncyBkaXZlIGludG8gYGlvX2FzeW5jX2NhbmNlbF9vbmVgLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGNvb3JkaW5hdGluZyB3aXRoIGBpb193cV9jYW5jZWxfY2JgIGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGJleW9uZCB0aGUgb2J2aW91cyBgQVNZTkNfQ0FOQ0VMYCBwYXRoLiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBpbXBsaWNhdGlvbnMgaGVyZSBmb3IgcmVzb3VyY2UgY2xlYW51cCBhbmQgcHJldmVudGluZyBkb3VibGUtZnJlZXMsIHNvIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjM5LjczNzc1MDM2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvY2FuY2VsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0c3RhdGljIGJvb2wgaW9fY2FuY2VsX2NiKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxcbiAgNzE6XFx0e1xcbiAgNzI6XFx0XFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlvX2tpb2NiLCB3b3JrKTtcXG4gIDczOlxcdFxcdHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QgPSBkYXRhO1xcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRyZXR1cm4gaW9fY2FuY2VsX3JlcV9tYXRjaChyZXEsIGNkKTtcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdFxcbiAgNzg6XFx0c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbiAgNzk6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRlbnVtIGlvX3dxX2NhbmNlbCBjYW5jZWxfcmV0O1xcbiAgODI6XFx0XFx0aW50IHJldCA9IDA7XFxuICA4MzpcXHRcXHRib29sIGFsbDtcXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0aWYgKCF0Y3R4IHx8ICF0Y3R4LVxcdTAwM2Vpb193cSlcXG4gIDg2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRhbGwgPSBjZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX0FTWU5DX0NBTkNFTF9BTEx8SU9SSU5HX0FTWU5DX0NBTkNFTF9BTlkpO1xcbiAgODk6XFx0XFx0Y2FuY2VsX3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVxcdTAwM2Vpb193cSwgaW9fY2FuY2VsX2NiLCBjZCwgYWxsKTtcXG4gIDkwOlxcdFxcdHN3aXRjaCAoY2FuY2VsX3JldCkge1xcbiAgOTE6XFx0XFx0Y2FzZSBJT19XUV9DQU5DRUxfT0s6XFxuICA5MjpcXHRcXHRcXHRyZXQgPSAwO1xcbiAgOTM6XFx0XFx0XFx0YnJlYWs7XFxuICA5NDpcXHRcXHRjYXNlIElPX1dRX0NBTkNFTF9SVU5OSU5HOlxcbiAgOTU6XFx0XFx0XFx0cmV0ID0gLUVBTFJFQURZO1xcbiAgOTY6XFx0XFx0XFx0YnJlYWs7XFxuICA5NzpcXHRcXHRjYXNlIElPX1dRX0NBTkNFTF9OT1RGT1VORDpcXG4gIDk4OlxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuICA5OTpcXHRcXHRcXHRicmVhaztcXG4gMTAwOlxcdFxcdH1cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuIDEwNjpcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBjZC1cXHUwMDNlY3R4O1xcbiAxMDk6XFx0XFx0aW50IHJldDtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0V0FSTl9PTl9PTkNFKCFpb193cV9jdXJyZW50X2lzX3dvcmtlcigpIFxcdTAwMjZcXHUwMDI2IHRjdHggIT0gY3VycmVudC1cXHUwMDNlaW9fdXJpbmcpO1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKHRjdHgsIGNkKTtcXG4gMTE0OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjM5LjczNzg2NTQ3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDYzNDEwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIGlvX3VyaW5nL2lvLXdxLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaW9fdXJpbmcvaW8td3EuY2AgZmlsZSBhbmQgZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgZ292ZXJuaW5nIGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZWl0aGVyIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseSwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgb3IgdGhlIGBpb191cmluZy9NYWtlZmlsZWAg4oCTIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBiYXNlZCBvbiBLY29uZmlnIHN5bWJvbHMuIExldCdzIHNlZSB3aGF0IGNsdWVzIHdlIGNhbiBmaW5kIGluIGVpdGhlciBvZiB0aG9zZSBsb2NhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gdW5jb3ZlciB0aGUgcmVsZXZhbnQgc3ltYm9scyBxdWlja2x5OyB0aGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo0NC44MDEyNzg1NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgaW9fdXJpbmdcXG4gICA0OlxcdFxcbiAgIDU6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9VUklOR1xcbiAgIDY6XFx0R0NPVl9QUk9GSUxFIDo9IHlcXG4gICA3OlxcdGVuZGlmXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19JT19VUklORylcXHRcXHQrPSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdFxcdFxcdFxcdHRjdHgubyBmaWxldGFibGUubyBydy5vIHBvbGwubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHRcXHR0dy5vIHdhaXQubyBldmVudGZkLm8gdXJpbmdfY21kLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0XFx0b3BlbmNsb3NlLm8gc3Fwb2xsLm8geGF0dHIubyBub3AubyBcXFxcXFxuICAxMzpcXHRcXHRcXHRcXHRcXHRcXHRmcy5vIHNwbGljZS5vIHN5bmMubyBtc2dfcmluZy5vIFxcXFxcXG4gIDE0OlxcdFxcdFxcdFxcdFxcdFxcdGFkdmlzZS5vIG9wZW5jbG9zZS5vIHN0YXR4Lm8gdGltZW91dC5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdFxcdFxcdFxcdGNhbmNlbC5vIHdhaXRpZC5vIHJlZ2lzdGVyLm8gXFxcXFxcbiAgMTY6XFx0XFx0XFx0XFx0XFx0XFx0dHJ1bmNhdGUubyBtZW1tYXAubyBhbGxvY19jYWNoZS5vIFxcXFxcXG4gIDE3OlxcdFxcdFxcdFxcdFxcdFxcdHF1ZXJ5Lm8gbG9vcC5vXFxuICAxODpcXHRcXG4gIDE5OlxcdG9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVxcdCs9IHpjcngub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX0lPX1dRKVxcdFxcdCs9IGlvLXdxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6NDQuODAxNDExNjY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNTkyOTQ3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSB0YXNrIGlzIHByZXR0eSBjbGVhciwgYW5kIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIHRoZSBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpb191cmluZywgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGNvbnRyb2xsYWJsZSwgd2hhdCBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZC4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBlc3NlbnRpYWxseSBiZSB0aGUgcm9hZG1hcCBmb3IgaG93IHRoaXMgbW9kdWxlIGJlaGF2ZXMsIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQgYW5kIHNlZSB3aGF0IHdlIGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo0OC45NjA3MDk5MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzUzNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPX1dRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG5pb191cmluZy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbmlvX3VyaW5nL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19GVVRFWClcXHRcXHQrPSBmdXRleC5vXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz03OD1zdGF0aWMgaW50IGlvX2FzeW5jX2NhbmNlbF9vbmUoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy05MC1cXHRzd2l0Y2ggKGNhbmNlbF9yZXQpIHtcXG5pb191cmluZy9jYW5jZWwuYzo5MTpcXHRjYXNlIElPX1dRX0NBTkNFTF9PSzpcXG5pb191cmluZy9jYW5jZWwuYy05Mi1cXHRcXHRyZXQgPSAwO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTkzLVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjk0OlxcdGNhc2UgSU9fV1FfQ0FOQ0VMX1JVTk5JTkc6XFxuaW9fdXJpbmcvY2FuY2VsLmMtOTUtXFx0XFx0cmV0ID0gLUVBTFJFQURZO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTk2LVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjk3OlxcdGNhc2UgSU9fV1FfQ0FOQ0VMX05PVEZPVU5EOlxcbmlvX3VyaW5nL2NhbmNlbC5jLTk4LVxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz00ODk9c3RhdGljIF9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfaW93cShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTUwNi1cXHRcXHRjcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXFx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY3R4X2NiLCBjdHgsIHRydWUpO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjUwNzpcXHRcXHRyZXQgfD0gKGNyZXQgIT0gSU9fV1FfQ0FOQ0VMX05PVEZPVU5EKTtcXG5pb191cmluZy9jYW5jZWwuYy01MDgtXFx0fVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01NDEtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjYW5jZWwsIHRydWUpO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjU0MjpcXHRcXHRyZXQgfD0gKGNyZXQgIT0gSU9fV1FfQ0FOQ0VMX05PVEZPVU5EKTtcXG5pb191cmluZy9jYW5jZWwuYy01NDMtXFx0fVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0zNz1lbnVtIHtcXG5pb191cmluZy9pby13cS5jOjM4OlxcdElPX1dRX0JJVF9FWElUXFx0XFx0PSAwLFxcdC8qIHdxIGV4aXRpbmcgKi9cXG5pb191cmluZy9pby13cS5jOjM5OlxcdElPX1dRX0JJVF9FWElUX09OX0lETEVcXHQ9IDEsXFx0LyogYWxsb3cgYWxsIHdvcmtlcnMgdG8gZXhpdCBvbiBpZGxlICovXFxuaW9fdXJpbmcvaW8td3EuYy00MC19O1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz00OT1zdHJ1Y3QgaW9fd29ya2VyIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzMtI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjRcXG5pb191cmluZy9pby13cS5jOjc0OiNkZWZpbmUgSU9fV1FfSEFTSF9PUkRFUlxcdDZcXG5pb191cmluZy9pby13cS5jLTc1LSNlbHNlXFxuaW9fdXJpbmcvaW8td3EuYzo3NjojZGVmaW5lIElPX1dRX0hBU0hfT1JERVJcXHQ1XFxuaW9fdXJpbmcvaW8td3EuYy03Ny0jZW5kaWZcXG5pb191cmluZy9pby13cS5jLTc4LVxcbmlvX3VyaW5nL2lvLXdxLmM6Nzk6I2RlZmluZSBJT19XUV9OUl9IQVNIX0JVQ0tFVFNcXHQoMXUgXFx1MDAzY1xcdTAwM2MgSU9fV1FfSEFTSF9PUkRFUilcXG5pb191cmluZy9pby13cS5jLTgwLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDg9ZW51bSB7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDk6XFx0SU9fV1FfQUNDVF9CT1VORCxcXG5pb191cmluZy9pby13cS5jOjExMDpcXHRJT19XUV9BQ0NUX1VOQk9VTkQsXFxuaW9fdXJpbmcvaW8td3EuYzoxMTE6XFx0SU9fV1FfQUNDVF9OUixcXG5pb191cmluZy9pby13cS5jLTExMi19O1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTc9c3RydWN0IGlvX3dxIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTI4LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI5OlxcdHN0cnVjdCBpb193cV9hY2N0IGFjY3RbSU9fV1FfQUNDVF9OUl07XFxuaW9fdXJpbmcvaW8td3EuYy0xMzAtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMi1cXG5pb191cmluZy9pby13cS5jOjEzMzpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqaGFzaF90YWlsW0lPX1dRX05SX0hBU0hfQlVDS0VUU107XFxuaW9fdXJpbmcvaW8td3EuYy0xMzQtXFxuLS1cXG5pb191cmluZy9pby13cS5jPTE1Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvX2dldF93b3JrX2hhc2godW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXFxuaW9fdXJpbmcvaW8td3EuYy0xNTcte1xcbmlvX3VyaW5nL2lvLXdxLmM6MTU4OlxcdHJldHVybiB3b3JrX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIElPX1dRX0hBU0hfU0hJRlQ7XFxuaW9fdXJpbmcvaW8td3EuYy0xNTktfVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fd3FfYWNjdCAqaW9fZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSwgYm9vbCBib3VuZClcXG5pb191cmluZy9pby13cS5jLTE3OC17XFxuaW9fdXJpbmcvaW8td3EuYzoxNzk6XFx0cmV0dXJuIFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtib3VuZCA/IElPX1dRX0FDQ1RfQk9VTkQgOiBJT19XUV9BQ0NUX1VOQk9VTkRdO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTgwLX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTgyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX3dvcmtfZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTg0LXtcXG5pb191cmluZy9pby13cS5jOjE4NTpcXHRyZXR1cm4gaW9fZ2V0X2FjY3Qod3EsICEod29ya19mbGFncyBcXHUwMDI2IElPX1dRX1dPUktfVU5CT1VORCkpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTg2LX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTk5PWJvb2wgaW9fd3Ffd29ya2VyX3N0b3BwZWQodm9pZClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjA1LVxcbmlvX3VyaW5nL2lvLXdxLmM6MjA2OlxcdHJldHVybiB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndvcmtlci1cXHUwMDNld3EtXFx1MDAzZXN0YXRlKTtcXG5pb191cmluZy9pby13cS5jLTIwNy19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTM5MT1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzk3LVxcdC8qIHJhY2VkIHdpdGggZXhpdCwganVzdCBpZ25vcmUgY3JlYXRlIGNhbGwgKi9cXG5pb191cmluZy9pby13cS5jOjM5ODpcXHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpKVxcbmlvX3VyaW5nL2lvLXdxLmMtMzk5LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVxcdFxcdCAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NDIxOlxcdFxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuaW9fdXJpbmcvaW8td3EuYy00MjItXFx0XFx0XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTYwMj1zdGF0aWMgdm9pZCBpb193b3JrZXJfaGFuZGxlX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTY0My1cXHRcXHRkbyB7XFxuaW9fdXJpbmcvaW8td3EuYzo2NDQ6XFx0XFx0XFx0Ym9vbCBkb19raWxsID0gdGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNjQ1LVxcdFxcdFxcdHN0cnVjdCBpb193cV93b3JrICpuZXh0X2hhc2hlZCwgKmxpbmtlZDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjU0LVxcdFxcdFxcdGlmIChkb19raWxsIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvaW8td3EuYzo2NTU6XFx0XFx0XFx0ICAgICh3b3JrX2ZsYWdzIFxcdTAwMjYgSU9fV1FfV09SS19VTkJPVU5EKSlcXG5pb191cmluZy9pby13cS5jOjY1NjpcXHRcXHRcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW8td3EuYy02NTctXFx0XFx0XFx0cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb19raW9jYiwgd29yayk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTY5MD1zdGF0aWMgaW50IGlvX3dxX3dvcmtlcih2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy03MDMtXFxuaW9fdXJpbmcvaW8td3EuYzo3MDQ6XFx0d2hpbGUgKCF0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpIHtcXG5pb191cmluZy9pby13cS5jLTcwNS1cXHRcXHRsb25nIHJldDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzI0LVxcdFxcdGlmICgobGFzdF90aW1lb3V0IFxcdTAwMjZcXHUwMDI2IChleGl0X21hc2sgfHwgYWNjdC1cXHUwMDNlbnJfd29ya2VycyBcXHUwMDNlIDEpKSB8fFxcbmlvX3VyaW5nL2lvLXdxLmM6NzI1OlxcdFxcdCAgICB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVF9PTl9JRExFLCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKSkge1xcbmlvX3VyaW5nL2lvLXdxLmMtNzI2LVxcdFxcdFxcdGFjY3QtXFx1MDAzZW5yX3dvcmtlcnMtLTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVxcbmlvX3VyaW5nL2lvLXdxLmM6NzUxOlxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkgXFx1MDAyNlxcdTAwMjYgaW9fYWNjdF9ydW5fcXVldWUoYWNjdCkpXFxuaW9fdXJpbmcvaW8td3EuYy03NTItXFx0XFx0aW9fd29ya2VyX2hhbmRsZV93b3JrKGFjY3QsIHdvcmtlcik7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTk2ND1zdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTY3LXtcXG5pb191cmluZy9pby13cS5jOjk2ODpcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcXG5pb191cmluZy9pby13cS5jLTk2OS1cXHRcXHRpZiAoaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoXFx1MDAyNndxLVxcdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9OTgwPXZvaWQgaW9fd3Ffc2V0X2V4aXRfb25faWRsZShzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGVuYWJsZSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTg1LVxcdGlmICghZW5hYmxlKSB7XFxuaW9fdXJpbmcvaW8td3EuYzo5ODY6XFx0XFx0Y2xlYXJfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtOTg3LVxcdFxcdHJldHVybjtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTg5LVxcbmlvX3VyaW5nL2lvLXdxLmM6OTkwOlxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpKVxcbmlvX3VyaW5nL2lvLXdxLmMtOTkxLVxcdFxcdHJldHVybjtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9OTk4PXN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwMDAtXFx0ZG8ge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTAwMTpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMDAyLVxcdFxcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDMzPXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA0Ny1cXHQgKi9cXG5pb191cmluZy9pby13cS5jOjEwNDg6XFx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKSB8fFxcbmlvX3VyaW5nL2lvLXdxLmM6MTA0OTpcXHQgICAgKHdvcmtfZmxhZ3MgXFx1MDAyNiBJT19XUV9XT1JLX0NBTkNFTCkpIHtcXG5pb191cmluZy9pby13cS5jLTEwNTAtXFx0XFx0aW9fcnVuX2NhbmNlbCh3b3JrLCB3cSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwNjItXFxuaW9fdXJpbmcvaW8td3EuYzoxMDYzOlxcdGlmIChkb19jcmVhdGUgXFx1MDAyNlxcdTAwMjYgKCh3b3JrX2ZsYWdzIFxcdTAwMjYgSU9fV1FfV09SS19DT05DVVJSRU5UKSB8fFxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2NC1cXHQgICAgIWF0b21pY19yZWFkKFxcdTAwMjZhY2N0LVxcdTAwM2Vucl9ydW5uaW5nKSkpIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTA4Nz12b2lkIGlvX3dxX2hhc2hfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqdmFsKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDkwLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTA5MTpcXHRiaXQgPSBoYXNoX3B0cih2YWwsIElPX1dRX0hBU0hfT1JERVIpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTA5MjpcXHRhdG9taWNfb3IoSU9fV1FfV09SS19IQVNIRUQgfCAoYml0IFxcdTAwM2NcXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA5My19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTEwOTU9c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA5OS1cXHRpZiAod29yayBcXHUwMDI2XFx1MDAyNiBtYXRjaC1cXHUwMDNlZm4od29yaywgbWF0Y2gtXFx1MDAzZWRhdGEpKSB7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTAwOlxcdFxcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXFx1MDAyNndvcmstXFx1MDAzZWZsYWdzKTtcXG5pb191cmluZy9pby13cS5jLTExMDEtXFx0XFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXFx1MDAzZXRhc2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTY4PXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE3Mi1yZXRyeTpcXG5pb191cmluZy9pby13cS5jOjExNzM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE3NC1cXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTk1PXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE5OS1cXG5pb191cmluZy9pby13cS5jOjEyMDA6XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuaW9fdXJpbmcvaW8td3EuYy0xMjAxLVxcdFxcdGlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoXFx1MDAyNndxLVxcdTAwM2VhY2N0W2ldLCBtYXRjaCkpXFxuLS1cXG5pb191cmluZy9pby13cS5jPTEyMDc9ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEyMzAtXFx0aWYgKG1hdGNoLm5yX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXFxuaW9fdXJpbmcvaW8td3EuYzoxMjMxOlxcdFxcdHJldHVybiBJT19XUV9DQU5DRUxfT0s7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjMyLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjM0LVxcdGlmIChtYXRjaC5ucl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIzNTpcXHRcXHRyZXR1cm4gSU9fV1FfQ0FOQ0VMX1JVTk5JTkc7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjM2LVxcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNy1cXHRpZiAobWF0Y2gubnJfcnVubmluZylcXG5pb191cmluZy9pby13cS5jOjEyMzg6XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9SVU5OSU5HO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTIzOS1cXHRpZiAobWF0Y2gubnJfcGVuZGluZylcXG5pb191cmluZy9pby13cS5jOjEyNDA6XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcXG5pb191cmluZy9pby13cS5jOjEyNDE6XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9OT1RGT1VORDtcXG5pb191cmluZy9pby13cS5jLTEyNDItfVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjQ0PXN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjEyNTM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTI1NC1cXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTI2Mz1zdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTI4Mi1cXHRjcHVzZXRfY3B1c19hbGxvd2VkKGRhdGEtXFx1MDAzZXRhc2ssIHdxLVxcdTAwM2VjcHVfbWFzayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMjgzOlxcdHdxLVxcdTAwM2VhY2N0W0lPX1dRX0FDQ1RfQk9VTkRdLm1heF93b3JrZXJzID0gYm91bmRlZDtcXG5pb191cmluZy9pby13cS5jOjEyODQ6XFx0d3EtXFx1MDAzZWFjY3RbSU9fV1FfQUNDVF9VTkJPVU5EXS5tYXhfd29ya2VycyA9XFxuaW9fdXJpbmcvaW8td3EuYy0xMjg1LVxcdFxcdFxcdFxcdHRhc2tfcmxpbWl0KGN1cnJlbnQsIFJMSU1JVF9OUFJPQyk7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEyODctXFx0d3EtXFx1MDAzZXdhaXQuZnVuYyA9IGlvX3dxX2hhc2hfd2FrZTtcXG5pb191cmluZy9pby13cS5jOjEyODg6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTI4OS1cXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTMyOD12b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzMjkte1xcbmlvX3VyaW5nL2lvLXdxLmM6MTMzMDpcXHRzZXRfYml0KElPX1dRX0JJVF9FWElULCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKTtcXG5pb191cmluZy9pby13cS5jLTEzMzEtfVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xNDA3PXZvaWQgaW9fd3FfcHV0X2FuZF9leGl0KHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy0xNDA4LXtcXG5pb191cmluZy9pby13cS5jOjE0MDk6XFx0V0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQxMC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTQ4OT1pbnQgaW9fd3FfbWF4X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSwgaW50ICpuZXdfY291bnQpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0OTEtXFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3Q7XFxuaW9fdXJpbmcvaW8td3EuYzoxNDkyOlxcdGludCBwcmV2W0lPX1dRX0FDQ1RfTlJdO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5My1cXHRpbnQgaTtcXG5pb191cmluZy9pby13cS5jLTE0OTQtXFxuaW9fdXJpbmcvaW8td3EuYzoxNDk1OlxcdEJVSUxEX0JVR19PTigoaW50KSBJT19XUV9BQ0NUX0JPVU5EICAgIT0gKGludCkgSU9fV1FfQk9VTkQpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTQ5NjpcXHRCVUlMRF9CVUdfT04oKGludCkgSU9fV1FfQUNDVF9VTkJPVU5EICE9IChpbnQpIElPX1dRX1VOQk9VTkQpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTQ5NzpcXHRCVUlMRF9CVUdfT04oKGludCkgSU9fV1FfQUNDVF9OUiAgICAgICE9IDIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5OC1cXG5pb191cmluZy9pby13cS5jOjE0OTk6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTUwMC1cXHRcXHRpZiAobmV3X2NvdW50W2ldIFxcdTAwM2UgdGFza19ybGltaXQoY3VycmVudCwgUkxJTUlUX05QUk9DKSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTUwMy1cXG5pb191cmluZy9pby13cS5jOjE1MDQ6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcXG5pb191cmluZy9pby13cS5jLTE1MDUtXFx0XFx0cHJldltpXSA9IDA7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTE1MDgtXFxuaW9fdXJpbmcvaW8td3EuYzoxNTA5OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspIHtcXG5pb191cmluZy9pby13cS5jLTE1MTAtXFx0XFx0YWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTUxOC1cXG5pb191cmluZy9pby13cS5jOjE1MTk6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcXG5pb191cmluZy9pby13cS5jLTE1MjAtXFx0XFx0bmV3X2NvdW50W2ldID0gcHJldltpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmlvX3VyaW5nL2lvLXdxLmg6MjojaWZuZGVmIElOVEVSTkFMX0lPX1dRX0hcXG5pb191cmluZy9pby13cS5oOjM6I2RlZmluZSBJTlRFUk5BTF9JT19XUV9IXFxuaW9fdXJpbmcvaW8td3EuaC00LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD0xMD1lbnVtIHtcXG5pb191cmluZy9pby13cS5oOjExOlxcdElPX1dRX1dPUktfQ0FOQ0VMXFx0PSAxLFxcbmlvX3VyaW5nL2lvLXdxLmg6MTI6XFx0SU9fV1FfV09SS19IQVNIRURcXHQ9IDIsXFxuaW9fdXJpbmcvaW8td3EuaDoxMzpcXHRJT19XUV9XT1JLX1VOQk9VTkRcXHQ9IDQsXFxuaW9fdXJpbmcvaW8td3EuaDoxNDpcXHRJT19XUV9XT1JLX0NPTkNVUlJFTlRcXHQ9IDE2LFxcbmlvX3VyaW5nL2lvLXdxLmgtMTUtXFxuaW9fdXJpbmcvaW8td3EuaDoxNjpcXHRJT19XUV9IQVNIX1NISUZUXFx0PSAyNCxcXHQvKiB1cHBlciA4IGJpdHMgYXJlIHVzZWQgZm9yIGhhc2gga2V5ICovXFxuaW9fdXJpbmcvaW8td3EuaC0xNy19O1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD0xOT1lbnVtIGlvX3dxX2NhbmNlbCB7XFxuaW9fdXJpbmcvaW8td3EuaDoyMDpcXHRJT19XUV9DQU5DRUxfT0ssXFx0LyogY2FuY2VsbGVkIGJlZm9yZSBzdGFydGVkICovXFxuaW9fdXJpbmcvaW8td3EuaDoyMTpcXHRJT19XUV9DQU5DRUxfUlVOTklORyxcXHQvKiBmb3VuZCwgcnVubmluZywgYW5kIGF0dGVtcHRlZCBjYW5jZWxsZWQgKi9cXG5pb191cmluZy9pby13cS5oOjIyOlxcdElPX1dRX0NBTkNFTF9OT1RGT1VORCxcXHQvKiB3b3JrIG5vdCBmb3VuZCAqL1xcbmlvX3VyaW5nL2lvLXdxLmgtMjMtfTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmg9NTQ9c3RhdGljIGlubGluZSBib29sIF9faW9fd3FfaXNfaGFzaGVkKHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxcbmlvX3VyaW5nL2lvLXdxLmgtNTUte1xcbmlvX3VyaW5nL2lvLXdxLmg6NTY6XFx0cmV0dXJuIHdvcmtfZmxhZ3MgXFx1MDAyNiBJT19XUV9XT1JLX0hBU0hFRDtcXG5pb191cmluZy9pby13cS5oLTU3LX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmg9NjY9ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuLS1cXG5pb191cmluZy9pby13cS5oLTY4LVxcbmlvX3VyaW5nL2lvLXdxLmg6Njk6I2lmIGRlZmluZWQoQ09ORklHX0lPX1dRKVxcbmlvX3VyaW5nL2lvLXdxLmgtNzAtZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MzYxPXN0YXRpYyB2b2lkIGlvX3ByZXBfYXN5bmNfd29yayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMzcyLVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfRk9SQ0VfQVNZTkMpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzozNzM6XFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ09OQ1VSUkVOVCwgXFx1MDAyNnJlcS1cXHUwMDNld29yay5mbGFncyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zNzQtXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTM4OC1cXHRcXHRpZiAoZGVmLVxcdTAwM2V1bmJvdW5kX25vbnJlZ19maWxlKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mzg5OlxcdFxcdFxcdGF0b21pY19vcihJT19XUV9XT1JLX1VOQk9VTkQsIFxcdTAwMjZyZXEtXFx1MDAzZXdvcmsuZmxhZ3MpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMzkwLVxcdH1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NDEwPXZvaWQgaW9fcXVldWVfaW93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMxLVxcdGlmIChXQVJOX09OX09OQ0UoIXNhbWVfdGhyZWFkX2dyb3VwKHRjdHgtXFx1MDAzZXRhc2ssIGN1cnJlbnQpKSlcXG5pb191cmluZy9pb191cmluZy5jOjQzMjpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZyZXEtXFx1MDAzZXdvcmsuZmxhZ3MpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMzLVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDY2PXZvaWQgaW9fd3Ffc3VibWl0X3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0ODAtXFx0LyogZWl0aGVyIGNhbmNlbGxlZCBvciBpby13cSBpcyBkeWluZywgc28gZG9uJ3QgdG91Y2ggdGN0eC1cXHUwMDNlaW93cSAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ4MTpcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNndvcmstXFx1MDAzZWZsYWdzKSBcXHUwMDI2IElPX1dRX1dPUktfQ0FOQ0VMKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDgyLWZhaWw6XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0ODctXFx0XFx0ZXJyID0gLUVCQURGO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ4ODpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDg5LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz0zND1zdHJ1Y3QgaW9fcG9sbF90YWJsZSB7XFxuLS1cXG5pb191cmluZy9wb2xsLmMtNTMtXFxuaW9fdXJpbmcvcG9sbC5jOjU0OiNkZWZpbmUgSU9fV1FFX0ZfRE9VQkxFXFx0XFx0MVxcbmlvX3VyaW5nL3BvbGwuYy01NS1cXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz01OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19raW9jYiAqd3FlX3RvX3JlcShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FlKVxcbi0tXFxuaW9fdXJpbmcvcG9sbC5jLTYyLVxcbmlvX3VyaW5nL3BvbGwuYzo2MzpcXHRyZXR1cm4gKHN0cnVjdCBpb19raW9jYiAqKShwcml2IFxcdTAwMjYgfklPX1dRRV9GX0RPVUJMRSk7XFxuaW9fdXJpbmcvcG9sbC5jLTY0LX1cXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz02Nj1zdGF0aWMgaW5saW5lIGJvb2wgd3FlX2lzX2RvdWJsZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FlKVxcbi0tXFxuaW9fdXJpbmcvcG9sbC5jLTY5LVxcbmlvX3VyaW5nL3BvbGwuYzo3MDpcXHRyZXR1cm4gcHJpdiBcXHUwMDI2IElPX1dRRV9GX0RPVUJMRTtcXG5pb191cmluZy9wb2xsLmMtNzEtfVxcbi0tXFxuaW9fdXJpbmcvcG9sbC5jPTQ2NT1zdGF0aWMgdm9pZCBfX2lvX3F1ZXVlX3Byb2Moc3RydWN0IGlvX3BvbGwgKnBvbGwsIHN0cnVjdCBpb19wb2xsX3RhYmxlICpwdCxcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYy00OTctXFx0XFx0LyogbWFyayBhcyBkb3VibGUgd3EgZW50cnkgKi9cXG5pb191cmluZy9wb2xsLmM6NDk4OlxcdFxcdHdxZV9wcml2YXRlIHw9IElPX1dRRV9GX0RPVUJMRTtcXG5pb191cmluZy9wb2xsLmMtNDk5LVxcdFxcdGlvX2luaXRfcG9sbF9pb2NiKHBvbGwsIGZpcnN0LVxcdTAwM2VldmVudHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo0OS4wMDU0Njk1MzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAxMjk3NjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFJlbGV2YW50IEtjb25maWcgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYENPTkZJR19JT19XUWAgYW5kIGBDT05GSUdfSU9fVVJJTkdgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCBwb3RlbnRpYWxseSwgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGZlYXR1cmUgZmxhZ3Mgc3Vycm91bmRpbmcgdGhlbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgZW5hYmxlbWVudCBhcmUuIEFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgZGVwZW5kZW50IG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBvciBkbyB0aGV5IHNpbXBseSBvZmZlciBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zIG9mIHNpbWlsYXIgZnVuY3Rpb25hbGl0eT8gVGhlIHNwZWNpZmljcyBvZiB0aGVzZSBvcHRpb25zIGFyZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo1MS4wMTg0NDkxNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDI5OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo1MS4wNjM4ODY3NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njc4MzM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gQ09ORklHX0lPX1dRKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19JT19XUWAuIFRoaXMgbWVhbnMgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgY2hhbGxlbmdlLCBvZiBjb3Vyc2UsIGlzIHRoYXQgYSBzeW1ib2wgbGlrZSB0aGlzIGNvdWxkIGJlIGRlZmluZWQgKG9yIHJlZmVyZW5jZWQpIGFueXdoZXJlIHdpdGhpbiB0aGUgdmFzdCBzZWEgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIGEgcmVjdXJzaXZlIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBLY29uZmlnIGhpZXJhcmNoeS4gSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2VseSBgZ3JlcGAgb3IgYGZpbmRgIGNvbWJpbmVkIHdpdGggYGdyZXBgLCB0byBlZmZpY2llbnRseSBsb2NhdGUgYWxsIGluc3RhbmNlcy4gSSdsbCBiZSBsb29raW5nIGZvciBleGFjdCBtYXRjaGVzLCBidXQgSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgcG9zc2libGUgaW5kaXJlY3QgZGVmaW5pdGlvbnMgKGUuZy4sIHZpYSBgc2VsZWN0YCBvciBgZGVwZW5kcyBvbmApLiBJJ2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlYXJjaCBpcyBwcm9wZXJseSBzY29wZWQgdG8gdGhlIEtjb25maWcgZmlsZXMgc3BlY2lmaWNhbGx5LCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBvdGhlciBzb3VyY2UgZmlsZXMuIE9uY2UgSSBoYXZlIHRoZSBpbml0aWFsIGhpdCBsaXN0LCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBlYWNoIGRlZmluaXRpb24gY2xvc2VseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0OiB3aGF0IGFyY2hpdGVjdHVyZSwgc3Vic3lzdGVtLCBhbmQgZGVwZW5kZW5jaWVzIGFyZSBpbnZvbHZlZD8gQW5kLCBwZXJoYXBzIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpcyB0aGlzIHN5bWJvbCAqdXNlZCogaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgSS9PIHN1YnN5c3RlbT8gVGhpcyBpcyBnb2luZyB0byBiZSBhIG11bHRpLXN0ZXAgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMDEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo1My45MjA2NzMzMjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzk5OTgwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1dRXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NDE5PXNvdXJjZSBcXFwiZnMvdW5pY29kZS9LY29uZmlnXFxcIlxcbmZzL0tjb25maWctNDIwLVxcbmZzL0tjb25maWc6NDIxOmNvbmZpZyBJT19XUVxcbmZzL0tjb25maWctNDIyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6NTYuNTYwNjc3NzM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNjI1NTA2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCByZWZsZWN0aW5nIHRoZSBhcHByb2FjaCBJJ2QgdGFrZSBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZXN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDIxLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIGEga2V5IHNldHRpbmcgb3IgcmVsYXRlZCBncm91cCBvZiBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbiBhcmUgbG9jYXRlZC4gSSdsbCByZWFkIHRob3NlIDIwIGxpbmVzIGNhcmVmdWxseSwgbG9va2luZyBmb3I6XG5cbiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIHNldHRpbmdzLCBmZWF0dXJlcywgb3Iga2VybmVsIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIHNlY3Rpb24gaXMgcmVsZXZhbnQ/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGZsb3cuXG4qICAgKipEZWZhdWx0IFZhbHVlczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncz8gQXJlIHRoZXkgc2Vuc2libGUgZGVmYXVsdHMgZm9yIG1vc3QgdXNlIGNhc2VzLCBvciBhcmUgdGhleSB0YWlsb3JlZCBmb3Igc3BlY2lmaWMgc2NlbmFyaW9zPyBUaGlzIHJldmVhbHMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBkZXZlbG9wZXJzLlxuKiAgICoqSGVscCBUZXh0OioqIElzIHRoZSBoZWxwIHRleHQgY2xlYXIgYW5kIGNvbmNpc2U/IERvZXMgaXQgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNob2ljZXM/IEFtYmlndWl0eSBoZXJlIGlzIGEgcmVkIGZsYWcuXG4qICAgKipTeW1ib2xpYyBOYW1lczoqKiBBcmUgdGhleSB1c2luZyBtZWFuaW5nZnVsIHN5bWJvbGljIG5hbWVzIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIHNldHRpbmdzIGFjdHVhbGx5ICptZWFuKiwgbm90IGp1c3QgdGhlaXIgdGVjaG5pY2FsIGxhYmVscy5cbiogICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIEhvdyBpcyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbnQgb24gb3RoZXIgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJlPyBJcyB0aGUgbG9naWMgc3RyYWlnaHRmb3J3YXJkIG9yIGNvbnZvbHV0ZWQ/IEknbGwgbmVlZCB0byB0cmFjZSB0aGUgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS5cbiogICAqKlJlbGF0aW9uc2hpcHMqKjogSG93IGRvZXMgdGhpcyBwYXJ0IG9mIHRoZSBjb25maWcgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHBpY3R1cmU/IEknbSBob3BpbmcgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW50ZXJhY3QgYW5kIGFmZmVjdCBlYWNoIG90aGVyLlxuXG5CeSBmb2N1c2luZyBvbiB0aGVzZSBwb2ludHMsIEkgY2FuIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDQyMSwgdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBkZXZlbG9wZXJzIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCdzIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy4gSSdtIGFudGljaXBhdGluZyBzb21lIGNvbXBsZXggaW50ZXJhY3Rpb25zIGluIHRoaXMgcGFydGljdWxhciBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjU5LjgyMzIzMDYzOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxNTpcXHRlbmRpZiAjIE5FVFdPUktfRklMRVNZU1RFTVNcXG4gNDE2OlxcdFxcbiA0MTc6XFx0c291cmNlIFxcXCJmcy9ubHMvS2NvbmZpZ1xcXCJcXG4gNDE4OlxcdHNvdXJjZSBcXFwiZnMvZGxtL0tjb25maWdcXFwiXFxuIDQxOTpcXHRzb3VyY2UgXFxcImZzL3VuaWNvZGUvS2NvbmZpZ1xcXCJcXG4gNDIwOlxcdFxcbiA0MjE6XFx0Y29uZmlnIElPX1dRXFxuIDQyMjpcXHRcXHRib29sXFxuIDQyMzpcXHRcXG4gNDI0OlxcdGVuZG1lbnVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6NTkuODIzMzAyODE4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1OTk2OTg5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHF1ZXN0aW9uIFwiV2hlcmUgaXMgQ09ORklHX0lPX1dRIHNlbGVjdGVkP1wiOlxuXG4qKkRpZ2dpbmcgaW50byBDT05GSUdfSU9fV1EgU2VsZWN0aW9uKipcblxuT2theSwgc28gdGhlIGtlcm5lbCBjb25maWcgb3B0aW9uIGBDT05GSUdfSU9fV1FgLi4uIHdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBhc3N1bWluZyBpdCdzIHBhcnQgb2YgdGhlIGJyb2FkZXIgSU8gc3Vic3lzdGVtLCBwcm9iYWJseSByZWxhdGVkIHRvIHdvcmtxdWV1ZXMsIHNpbmNlIHRoZSBuYW1lIGlzIHN1Z2dlc3RpdmUuIEknZCBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBmb3IgaXQsIGxpa2VseSB1c2luZyBgZ3JlcCBcIkNPTkZJR19JT19XUVwiICovS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGxpa2VseSBLY29uZmlnIGZpbGVzLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBleGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgZGVmaW5pdGlvbi4gSSdtIGxvb2tpbmcgZm9yIGNvbmRpdGlvbnMsIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0ZWxsIG1lICp3aGVuKiBpdCdzIHNlbGVjdGVkLlxuXG5Gcm9tIHRoZXJlIEknZCBjaGVjayByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMsIGlmIG5lZWRlZCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBnb3RjaGFzIG9yIGhpc3RvcmljYWwgY29udGV4dCBhcm91bmQgaXRzIHVzYWdlLiBJJ2QgYmUgbG9va2luZyBmb3Igc2NlbmFyaW9zIHdoZXJlIGl0J3MgKmF1dG9tYXRpY2FsbHkqIHNlbGVjdGVkIChtYXliZSB2aWEgYW5vdGhlciBvcHRpb24pLCBvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIHVzZS1jYXNlcyB0aGF0IHdvdWxkIGJyaW5nIGl0IGluLiBJIGFsc28gd291bGQgYmUgcHJlcGFyZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMgdGhhdCB1c2UgaXQgaWYgZ3JlcCB0dXJucyB1cCBhbnl0aGluZyBsaWtlIHRoaXMuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBwYXRoIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBvciBub3QgYENPTkZJR19JT19XUWAgZ2V0cyBpbmNsdWRlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNlbGVjdGlvbiBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDM5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjAzLjQyMzAwNDQ0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MzU2MjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSU9fV1FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5NjA9Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5NjEtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxOTYyOlxcdHNlbGVjdCBJT19XUVxcbmluaXQvS2NvbmZpZy0xOTYzLVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDowNS4xMDY1NzgxMDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ5NDc0MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgc28gYENPTkZJR19JT19VUklOR2AgYXV0b21hdGljYWxseSBzZWxlY3RzIGBDT05GSUdfSU9fV1FgLCBtZWFuaW5nIHdlIHNob3VsZCBlbmFibGUgZnV6emluZyBmb3IgYElPX1VSSU5HYCwgYW5kIG9wdGlvbmFsbHkgYElPX1dRYC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoaXMgcGF0Y2ggcHJlc2VudHMgYSBwcm9taXNpbmcgZnV6emluZyB0YXJnZXQuXG5cblllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmchIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiBgaW9fd3FgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZ1bmN0aW9uIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHdoaWNoIG5vdyBjb250YWlucyB0aGUgbWFpbiBsb2dpYy4gVGhlIG9yaWdpbmFsIHVzZWQgYSBsb29wIHRvIGNhbGwgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AsIGJ1dCBub3cgYnJlYWtzIHRoZSBsb29wIHVwb24gYW55IHN1Y2Nlc3NmdWwgY2FuY2VsbGF0aW9uLiBUaGlzIGVhcmx5LWV4aXQgYmVoYXZpb3IgY2hhbmdlIGR1cmluZyB0aGUgY2FuY2VsbGF0aW9uIG9mIHJ1bm5pbmcgd29yayBhY3Jvc3MgZGlmZmVyZW50IHdvcmtlciBhY2NvdW50cyB3aXRoaW4gYGlvX3dxYCBpcyBzaWduaWZpY2FudC4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGlvX3VyaW5nYCBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHN5c3RlbSBjYWxscyBzdWNoIGFzIGBpb191cmluZ2AgY2FuY2VsIHJlcXVlc3RzIG9yIGV2ZW4gZHVyaW5nIGNvbnRleHQgdGVhcmRvd24sIHRoaXMgbWFrZXMgaXQgYW4gZXh0cmVtZWx5IGF0dHJhY3RpdmUgZnV6emluZyB0YXJnZXQuIEl0J3MgbW9kaWZ5aW5nIGV4ZWN1dGFibGUga2VybmVsIGxvZ2ljIHdpdGhpbiBhIGNvcmUgc3Vic3lzdGVtLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXZSBrbm93IGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgYXJlIGJvdGggc3RhdGljLCByZXNpZGluZyB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBCdXQgd2hhdCBhYm91dCBgaW9fd3FfY2FuY2VsX2NiYD8gSXQgYXBwZWFycyB0byBiZSBub24tc3RhdGljLCBhbmQgdGh1cywgcG90ZW50aWFsbHkgZXhwb3J0ZWQgYW5kIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIFdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiBvdXIgZm9jdXMuIExldCdzIGFsc28gY29uc2lkZXIgYGlvX2FzeW5jX2NhbmNlbF9vbmVgIGFuZCBgaW9fYXN5bmNfY2FuY2VsYCBpbiBgaW9fdXJpbmcvY2FuY2VsLmNgIHNpbmNlIHRoZXkgYXJlIGFsc28gcG90ZW50aWFsbHkgaW52b2x2ZWQuXG5cbkkganVzdCBjaGVja2VkIGFnYWluLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAgaXMgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIGdsb2JhbGx5IGF2YWlsYWJsZS4gVGhlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCBzdWNoIGFzIGBpb193cV93b3JrZXJfY2FuY2VsYCBhbmQgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCByZW1haW4gc3RhdGljLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IHRvIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgd2hpY2ggaXMgZXhjZWxsZW50IGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG91ciBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBpb193cV9jYW5jZWxfY2JgLCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgKGFuZCBieSBleHRlbnNpb24gYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2ApLCBhbmQgYGlvX2FzeW5jX2NhbmNlbGAgc2luY2UgdGhhdCdzIHRoZSBvcCBoYW5kbGVyIGZvciBgSU9SSU5HX09QX0FTWU5DX0NBTkNFTGAuIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpb19hc3luY19jYW5jZWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoxMC42MDEzMjQ3NjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDE1MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2FzeW5jX2NhbmNlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvY2FuY2VsLmM9NzA9c3RhdGljIGJvb2wgaW9fY2FuY2VsX2NiKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNzctXFxuaW9fdXJpbmcvY2FuY2VsLmM6Nzg6c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbmlvX3VyaW5nL2NhbmNlbC5jLTc5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkKVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9MTA1PWludCBpb190cnlfY2FuY2VsKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMTEyLVxcbmlvX3VyaW5nL2NhbmNlbC5jOjExMzpcXHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKHRjdHgsIGNkKTtcXG5pb191cmluZy9jYW5jZWwuYy0xMTQtXFx0LypcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTEzOS1cXG5pb191cmluZy9jYW5jZWwuYzoxNDA6aW50IGlvX2FzeW5jX2NhbmNlbF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvY2FuY2VsLmMtMTQxLXtcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTE3My1cXG5pb191cmluZy9jYW5jZWwuYzoxNzQ6c3RhdGljIGludCBfX2lvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL2NhbmNlbC5jLTE3NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMTk3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNmN0eC1cXHUwMDNldGN0eF9saXN0LCBjdHhfbm9kZSkge1xcbmlvX3VyaW5nL2NhbmNlbC5jOjE5ODpcXHRcXHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKG5vZGUtXFx1MDAzZXRhc2stXFx1MDAzZWlvX3VyaW5nLCBjZCk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtMTk5LVxcdFxcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMjA5LVxcbmlvX3VyaW5nL2NhbmNlbC5jOjIxMDppbnQgaW9fYXN5bmNfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvY2FuY2VsLmMtMjExLXtcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTIzOC1cXG5pb191cmluZy9jYW5jZWwuYzoyMzk6XFx0cmV0ID0gX19pb19hc3luY19jYW5jZWwoXFx1MDAyNmNkLCB0Y3R4LCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtMjQwLWRvbmU6XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz0yNDc9c3RhdGljIGludCBfX2lvX3N5bmNfY2FuY2VsKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMjY0LVxcbmlvX3VyaW5nL2NhbmNlbC5jOjI2NTpcXHRyZXR1cm4gX19pb19hc3luY19jYW5jZWwoY2QsIHRjdHgsIDApO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTI2Ni19XFxuLS1cXG5pb191cmluZy9jYW5jZWwuaD03PXN0cnVjdCBpb19jYW5jZWxfZGF0YSB7XFxuLS1cXG5pb191cmluZy9jYW5jZWwuaC0xNS1cXG5pb191cmluZy9jYW5jZWwuaDoxNjppbnQgaW9fYXN5bmNfY2FuY2VsX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvY2FuY2VsLmg6MTc6aW50IGlvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9jYW5jZWwuaC0xOC1cXG4tLVxcbmlvX3VyaW5nL29wZGVmLmM9NTQ9Y29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiBpb19pc3N1ZV9kZWZzW10gPSB7XFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTE5MS1cXHRcXHQuYXVkaXRfc2tpcFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjE5MjpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fYXN5bmNfY2FuY2VsX3ByZXAsXFxuaW9fdXJpbmcvb3BkZWYuYzoxOTM6XFx0XFx0Lmlzc3VlXFx0XFx0XFx0PSBpb19hc3luY19jYW5jZWwsXFxuaW9fdXJpbmcvb3BkZWYuYy0xOTQtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MTAuNjQ2NzQ5NTc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NDk2NjM4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgZnV6emluZyBzZXR1cC4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNhbmNlbGxhdGlvbiBwYXRocyB3aXRoaW4gYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW8td3EuY2AgZmlsZS4gSSBzZWUgdGhhdCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGlvX2FzeW5jX2NhbmNlbF9vbmVgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgX19pb19hc3luY19jYW5jZWxgIGFuZCB1bHRpbWF0ZWx5IGJ5IHRoZSB1c2VyLWZhY2luZyBgaW9fYXN5bmNfY2FuY2VsYCAoZm9yIGBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMYCkgYW5kIGBfX2lvX3N5bmNfY2FuY2VsYCAoZm9yIGBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUxgKS4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYGlvX3VyaW5nX3RyeV9jYW5jZWxfaW93cWAgYW5kIGBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzYC4gU28sIHRoZXJlJ3MgcXVpdGUgYSBiaXQgb2YgaW50ZXJjb25uZWN0ZWRuZXNzIGhlcmUuXG5cbk15IHJldmlldyBvZiB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgaGlnaGxpZ2h0cyB0aGF0IHNpbmNlIEknbSB0YXJnZXRpbmcgZmVhdHVyZS1zcGVjaWZpYyBsb2dpYywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSBtb2RpZmljYXRpb24gaGVyZSBwcmltYXJpbHkgY29uY2VybnMgdGhlIGNhbmNlbGxhdGlvbiBvZiBydW5uaW5nIHdvcmsuIFdpdGhpbiBgaW8td3EuY2AsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AsIGJvdGggb2Ygd2hpY2ggYXJlIHN0YXRpYy4gVGhlIGd1aWRlbGluZXMgc3BlY2lmaWNhbGx5IGRpc2N1c3Mgc3RhdGljIGlubGluZXMgYW5kIHN1Z2dlc3QgdGFyZ2V0aW5nIG5vbi1zdGF0aWMgY2FsbGVycyB0aGF0IGV4ZXJjaXNlIHRob3NlIGZ1bmN0aW9ucy4gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgYGlvX3dxX2NhbmNlbF9jYmAgYXBwZWFycyB0byBiZSBhIGRpcmVjdCBjYWxsZXIgb2YgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gSSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZW50cnlwb2ludCBmdW5jdGlvbnMgYGlvX2FzeW5jX2NhbmNlbGAgYW5kIGBpb190cnlfY2FuY2VsYCwgYXMgdGhleSdyZSB0aGUgdXNlci1mYWNpbmcgcG9pbnRzLlxuXG5Hb29kIHRvIGtub3cgdGhhdCBzeXprYWxsZXIgKmNhbiogdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGNvbXBpbGVkIGFzIHN5bWJvbHMsIHdoaWNoIGlzIHRoZSBjYXNlIGhlcmUuIFNvLCBpbmNsdWRpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMgKmFuZCogdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGBpb193cV9jYW5jZWxfY2JgLCBwbHVzIHRoZSBlbnRyeXBvaW50cyBpcyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgYW5kIHRoZSByaWdodCBhcHByb2FjaC4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgYWxsIGluIHRoZSByaWdodCBwbGFjZS4gWWVwLCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBpbmRlZWQgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLCBhcyBleHBlY3RlZC5cblxuVGhlcmVmb3JlLCBteSBmaW5hbCBgRm9jdXNTeW1ib2xzYCBsaXN0IHdpbGwgYmU6XG5cbiogICBcImlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya1wiXG4qICAgXCJpb193cV9jYW5jZWxfcnVubmluZ193b3JrXCJcbiogICBcImlvX3dxX2NhbmNlbF9jYlwiXG4qICAgXCJpb19hc3luY19jYW5jZWxcIlxuXG5Eb3VibGUtY2hlY2tpbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLCBgSU9fVVJJTkdgIGFuZCBgSU9fV1FgICh0aGUgbGF0dGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb3JtZXIpIGFyZSBlbmFibGVkLCB3aGljaCBpcyBjcml0aWNhbC5cblxuRmluYWxseSwgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMsIEknbGwgc2V0OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoYWJzb2x1dGVseSlcbiogICBgUmVhc29uaW5nYDogQ2xlYXJseSBleHBsYWluIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHJ1bm5pbmctd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLCBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGFjcm9zcyB3b3JrZXIgYWNjb3VudHMgb25jZSBhIHJ1bm5pbmcgd29ya2VyIGhhcyBtYXRjaGVkIGZvciBjYW5jZWxsYXRpb24gd2hlbiBub3QgY2FuY2VsbGluZyBhbGwgd29ya3MuIFRoaXMgaW1wYWN0cyBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGNhbmNlbGxhdGlvbiB3aXRoaW4gYGlvX3VyaW5nYCBhbmQgaXMgZnVsbHkgdXNlci1yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIklPX1VSSU5HXCIsIFwiSU9fV1FcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtcIiwgXCJpb193cV9jYW5jZWxfcnVubmluZ193b3JrXCIsIFwiaW9fd3FfY2FuY2VsX2NiXCIsIFwiaW9fYXN5bmNfY2FuY2VsXCJdYFxuXG5BbGwgc2V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NDIsIk91dHB1dFRva2VucyI6MjA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjE5LjE5NjQxNTIwNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDY0OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiSU9fV1FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICAgIFwiaW9fYXN5bmNfY2FuY2VsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJJT19XUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCIsXG4gICAgXCJpb19hc3luY19jYW5jZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjE5LjI2OTg4NzY4N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NjIzMDAxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoxOS4yNzAzNzk4NzhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTk2MTgwMzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yaygpIGFuZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSB0byByZXR1cm4gZWFybHkgd2hlbiBhIG1hdGNoaW5nIHdvcmtlciBoYXMgYmVlbiBjYW5jZWxlZCBhbmQgY2FuY2VsX2FsbCBpcyBmYWxzZS4gSXQgY2hhbmdlcyBjb250cm9sIGZsb3cgYnkgcHJvcGFnYXRpbmcgdGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGZyb20gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoKSB0aHJvdWdoIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHNvIHRoZSBsb29wIG92ZXIgYWNjb3VudHMgYnJlYWtzIGVhcmx5LlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmVhZHMgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgKHRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlICdyZXQnIGlzIGRpcmVjdGx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIsIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYm9vbCkuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHdpdGggaW9fd29ya2VyIG9yIGlvX3dxIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjQ4OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmNcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pby13cS5jXG4rKysgYi9pb191cmluZy9pby13cS5jXG5AQCAtMTE4MSwxMiArMTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbitzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4gXHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4ge1xuK1x0Ym9vbCByZXQ7XG4rXG4gXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi1cdGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbitcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbiBcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5AQCAtMTE5NSw3ICsxMTk4LDggQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcbi1cdFx0aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcbitcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoxOS4yNzAzODU5NjhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM3NjM1ODI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGlvLXdxLmMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgYWdhaW5zdCBgaW9fdXJpbmcvaW8td3EuY2AuIFNlZW1zIHdlJ3JlIG1vZGlmeWluZyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgaW9fdXJpbmcgd29ya3F1ZXVlLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgZm9jdXMgb24gdGhlIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGZ1bmN0aW9uLlxuXG5JdCdzIGNsZWFyIHRoZXkndmUgbWFkZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBhbHRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2FzIGB2b2lkYCwgYW5kIG5vdyBpdCdzIHJldHVybmluZyBhIGBib29sYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVGhpcyBzdWdnZXN0cyB0aGUgY2FsbGluZyBjb250ZXh0IG5vdyBuZWVkcyB0byBrbm93ICppZiogYSBjYW5jZWxsYXRpb24gYWN0dWFsbHkgb2NjdXJyZWQuIFByZXZpb3VzbHksIGl0IHNpbXBseSBpdGVyYXRlZC5cblxuTG9va2luZyBhdCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCBpdHNlbGYsIHRoZXkndmUgd3JhcHBlZCB0aGUgd29ya2VyIGl0ZXJhdGlvbiBpbiBhIHNwaW5sb2NrIHRvIHByb3RlY3QgYGFjY3QtXHUwMDNld29ya2Vyc19sb2NrYCB3aGljaCBtYWtlcyBzZW5zZSwgZ2l2ZW4gY29uY3VycmVudCBhY2Nlc3MgaXMgbGlrZWx5LiBUaGUgbG9vcCB3aXRoIGBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcmAgYWxzbyBsb29rcyB0byBiZSB0aGUgc2FtZSwgYnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCB0byBgYnJlYWtgIHRoZSBsb29wIGluIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYC4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24uIElmIGEgY2FuY2VsbGF0aW9uIGlzIHN1Y2Nlc3NmdWxseSBmb3VuZCBvbiBvbmUgYGlvX2FjY3RgIHdpdGhpbiBhIGBpb193cWAgKG9mIHdoaWNoIHRoZXJlIGFyZSBhIGZldyksIGl0IHNob3J0LWNpcmN1aXRzIHRoZSByZXN0LiBUaGlzIGxpa2VseSBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSBvbmx5ICpvbmUqIHdvcmsgaXRlbSBuZWVkZWQgY2FuY2VsbGF0aW9uLlxuXG5UaGUgUkNVIHJlYWQgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBpdGVyYXRpb24gaW4gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJlbWFpbiB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3RydWN0dXJlIHRoZXkncmUgcHJvdGVjdGluZyBmcm9tIG1vZGlmaWNhdGlvbiBieSB0aGUgdW5kZXJseWluZyB3b3JrZXJzLlxuXG5Fc3NlbnRpYWxseSwgdGhleSd2ZSBhZGRlZCBhIGNhbmNlbGxhdGlvbiBzdWNjZXNzIGluZGljYXRvciBhbmQgb3B0aW1pemVkIHRoZSBjYW5jZWxsYXRpb24gc2VhcmNoIGJ5IGJyZWFraW5nIHRoZSBsb29wLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYm9vbGVhbiByZXR1cm4gdmFsdWUgbW9yZSB0aG9yb3VnaGx5LiBJIGJldCB0aGV5J3JlIG5vdyB1c2luZyB0aGF0IHJldHVybiB2YWx1ZSB1cHN0cmVhbSB0byBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgc3VjY2VzcyBvZiB0aGUgY2FuY2VsbGF0aW9uLiBObyBwb2ludCBpbiBjb250aW51aW5nIHRoZSBzZWFyY2ggaWYgdGhlIHdvcmsgaXMgYWxyZWFkeSBkb25lISBUaGF0J3MgYSBnb29kIG9wdGltaXphdGlvbiBmb3IgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjI0LjY0Njc0Njc4OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcbjExNTE6XFx0XFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2YWNjdC1cXHUwMDNlbG9jayk7XFxuMTE1MjpcXHRcXHR3cV9saXN0X2Zvcl9lYWNoKG5vZGUsIHByZXYsIFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrX2xpc3QpIHtcXG4xMTUzOlxcdFxcdFxcdHdvcmsgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGlvX3dxX3dvcmssIGxpc3QpO1xcbjExNTQ6XFx0XFx0XFx0aWYgKCFtYXRjaC1cXHUwMDNlZm4od29yaywgbWF0Y2gtXFx1MDAzZWRhdGEpKVxcbjExNTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE1NjpcXHRcXHRcXHRpb193cV9yZW1vdmVfcGVuZGluZyh3cSwgYWNjdCwgd29yaywgcHJldik7XFxuMTE1NzpcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZWxvY2spO1xcbjExNTg6XFx0XFx0XFx0aW9fcnVuX2NhbmNlbCh3b3JrLCB3cSk7XFxuMTE1OTpcXHRcXHRcXHRtYXRjaC1cXHUwMDNlbnJfcGVuZGluZysrO1xcbjExNjA6XFx0XFx0XFx0Lyogbm90IHNhZmUgdG8gY29udGludWUgYWZ0ZXIgdW5sb2NrICovXFxuMTE2MTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTYyOlxcdFxcdH1cXG4xMTYzOlxcdFxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNlbG9jayk7XFxuMTE2NDpcXHRcXG4xMTY1OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTY2OlxcdH1cXG4xMTY3OlxcdFxcbjExNjg6XFx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExNjk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG4xMTcwOlxcdHtcXG4xMTcxOlxcdFxcdGludCBpO1xcbjExNzI6XFx0cmV0cnk6XFxuMTE3MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKSB7XFxuMTE3NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHRpZiAoaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBhY2N0LCBtYXRjaCkpIHtcXG4xMTc3OlxcdFxcdFxcdFxcdGlmIChtYXRjaC1cXHUwMDNlY2FuY2VsX2FsbClcXG4xMTc4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMTE3OTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTgwOlxcdFxcdFxcdH1cXG4xMTgxOlxcdFxcdH1cXG4xMTgyOlxcdH1cXG4xMTgzOlxcdFxcbjExODQ6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG4xMTg2OlxcdHtcXG4xMTg3OlxcdFxcdGJvb2wgcmV0O1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTA6XFx0XFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xcbjExOTE6XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExOTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuMTE5NzpcXHR7XFxuMTE5ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbjEyMDE6XFx0XFx0XFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcXG4xMjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMjA1OlxcdH1cXG4xMjA2OlxcdFxcbjEyMDc6XFx0ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuMTIwODpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmRhdGEsIGJvb2wgY2FuY2VsX2FsbClcXG4xMjA5OlxcdHtcXG4xMjEwOlxcdFxcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSBtYXRjaCA9IHtcXG4xMjExOlxcdFxcdFxcdC5mblxcdFxcdD0gY2FuY2VsLFxcbjEyMTI6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IGRhdGEsXFxuMTIxMzpcXHRcXHRcXHQuY2FuY2VsX2FsbFxcdD0gY2FuY2VsX2FsbCxcXG4xMjE0OlxcdFxcdH07XFxuMTIxNTpcXHRcXG4xMjE2OlxcdFxcdC8qXFxuMTIxNzpcXHRcXHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJ3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxcbjEyMTg6XFx0XFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxcbjEyMTk6XFx0XFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjI0LjY0Njg5OTcxOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTQ2MTE5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgRGVlcGVyIGludG8gSS9PIEFjY291bnRpbmcgYW5kIENhbmNlbGxhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGlzIHN5c3RlbSwgYnV0IG5vdyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHNvbWUgc3BlY2lmaWMgYXJlYXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgSS9PIGFjY291bnRpbmcgaXMgbWFuYWdlZCBhdCB0aGUgd29ya2VyIGxldmVsLCBhbmQgaG93IHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBmb3IgdGhlc2Ugd29ya2VycyB3b3Jrcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLiBJIHN1c3BlY3QgdGhpcyBpcyBjcnVjaWFsIGZvciB0cmFja2luZyBJL08gbWV0cmljcyByZWxhdGVkIHRvIGVhY2ggd29ya2VyLCB3aGljaCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IHZpdGFsIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLiBTbywgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBkdXJpbmcgZWFjaCB3b3JrZXIncyBJL08gcHJvY2Vzc2luZyBhbmQgaG93IGlzIHRoaXMgYWNjb3VudGVkIGZvcj8gQW5kIHRoZW4sIGVxdWFsbHkgaW1wb3J0YW50LCBob3cgZG9lcyB0aGUgY2FuY2VsbGF0aW9uIGZ1bmN0aW9uIGBpb193cV93b3JrZXJfY2FuY2VsYCBpbnRlZ3JhdGUgaW50byB0aGlzIEkvTyBhY2NvdW50aW5nIHNjaGVtZT8gSG93IGFyZSBvdXRzdGFuZGluZyBJL09zIGhhbmRsZWQgaWYgYSB3b3JrZXIgbmVlZHMgdG8gYmUgY2FuY2VsZWQ/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgcmVzb3VyY2VzLCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGUgd29yayB0aGF0ICp3YXMqIGRvbmUsIG9yIGRvZXMgaXQgcmVxdWlyZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFwcHJvYWNoPyBHZXR0aW5nIHRoZXNlIGFuc3dlcnMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHNvdW5kbmVzcyBvZiB0aGUgc3lzdGVtIHdpdGggcmVnYXJkIHRvIGVycm9yIGhhbmRsaW5nLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoyOC4xOTMwMjE4MDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTIzMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX3dvcmtlcl9jYW5jZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTEwODc9dm9pZCBpb193cV9oYXNoX3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHZvaWQgKnZhbClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA5NC1cXG5pb191cmluZy9pby13cS5jOjEwOTU6c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG5pb191cmluZy9pby13cS5jLTEwOTYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTA3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTEwODpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlciwgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTExMDkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTE2LVxcdHJhd19zcGluX2xvY2soXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTE3OlxcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVxcdTAwM2VjdXJfd29yaykpXFxuaW9fdXJpbmcvaW8td3EuYy0xMTE4LVxcdFxcdG1hdGNoLVxcdTAwM2Vucl9ydW5uaW5nKys7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExODQ9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg5LVxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTkwOlxcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG5pb191cmluZy9pby13cS5jLTExOTEtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoyOC4yMzk5NTgzMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDQ2ODgyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgYW5kIGFuYWx5emluZyBsaW5lcyAxMDkwLTExNDkgaW4gYGlvX3VyaW5nL2lvLXdxLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJTy1XUSBDb2RlKipcblxuT2theSwgSSdtIHplcm9pbmcgaW4gb24gbGluZXMgMTA5MC0xMTQ5IHdpdGhpbiBgaW9fdXJpbmcvaW8td3EuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHNvbWUga2V5IElPLVdRIChJTyBXb3JrIFF1ZXVlKSBsb2dpYyByZXNpZGVzLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIGZ1bmN0aW9ucyBvciBjb2RlIGJsb2NrcyBkZWFsaW5nIHdpdGggd29yayBpdGVtIHByb2Nlc3NpbmcsIHF1ZXVlIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgZXZlbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIElPLVdRIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgbGlrZWx5IHdvcmsgcXVldWVzLCBjb21wbGV0aW9uIHF1ZXVlcywgYW5kIHRoZSByZWxhdGVkIGxvY2tzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsLlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgaG93IHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQsIGhvdyB0aGV5J3JlIGVucXVldWVkIG9udG8gdGhlIElPLVdRLCBob3cgdGhlIHdvcmtlciB0aHJlYWRzIHBpY2sgdGhlbSB1cCwgYW5kIGZpbmFsbHksIGhvdyB0aGUgcmVzdWx0cyBhcmUgaGFuZGxlZCBhbmQgcG9zc2libHkgcmV0dXJuZWQgdG8gdGhlIHN1Ym1pdHRpbmcgYXBwbGljYXRpb24gb3Iga2VybmVsIHN1YnN5c3RlbS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHNwZWNpZmljIGNvZGUgY2h1bmsgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgYGlvX3VyaW5nYCBhcmNoaXRlY3R1cmUuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBvciB2YXJpYWJsZSBuYW1lcyBpbiB0aGlzIHJhbmdlIHdpbGwgbGlrZWx5IGdpdmUgYXdheSB3aGljaCBhc3BlY3RzIG9mIHRoZSBJTy1XUSBhcmUgcmVsZXZhbnQgaGVyZS5cblxuSSdtIHJlYWR5IHRvIGxvb2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIHNlY3Rpb24uIEFueSBjbGV2ZXIgdHJpY2tzIHRoZXkgbWlnaHQgYmUgZW1wbG95aW5nIGZvciBiYXRjaGluZywgemVyby1jb3B5LCBvciBvdGhlciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgd2lsbCBjZXJ0YWlubHkgY2F0Y2ggbXkgYXR0ZW50aW9uLiBNeSBleHBlcnRpc2UgaW4gY29uY3VycmVudCBwcm9ncmFtbWluZyBhbmQgSU8gc3Vic3lzdGVtcyB3aWxsIGhlbHAgbWUgZXZhbHVhdGUgdGhlIGVmZmljaWVuY3kgYW5kIHRocmVhZCBzYWZldHkgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGNvbXBsZXggbWVtb3J5IG1hbmFnZW1lbnQgb3IgZXJyb3IgaGFuZGxpbmcgdGhhdCBjb3VsZCBiZSBhIGNhdXNlIGZvciBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MzcuMjg2ODQzNTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGJpdCA9IGhhc2hfcHRyKHZhbCwgSU9fV1FfSEFTSF9PUkRFUik7XFxuMTA5MjpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19IQVNIRUQgfCAoYml0IFxcdTAwM2NcXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbjEwOTM6XFx0fVxcbjEwOTQ6XFx0XFxuMTA5NTpcXHRzdGF0aWMgYm9vbCBfX2lvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxcbjEwOTY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoLFxcbjEwOTc6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4xMDk4OlxcdHtcXG4xMDk5OlxcdFxcdGlmICh3b3JrIFxcdTAwMjZcXHUwMDI2IG1hdGNoLVxcdTAwM2Vmbih3b3JrLCBtYXRjaC1cXHUwMDNlZGF0YSkpIHtcXG4xMTAwOlxcdFxcdFxcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXFx1MDAyNndvcmstXFx1MDAzZWZsYWdzKTtcXG4xMTAxOlxcdFxcdFxcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVxcdTAwM2V0YXNrKTtcXG4xMTAyOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjExMDM6XFx0XFx0fVxcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTEwNjpcXHR9XFxuMTEwNzpcXHRcXG4xMTA4OlxcdHN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxcbjExMDk6XFx0e1xcbjExMTA6XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCA9IGRhdGE7XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdC8qXFxuMTExMzpcXHRcXHQgKiBIb2xkIHRoZSBsb2NrIHRvIGF2b2lkIC1cXHUwMDNlY3VyX3dvcmsgZ29pbmcgb3V0IG9mIHNjb3BlLCBjYWxsZXJcXG4xMTE0OlxcdFxcdCAqIG1heSBkZXJlZmVyZW5jZSB0aGUgcGFzc2VkIGluIHdvcmsuXFxuMTExNTpcXHRcXHQgKi9cXG4xMTE2OlxcdFxcdHJhd19zcGluX2xvY2soXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuMTExNzpcXHRcXHRpZiAoX19pb193cV93b3JrZXJfY2FuY2VsKHdvcmtlciwgbWF0Y2gsIHdvcmtlci1cXHUwMDNlY3VyX3dvcmspKVxcbjExMTg6XFx0XFx0XFx0bWF0Y2gtXFx1MDAzZW5yX3J1bm5pbmcrKztcXG4xMTE5OlxcdFxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2d29ya2VyLVxcdTAwM2Vsb2NrKTtcXG4xMTIwOlxcdFxcbjExMjE6XFx0XFx0cmV0dXJuIG1hdGNoLVxcdTAwM2Vucl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC1cXHUwMDNlY2FuY2VsX2FsbDtcXG4xMTIyOlxcdH1cXG4xMTIzOlxcdFxcbjExMjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGlvX3dxX3JlbW92ZV9wZW5kaW5nKHN0cnVjdCBpb193cSAqd3EsXFxuMTEyNTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG4xMTI2OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yayxcXG4xMTI3OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpwcmV2KVxcbjExMjg6XFx0e1xcbjExMjk6XFx0XFx0dW5zaWduZWQgaW50IGhhc2ggPSBpb19nZXRfd29ya19oYXNoKHdvcmspO1xcbjExMzA6XFx0XFx0c3RydWN0IGlvX3dxX3dvcmsgKnByZXZfd29yayA9IE5VTEw7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXFx1MDAyNlxcdTAwMjYgd29yayA9PSB3cS1cXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XFxuMTEzMzpcXHRcXHRcXHRpZiAocHJldilcXG4xMTM0OlxcdFxcdFxcdFxcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XFxuMTEzNTpcXHRcXHRcXHRpZiAocHJldl93b3JrIFxcdTAwMjZcXHUwMDI2IGlvX3dxX2lzX2hhc2hlZChwcmV2X3dvcmspIFxcdTAwMjZcXHUwMDI2XFxuMTEzNjpcXHRcXHRcXHQgICAgaW9fZ2V0X3dvcmtfaGFzaChwcmV2X3dvcmspID09IGhhc2gpXFxuMTEzNzpcXHRcXHRcXHRcXHR3cS1cXHUwMDNlaGFzaF90YWlsW2hhc2hdID0gcHJldl93b3JrO1xcbjExMzg6XFx0XFx0XFx0ZWxzZVxcbjExMzk6XFx0XFx0XFx0XFx0d3EtXFx1MDAzZWhhc2hfdGFpbFtoYXNoXSA9IE5VTEw7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXHR3cV9saXN0X2RlbChcXHUwMDI2YWNjdC1cXHUwMDNld29ya19saXN0LCBcXHUwMDI2d29yay1cXHUwMDNlbGlzdCwgcHJldik7XFxuMTE0MjpcXHR9XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdHN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExNDU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuMTE0NjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbjExNDc6XFx0e1xcbjExNDg6XFx0XFx0c3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqbm9kZSwgKnByZXY7XFxuMTE0OTpcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MzcuMjg2OTU4NTExWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2Njk5MDU4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkFuYWx5emluZyB0aGUgSS9PIFdvcmtxdWV1ZSBDYW5jZWxsYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBpb193cV93b3JrZXJfY2FuY2VsYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlIGJhc2VkIG9uIHR3byBmYWN0b3JzOiBgbWF0Y2gtXHUwMDNlbnJfcnVubmluZ2AgYW5kIGAhbWF0Y2gtXHUwMDNlY2FuY2VsX2FsbGAuIEJhc2ljYWxseSwgaXQncyBhIGNvbWJpbmVkIHN0YXRlIHJlcHJlc2VudGluZyBydW5uaW5nIHdvcmsgYW5kIHRoZSBkZXNpcmUgdG8gY2FuY2VsICpldmVyeXRoaW5nKi4gSW50dWl0aXZlbHksIHRoYXQgbWFrZXMgc2Vuc2UuIElmIHdvcmsgaXMgcnVubmluZyAqYW5kKiB3ZSBhcmVuJ3QgY2FuY2VsbGluZyBldmVyeXRoaW5nLCB0aGVuIGBpb193cV93b3JrZXJfY2FuY2VsYCBzaG91bGQgcmV0dXJuIHRydWUgKGFuZCBzaWduYWwgc29tZSBjb25kaXRpb24pLiBCdXQsIGxldCdzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBpdHMgaW50ZXJuYWxzLlxuVGhlbiwgSSBzZWUgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBpcyByZXR1cm5pbmcgYGJvb2xgIGFzIHdlbGwuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYWN0dWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYm9vbGVhbiByZXR1cm4gdmFsdWUgaXMsIGluIHRoaXMgY29udGV4dC4gSSdsbCBnbyBjaGVjayB0aGF0IGZ1bmN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MzkuOTU2ODY3ODA4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU3NzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19hY2N0X2Zvcl9lYWNoX3dvcmtlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9pby13cS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9OTAxPXN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTk0Mi0gKi9cXG5pb191cmluZy9pby13cS5jOjk0MzpzdGF0aWMgYm9vbCBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTk0NC1cXHRcXHRcXHRcXHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9OTY0PXN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05NjgtXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuaW9fdXJpbmcvaW8td3EuYzo5Njk6XFx0XFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXSwgZnVuYywgZGF0YSkpXFxuaW9fdXJpbmcvaW8td3EuYy05NzAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExODQ9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg5LVxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTkwOlxcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG5pb191cmluZy9pby13cS5jLTExOTEtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDo0MC4wMDU0NTM0MjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMxOTEyMDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyA5NDAtOTc1IG9mIGBpb191cmluZy9pby13cS5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlLCBwcm9iYWJseSBzb21lIGNydWNpYWwgcGFydCBvZiB0aGUgaW9fd3EgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlIGZpbGUgYW5kIGZ1bmN0aW9uIG5hbWUsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCB0aGUgd29yayBxdWV1ZSdzIGludGVyYWN0aW9uIHdpdGggSS9PIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0YXNrIHNjaGVkdWxpbmcsIGNvbXBsZXRpb24gaGFuZGxpbmcsIGVycm9yIG1hbmFnZW1lbnQsIG9yIHJlc291cmNlIGFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBleGVjdXRpb24gYW5kL29yIGNvbXBsZXRpb24gb2YgSS9PIHJlcXVlc3RzLiBMZXQncyBzZWUgaG93IHRoZSB3b3JrIHF1ZXVlIGlzIG1hbmFnaW5nIEkvTyBvcGVyYXRpb25zIGF0IHRoaXMganVuY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDo0NC4zMjQ1NzY3NDhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdCAqIEl0ZXJhdGUgdGhlIHBhc3NlZCBpbiBsaXN0IGFuZCBjYWxsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaFxcbiA5NDE6XFx0ICogd29ya2VyIHRoYXQgaXNuJ3QgZXhpdGluZ1xcbiA5NDI6XFx0ICovXFxuIDk0MzpcXHRzdGF0aWMgYm9vbCBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG4gOTQ0OlxcdFxcdFxcdFxcdFxcdCAgICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEpXFxuIDk0NjpcXHR7XFxuIDk0NzpcXHRcXHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XFxuIDk0ODpcXHRcXHRib29sIHJldCA9IGZhbHNlO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3b3JrZXIsIFxcdTAwMjZhY2N0LVxcdTAwM2VhbGxfbGlzdCwgYWxsX2xpc3QpIHtcXG4gOTUxOlxcdFxcdFxcdGlmIChpb193b3JrZXJfZ2V0KHdvcmtlcikpIHtcXG4gOTUyOlxcdFxcdFxcdFxcdC8qIG5vIHRhc2sgaWYgbm9kZSBpcy93YXMgb2ZmbGluZSAqL1xcbiA5NTM6XFx0XFx0XFx0XFx0aWYgKHdvcmtlci1cXHUwMDNldGFzaylcXG4gOTU0OlxcdFxcdFxcdFxcdFxcdHJldCA9IGZ1bmMod29ya2VyLCBkYXRhKTtcXG4gOTU1OlxcdFxcdFxcdFxcdGlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7XFxuIDk1NjpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbiA5NTc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDk1ODpcXHRcXHRcXHR9XFxuIDk1OTpcXHRcXHR9XFxuIDk2MDpcXHRcXG4gOTYxOlxcdFxcdHJldHVybiByZXQ7XFxuIDk2MjpcXHR9XFxuIDk2MzpcXHRcXG4gOTY0OlxcdHN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxcbiA5NjU6XFx0XFx0XFx0XFx0XFx0ICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxcbiA5NjY6XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhKVxcbiA5Njc6XFx0e1xcbiA5Njg6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuIDk2OTpcXHRcXHRcXHRpZiAoaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoXFx1MDAyNndxLVxcdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcXG4gOTcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NzE6XFx0fVxcbiA5NzI6XFx0XFxuIDk3MzpcXHRzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXFxuIDk3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjQ0LjMyNDcwMDgzOFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDkwNzQ1NTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgaW8td3EgQ2FuY2VsbGF0aW9uIFBhdGNoIGFuZCBLTVNBTiBSZXF1aXJlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG9wdGltaXplcyB0aGUgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIGZ1bmN0aW9uLiBCYXNpY2FsbHksIGl0J3MgYWJvdXQgbWFraW5nIHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBtb3JlIGVmZmljaWVudC4gUHJldmlvdXNseSwgZXZlbiBpZiBhIG1hdGNoaW5nIHdvcmsgaXRlbSB3YXMgZm91bmQgYW5kIGNhbmNlbGVkIHdpdGhpbiBvbmUgYWNjb3VudCAoYHdxLVx1MDAzZWFjY3RbaV1gKSwgdGhlIGxvb3Agd291bGQgY29udGludWUgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgb3RoZXIgYWNjb3VudHMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sYCByZXR1cm4gdmFsdWUgZnJvbSBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCwgd2hpY2ggaXMsIGluIHR1cm4sIHByb3BhZ2F0ZWQgZnJvbSBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLCB0byBhbGxvdyBlYXJseSBleGl0IGZyb20gdGhlIGxvb3AgaWYgYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCBhbmQgYGNhbmNlbF9hbGxgIGlzIGBmYWxzZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG8gd2UgbmVlZCB0byBydW4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZm9yIHRoaXM/IExldCdzIGdvIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwLiBJJ20gdGhpbmtpbmcgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzIEtNU0FOJ3MgbWFpbiBjb25jZXJuLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGNvbnNpZGVyZWQ6XG5cbkZpcnN0LCBsZXQncyByZW1lbWJlciB0aGUgZ29hbC4gS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciB0b29scyBsaWtlIExPQ0tERVAgYXJlIGdvb2QgZm9yIGNhdGNoaW5nIG1lbW9yeSBlcnJvcnMsIGxvY2tpbmcgaXNzdWVzLCBhbmQgb3RoZXIgY29tbW9uIGJ1Z3MuIEtNU0FOIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgd2UncmUgd29ycmllZCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSAqc3BlY2lmaWNhbGx5Ki5cblxuTm93LCBsZXQncyBleGFtaW5lIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBmdW5jdGlvbiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIHJldHVybnMgYSBib29sZWFuLCBhbmQgdGhpcyBib29sZWFuIGlzIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgbmFtZWQgYHJldGAuIFRoYXQgdmFyaWFibGUgaXMgKmluaXRpYWxpemVkKiBpbW1lZGlhdGVseSB3aGVuIGFzc2lnbmVkLCBzbyBpdCBjYW4ndCBiZSB1bmluaXRpYWxpemVkLiBJdCdzIHRoZW4gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxvZ2ljIGZsb3cuXG5cbkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBhbnN3ZXIgaXMgYSBjbGVhciBcIm5vXCIuIExldCdzIHRoaW5rIGFib3V0IHRoZSBydWxlczpcblxuMS4gICoqS2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzOioqIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAsIGlvY3Rscywgb3Igc29ja2V0IG9wdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBjb250cm9sIGZsb3cgZm9yIGFuIGV4aXN0aW5nIGNhbmNlbGxhdGlvbiBtZWNoYW5pc20uXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBUaGUgYHJldGAgdmFyaWFibGUgaXMgYXNzaWduZWQgZnJvbSBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYSBib29sZWFuLiBTbyBpdCdzIGluaXRpYWxpemVkIGZyb20gdGhlIHN0YXJ0LiBOb3RoaW5nIGhlcmUgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlLiBUaGUgbG9naWMgY2hhbmdlIGlzIGFib3V0IGJyZWFraW5nIG91dCBvZiB0aGUgbG9vcCBlYXJseSBpZiB3b3JrIGlzIGNhbmNlbGVkLCBub3QgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb25zIG9yIHdheXMgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuICAqKkJ1ZmZlciBhY2Nlc3M6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgaGVyZSB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyBvciB3cml0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHNpbXBseSBvcHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgbG9naWMuXG5cbkluIHNob3J0LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhIGNvbnRyb2wtZmxvdyBjaGFuZ2Ugd2l0aGluIGV4aXN0aW5nIGNvZGUuIFRoZSBwYXRjaCBoYXMgKm5vdGhpbmcqIHRvIGRvIHdpdGggaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYWJvdXQgb3B0aW1pemluZyBhbiBleGlzdGluZyBjYW5jZWxsYXRpb24gcHJvY2Vzcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmFjZSBjb25kaXRpb25zIChhbmQgSSBkb24ndCBzZWUgYW55KSwgd2lsbCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNiwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTE6MDUuMjMyMTU4ODA2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKCkgYW5kIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHRvIHJldHVybiBlYXJseSB3aGVuIGEgbWF0Y2hpbmcgd29ya2VyIGhhcyBiZWVuIGNhbmNlbGVkIGFuZCBjYW5jZWxfYWxsIGlzIGZhbHNlLiBJdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBieSBwcm9wYWdhdGluZyB0aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcigpIHRocm91Z2ggaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgc28gdGhlIGxvb3Agb3ZlciBhY2NvdW50cyBicmVha3MgZWFybHkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgaXMgZGlyZWN0bHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciwgd2hpY2ggYWx3YXlzIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXplZCBib29sKS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgd2l0aCBpb193b3JrZXIgb3IgaW9fd3EgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKCkgYW5kIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHRvIHJldHVybiBlYXJseSB3aGVuIGEgbWF0Y2hpbmcgd29ya2VyIGhhcyBiZWVuIGNhbmNlbGVkIGFuZCBjYW5jZWxfYWxsIGlzIGZhbHNlLiBJdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBieSBwcm9wYWdhdGluZyB0aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcigpIHRocm91Z2ggaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgc28gdGhlIGxvb3Agb3ZlciBhY2NvdW50cyBicmVha3MgZWFybHkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgaXMgZGlyZWN0bHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciwgd2hpY2ggYWx3YXlzIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXplZCBib29sKS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgd2l0aCBpb193b3JrZXIgb3IgaW9fd3EgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 10:46:39 +0000 UTC FinishedAt: 2026-09-13 10:51:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_WQ" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "IO_WQ" ], "series_id": "886ff704-6e85-4a82-8f0a-aa56434dbdd9" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_acct_cancel_running_work", "io_wq_cancel_running_work", "io_wq_cancel_cb", "io_async_cancel" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0lPX1dRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsmIzM0OywKICAgICYjMzQ7aW9fd3FfY2FuY2VsX2NiJiMzNDssCiAgICAmIzM0O2lvX2FzeW5jX2NhbmNlbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBhbmQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgdG8gcmV0dXJuIGVhcmx5IHdoZW4gYSBtYXRjaGluZyB3b3JrZXIgaGFzIGJlZW4gY2FuY2VsZWQgYW5kIGNhbmNlbF9hbGwgaXMgZmFsc2UuIEl0IGNoYW5nZXMgY29udHJvbCBmbG93IGJ5IHByb3BhZ2F0aW5nIHRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBmcm9tIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKCkgdGhyb3VnaCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBzbyB0aGUgbG9vcCBvdmVyIGFjY291bnRzIGJyZWFrcyBlYXJseS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJiMzOTtyZXQmIzM5OyBpcyBkaXJlY3RseSBhc3NpZ25lZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyLCB3aGljaCBhbHdheXMgcmV0dXJucyBhIGZ1bGx5IGluaXRpYWxpemVkIGJvb2wpLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyB3aXRoIGlvX3dvcmtlciBvciBpb193cSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNTEwMzEyZTZhZTBiZTg3ZmZlOTZhZDY0ZDc3ZTJlYmNjM2ZhZTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6NDg6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmNcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pby13cS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9pby13cS5jXG5AQCAtMTE4MSwxMiAmIzQzOzExODEsMTUgQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4mIzQzO3N0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbiBcdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcbiB7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuIFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4tXHRpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XG4mIzQzO1x0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xuIFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5AQCAtMTE5NSw3ICYjNDM7MTE5OCw4IEBAIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbi1cdFx0aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcbiYjNDM7XHRcdGlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoXHUwMDI2d3EtXHUwMDNlYWNjdFtpXSwgbWF0Y2gpKVxuJiM0MztcdFx0XHRicmVhaztcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19XUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICAgJiMzNDtpb19hc3luY19jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjQ4OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmMKaW5kZXggMmNhMjIzZTQ3ZDQxZi4uOWY5MDM5ZTNkMzhmYyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvaW8td3EuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9pby13cS5jCkBAIC0xMTgxLDEyICYjNDM7MTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsCiAJfQogfQogCi1zdGF0aWMgdm9pZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsCiYjNDM7c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LAogCQkJCQlzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKQogewomIzQzOwlib29sIHJldDsKJiM0MzsKIAlyYXdfc3Bpbl9sb2NrKCZhbXA7YWNjdC0mZ3Q7d29ya2Vyc19sb2NrKTsKLQlpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7CiYjNDM7CXJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTsKIAlyYXdfc3Bpbl91bmxvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsCkBAIC0xMTk1LDcgJiM0MzsxMTk4LDggQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspCi0JCWlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygmYW1wO3dxLSZndDthY2N0W2ldLCBtYXRjaCk7CiYjNDM7CQlpZiAoaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCZhbXA7d3EtJmd0O2FjY3RbaV0sIG1hdGNoKSkKJiM0MzsJCQlicmVhazsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvaW8td3EuYyBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhcHBsaWVkIHRvIGBpb191cmluZy9pby13cS5jYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvZGUgY2hhbmdlcyBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb2RpZmllZCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYC4gUHJldmlvdXNseSwgaXQgd2FzIGEgYHZvaWRgIGZ1bmN0aW9uLCBhbmQgbm93IGl0IHJldHVybnMgYSBgYm9vbGAuIFRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSB3cmFwcGluZyB0aGUgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBjYWxsIHdpdGggYHJhd19zcGluX2xvY2tgIGFuZCBgcmF3X3NwaW5fdW5sb2NrYCwgYW5kIHRoZSBuZXcgcmV0dXJuIHZhbHVlLiBBbHNvIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYCBub3cgYnJlYWtzIG9uIGEgdHJ1ZSByZXR1cm4gZnJvbSBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZXkgaW50cm9kdWNlZCB0aGlzIGJvb2xlYW4gcmV0dXJuIGFuZCB0aGUgY29ycmVzcG9uZGluZyBgYnJlYWtgLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIG9mIGBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcmAsIGFuZCB3aHkgbG9ja2luZyBpcyBub3cgcmVxdWlyZWQuIFdoYXQgaXMgdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyB0aGF0IHRoaXMgaXMgZW5hYmxpbmcgb3IgaW1wcm92aW5nPwoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBJJiMzOTtsbCBsb29rIGF0IHRoZSBmdW5jdGlvbnMgYGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmtgLCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgYW5kIGBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcmAgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIHdpbGwgbGlrZWx5IGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlbnQgb2YgdGhlIHBhdGNoIGFuZCB3aGV0aGVyIHRoZSBjaGFuZ2VzIGFyZSBzZW5zaWJsZSBhbmQgY29ycmVjdC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdHtcbjExNzE6XHRcdGludCBpO1xuMTE3MjpcdHJldHJ5OlxuMTE3MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbjExNzQ6XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb19nZXRfYWNjdCh3cSwgaSA9PSAwKTtcbjExNzU6XHRcbjExNzY6XHRcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayh3cSwgYWNjdCwgbWF0Y2gpKSB7XG4xMTc3Olx0XHRcdFx0aWYgKG1hdGNoLVx1MDAzZWNhbmNlbF9hbGwpXG4xMTc4Olx0XHRcdFx0XHRnb3RvIHJldHJ5O1xuMTE3OTpcdFx0XHRcdGJyZWFrO1xuMTE4MDpcdFx0XHR9XG4xMTgxOlx0XHR9XG4xMTgyOlx0fVxuMTE4MzpcdFxuMTE4NDpcdHN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbjExODU6XHRcdFx0XHRcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcbjExODY6XHR7XG4xMTg3Olx0XHRib29sIHJldDtcbjExODg6XHRcbjExODk6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuMTE5MDpcdFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xuMTE5MTpcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbjExOTI6XHRcdHJldHVybiByZXQ7XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbjExOTY6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuMTE5NzpcdHtcbjExOTg6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjExOTk6XHRcbjEyMDA6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbjEyMDE6XHRcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4xMjAyOlx0XHRcdFx0YnJlYWs7XG4xMjAzOlx0XG4xMjA0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjEyMDU6XHR9XG4xMjA2Olx0XG4xMjA3Olx0ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXG4xMjA4Olx0XHRcdFx0XHQgIHZvaWQgKmRhdGEsIGJvb2wgY2FuY2VsX2FsbClcbjEyMDk6XHR7XG4xMjEwOlx0XHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgbWF0Y2ggPSB7XG4xMjExOlx0XHRcdC5mblx0XHQ9IGNhbmNlbCxcbjEyMTI6XHRcdFx0LmRhdGFcdFx0PSBkYXRhLFxuMTIxMzpcdFx0XHQuY2FuY2VsX2FsbFx0PSBjYW5jZWxfYWxsLFxuMTIxNDpcdFx0fTtcbjEyMTU6XHRcbjEyMTY6XHRcdC8qXG4xMjE3Olx0XHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJiMzOTtyZSBsdWNreSB3ZSBjYW4ganVzdCByZW1vdmUgaXRcbjEyMTg6XHRcdCAqIGZyb20gdGhlcmUuIENBTkNFTF9PSyBtZWFucyB0aGF0IHRoZSB3b3JrIGlzIHJldHVybmVkIGFzLW5ldyxcbjEyMTk6XHRcdCAqIG5vIGNvbXBsZXRpb24gd2lsbCBiZSBwb3N0ZWQgZm9yIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGtlZXBpbmcgaW4gbWluZCBteSBkZWVwIGtub3dsZWRnZSBvZiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIGlvX3dxX2NhbmNlbF9jYiAmYW1wOyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYGlvX3dxX2NhbmNlbF9jYmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBjb250ZXh0LiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiBhbmQgcXVpY2tseSB1bmRlcnN0YW5kIGhvdyBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgaXMgYWN0dWFsbHkgKmludm9rZWQqIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHNwb3QgZm9yIEkvTyBjYW5jZWxsYXRpb24sIHNvIGdldHRpbmcgdGhlIGZsb3cgcmlnaHQgaXMgcGFyYW1vdW50LgoKVGhlbiwgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCByZXR1cm4gdmFsdWUgb2YgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYC4gSSBzdXNwZWN0IGl0JiMzOTtzIGdpdmluZyBzb21lIGNyaXRpY2FsIHN0YXR1cyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgd29ya2VycyB3aXRoaW4gdGhlIEkvTyBxdWV1ZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBtZWFucywgYW5kIGhvdyB0aGlzIHJldHVybiB2YWx1ZSBpbmZsdWVuY2VzIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFByb2JhYmx5IHNvbWUga2luZCBvZiBhY2NvdW50aW5nIGRhdGEuIFRoZSBmdW5jdGlvbiBuYW1lIGNlcnRhaW5seSBzdWdnZXN0cyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxNTpcdFxuMTIxNjpcdFx0LypcbjEyMTc6XHRcdCAqIEZpcnN0IGNoZWNrIHBlbmRpbmcgbGlzdCwgaWYgd2UmIzM5O3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxuMTIxODpcdFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxuMTIxOTpcdFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXG4xMjIwOlx0XHQgKlxuMTIyMTpcdFx0ICogVGhlbiBjaGVjayBpZiBhIGZyZWUgKGdvaW5nIGJ1c3kpIG9yIGJ1c3kgd29ya2VyIGhhcyB0aGUgd29ya1xuMTIyMjpcdFx0ICogY3VycmVudGx5IHJ1bm5pbmcuIElmIHdlIGZpbmQgaXQgdGhlcmUsIHdlJiMzOTtsbCByZXR1cm4gQ0FOQ0VMX1JVTk5JTkdcbjEyMjM6XHRcdCAqIGFzIGFuIGluZGljYXRpb24gdGhhdCB3ZSBhdHRlbXB0IHRvIHNpZ25hbCBjYW5jZWxsYXRpb24uIFRoZVxuMTIyNDpcdFx0ICogY29tcGxldGlvbiB3aWxsIHJ1biBub3JtYWxseSBpbiB0aGlzIGNhc2UuXG4xMjI1Olx0XHQgKlxuMTIyNjpcdFx0ICogRG8gYm90aCBvZiB0aGVzZSB3aGlsZSBob2xkaW5nIHRoZSBhY2N0LVx1MDAzZXdvcmtlcnNfbG9jaywgdG8gZW5zdXJlIHRoYXRcbjEyMjc6XHRcdCAqIHdlJiMzOTtsbCBmaW5kIGEgd29yayBpdGVtIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuXG4xMjI4Olx0XHQgKi9cbjEyMjk6XHRcdGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsod3EsIFx1MDAyNm1hdGNoKTtcbjEyMzA6XHRcdGlmIChtYXRjaC5ucl9wZW5kaW5nIFx1MDAyNlx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcbjEyMzE6XHRcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcbjEyMzI6XHRcbjEyMzM6XHRcdGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsod3EsIFx1MDAyNm1hdGNoKTtcbjEyMzQ6XHRcdGlmIChtYXRjaC5ucl9ydW5uaW5nIFx1MDAyNlx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcbjEyMzU6XHRcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9SVU5OSU5HO1xuMTIzNjpcdFxuMTIzNzpcdFx0aWYgKG1hdGNoLm5yX3J1bm5pbmcpXG4xMjM4Olx0XHRcdHJldHVybiBJT19XUV9DQU5DRUxfUlVOTklORztcbjEyMzk6XHRcdGlmIChtYXRjaC5ucl9wZW5kaW5nKVxuMTI0MDpcdFx0XHRyZXR1cm4gSU9fV1FfQ0FOQ0VMX09LO1xuMTI0MTpcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9OT1RGT1VORDtcbjEyNDI6XHR9XG4xMjQzOlx0XG4xMjQ0Olx0c3RhdGljIGludCBpb193cV9oYXNoX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4xMjQ1Olx0XHRcdFx0ICAgIGludCBzeW5jLCB2b2lkICprZXkpXG4xMjQ2Olx0e1xuMTI0NzpcdFx0c3RydWN0IGlvX3dxICp3cSA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3QgaW9fd3EsIHdhaXQpO1xuMTI0ODpcdFx0aW50IGk7XG4xMjQ5Olx0XG4xMjUwOlx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNndhaXQtXHUwMDNlZW50cnkpO1xuMTI1MTpcdFxuMTI1MjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTI1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbjEyNTQ6XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3JrIFF1ZXVlIENhbmNlbGxhdGlvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTG9va2luZyBhdCBsaW5lcyAxMjAwLTEyMDIsIEkgc2VlIGEgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYGlvX2FjY3RgIGFycmF5IHdpdGhpbiBhIHdvcmsgcXVldWUgKGB3cWApLiBUaGUgY29kZSBhdHRlbXB0cyB0byBjYW5jZWwgcnVubmluZyB3b3JrIGl0ZW1zIHVzaW5nIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLCBicmVha2luZyB0aGUgbG9vcCBpZiBhIGNhbmNlbGxhdGlvbiBpcyBzdWNjZXNzZnVsLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgaWYgYG1hdGNoLSZndDtjYW5jZWxfYWxsYCBpcyB0cnVlPwoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V291bGRuJiMzOTt0IHdlIHdhbnQgdG8gY2FuY2VsICphbGwqIHJ1bm5pbmcgd29yayBpdGVtcyBpbiB0aGF0IGNhc2U/JiMzNDsgUHJldmlvdXNseSwgaWYgYGNhbmNlbF9hbGxgICp3YXMqIHRydWUsIHRoZSBjb2RlIGl0ZXJhdGVkIHRocm91Z2ggdGhlIGFycmF5IHdpdGhvdXQgYSBgYnJlYWtgLiBDbGVhcmx5LCB0aGF0IGJlaGF2aW91ciBoYXMgY2hhbmdlZC4gTm93IGl0IGJyZWFrcyEKClRoaXMgbWVhbnMgdGhhdCBpZiBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCAqcmV0dXJucyogdHJ1ZSwgdGhlIGxvb3Agbm93IGJyZWFrcy4gVGhhdCByYWlzZXMgdGhlIHF1ZXN0aW9uOiBpcyB0aGF0IGludGVuZGVkIGJlaGF2aW9yLCBldmVuIHdoZW4gd2Ugd2FudCB0byBjYW5jZWwgZXZlcnl0aGluZz8gT3IsIHNob3VsZCB0aGUgbG9vcCBjb250aW51ZSByZWdhcmRsZXNzIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiBgY2FuY2VsX2FsbGAgaXMgdHJ1ZT8KClRvIGNsYXJpZnkgdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCByZXR1cm5zIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIE1vcmUgaW1wb3J0YW50bHksIHdoYXQmIzM5O3MgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBhbmQgaG93IGl0IG1pZ2h0IHBsYXkgaW50byB0aGUgb3ZlcmFsbCBsb2dpYy4gSSBuZWVkIHRvIGdvIGxvb2sgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIGJlaGF2aW9yIGhlcmUgc2VlbXMgY291bnRlcmludHVpdGl2ZSB0byBhIGZ1bGwgY2FuY2VsbGF0aW9uIGFwcHJvYWNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2FjY3RfZm9yX2VhY2hfd29ya2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9OTAxPXN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NDItICovXG5pb191cmluZy9pby13cS5jOjk0MzpzdGF0aWMgYm9vbCBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbmlvX3VyaW5nL2lvLXdxLmMtOTQ0LVx0XHRcdFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4tLVxuaW9fdXJpbmcvaW8td3EuYz05NjQ9c3RhdGljIHZvaWQgaW9fd3FfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05NjgtXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG5pb191cmluZy9pby13cS5jOjk2OTpcdFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxuaW9fdXJpbmcvaW8td3EuYy05NzAtXHRcdFx0YnJlYWs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTExODktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyIGFuZCBpb193cV93b3JrZXJfY2FuY2VsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgdHdvLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIEkvTyBhY2NvdW50aW5nIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgd29ya2VyIHRocmVhZCBvciBncm91cCBvZiB3b3JrZXIgdGhyZWFkcy4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgYWNjb3VudGluZyB1cGRhdGVzIG9yIHBlcmhhcHMgYWdncmVnYXRlIHN0YXRpc3RpY3MuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gYGlvX3dxX3dvcmtlcl9jb3VudGAgdG8gaW5mZXIgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB3b3JrZXIgcXVldWUuIEl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgaXMgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zLCBieXRlcyB0cmFuc2ZlcnJlZCwgb3IgdGltZXN0YW1wcy4gSSBhbnRpY2lwYXRlIHRoZXJlJiMzOTtsbCBiZSBzb21lIHNvcnQgb2Ygc3BpbmxvY2sgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbnZvbHZlZCwgdG8gZW5zdXJlIGF0b21pYyB1cGRhdGVzLgoKTm93LCBgaW9fd3Ffd29ya2VyX2NhbmNlbGAuIFRoZSAmIzM0O2NhbmNlbCYjMzQ7IHBhcnQgaW1tZWRpYXRlbHkgc2NyZWFtcyByZXNvdXJjZSBjbGVhbnVwLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgY2FuY2VsbGluZyBwZW5kaW5nIEkvTyB3b3JrIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgd29ya2VyIG9yIHRoZSBxdWV1ZS4gSSBzaG91bGQgbG9vayB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB3b3JrcXVldWUmIzM5O3MgY2FuY2VsbGF0aW9uIG1lY2hhbmlzbXMuIEkmIzM5O2QgZXhwZWN0IHRoYXQgaXQgaGFuZGxlcyBlbnN1cmluZyB0aGUgdGhyZWFkIGRvZXNuJiMzOTt0IGNvbnRpbnVlIGRvaW5nIGl0cyBqb2Igd2l0aCBpbnZhbGlkYXRlZCBwYXJhbWV0ZXJzLiBHaXZlbiB0aGF0IHRoaXMgaXMgd29ya2luZyB3aXRoIEkvTywgSSB3b3VsZCBleHBlY3QgdGhlIGNhbmNlbGxhdGlvbiB0byBoYXZlIHRvIGhhcHBlbiBpbiBhIHZlcnkgY2FyZWZ1bCB3YXkuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBhbnkgcmVsYXRpb24gdG8gc3BlY2lmaWMgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FuY2VsbGF0aW9uOyBhcmUgd2UgdGFsa2luZyBhYm91dCBpbW1lZGlhdGUsIGRlZmVycmVkLCBvciBncmFjZWZ1bCB0ZXJtaW5hdGlvbiBvZiB3b3JrPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gZGF0YSBjb25zaXN0ZW5jeSwgYW5kIGhvdyBhcmUgZXJyb3JzIGhhbmRsZWQ/IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBob3cgY2FuY2VsbGF0aW9uIGFmZmVjdHMgcGVuZGluZyBjb21wbGV0aW9uIGNhbGxiYWNrcyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLgoKSSBzaG91bGQgYWxzbyBsb29rIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybnMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk0MDpcdCAqIEl0ZXJhdGUgdGhlIHBhc3NlZCBpbiBsaXN0IGFuZCBjYWxsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaFxuIDk0MTpcdCAqIHdvcmtlciB0aGF0IGlzbiYjMzk7dCBleGl0aW5nXG4gOTQyOlx0ICovXG4gOTQzOlx0c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4gOTQ0Olx0XHRcdFx0XHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcbiA5NDU6XHRcdFx0XHRcdCAgICB2b2lkICpkYXRhKVxuIDk0NjpcdHtcbiA5NDc6XHRcdHN0cnVjdCBpb193b3JrZXIgKndvcmtlcjtcbiA5NDg6XHRcdGJvb2wgcmV0ID0gZmFsc2U7XG4gOTQ5Olx0XG4gOTUwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3b3JrZXIsIFx1MDAyNmFjY3QtXHUwMDNlYWxsX2xpc3QsIGFsbF9saXN0KSB7XG4gOTUxOlx0XHRcdGlmIChpb193b3JrZXJfZ2V0KHdvcmtlcikpIHtcbiA5NTI6XHRcdFx0XHQvKiBubyB0YXNrIGlmIG5vZGUgaXMvd2FzIG9mZmxpbmUgKi9cbiA5NTM6XHRcdFx0XHRpZiAod29ya2VyLVx1MDAzZXRhc2spXG4gOTU0Olx0XHRcdFx0XHRyZXQgPSBmdW5jKHdvcmtlciwgZGF0YSk7XG4gOTU1Olx0XHRcdFx0aW9fd29ya2VyX3JlbGVhc2Uod29ya2VyKTtcbiA5NTY6XHRcdFx0XHRpZiAocmV0KVxuIDk1NzpcdFx0XHRcdFx0YnJlYWs7XG4gOTU4Olx0XHRcdH1cbiA5NTk6XHRcdH1cbiA5NjA6XHRcbiA5NjE6XHRcdHJldHVybiByZXQ7XG4gOTYyOlx0fVxuIDk2MzpcdFxuIDk2NDpcdHN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxuIDk2NTpcdFx0XHRcdFx0ICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxuIDk2NjpcdFx0XHRcdFx0ICB2b2lkICpkYXRhKVxuIDk2NzpcdHtcbiA5Njg6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbiA5Njk6XHRcdFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxuIDk3MDpcdFx0XHRcdGJyZWFrO1xuIDk3MTpcdH1cbiA5NzI6XHRcbiA5NzM6XHRzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG4gOTc0Olx0e1xuIDk3NTpcdFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXHUwMDNldGFzayk7XG4gOTc2Olx0XHR3YWtlX3VwX3Byb2Nlc3Mod29ya2VyLVx1MDAzZXRhc2spO1xuIDk3NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDk3ODpcdH1cbiA5Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlvX3dxX3dvcmtlcl9jYW5jZWxgIGZ1bmN0aW9uLiBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBJL08gYW5kIHdvcmtlciB0aHJlYWRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNhbmNlbGxhdGlvbiBwcm9jZXNzIHdvcmtzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoZSBjb3JlIHByb2JsZW0gaGVyZSBpcyBsaWtlbHkgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIGFuIEkvTyBvcGVyYXRpb24gYW5kIGVuc3VyaW5nIGEgY2xlYW4gc2h1dGRvd24gb2YgYSB3b3JrZXIgdGhyZWFkIHdpdGhvdXQgY29ycnVwdGluZyBkYXRhIG9yIGxlYXZpbmcgcmVzb3VyY2VzIGRhbmdsaW5nLgoKKiAgIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMuIElmIGEgd29ya2VyIHRocmVhZCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyBhbiBJL08gcmVxdWVzdCwgYW5kIGEgY2FuY2VsIHNpZ25hbCBhcnJpdmVzLCB3ZSBuZWVkIGEgbWVjaGFuaXNtIHRvIHByZXZlbnQgaXQgZnJvbSBjb21wbGV0aW5nIGFmdGVyIHRoZSBjYW5jZWwgaGFzIGJlZW4gcmVxdWVzdGVkLiBXZSBhbHNvIG5lZWQgdG8gYXZvaWQgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBpZiB0aGUgd29ya2VyIGlzIGhvbGRpbmcgYW55IGxvY2tzLgoqICAgTmV4dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBtZWNoYW5pc20gdG8gc2lnbmFsIHRvIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb3BlcmF0aW9uLCB0aGF0IGl0IGhhcyBiZWVuIGNhbmNlbGVkLgoqICAgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSB0cmFja3MgdGhlIEkvTyByZXF1ZXN0JiMzOTtzIHByb2dyZXNzLiBBcmUgdGhlcmUgZmxhZ3M/IFN0YXRlIHZhcmlhYmxlcz8gQXRvbWljIG9wZXJhdGlvbnM/IFRob3NlIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5bmNocm9uaXphdGlvbi4KKiAgIEkgc3VzcGVjdCB0aGUgY2FuY2VsbGF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgc2V0dGluZyBzb21lIGtpbmQgb2YgJiMzNDtjYW5jZWwmIzM0OyBmbGFnLCBhbmQgcG90ZW50aWFsbHkgd2FraW5nIHVwIHRoZSB3b3JrZXIgdGhyZWFkIGlmIGl0JiMzOTtzIGN1cnJlbnRseSBzbGVlcGluZy4gV2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgbWVhbnMgZm9yIHJlc291cmNlIGNsZWFudXAuCiogICBJIGFsc28gbmVlZCB0byBzZWUgaWYgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgcGFydGlhbCBjb21wbGV0aW9ucyBvZiBhbiBJL08gcmVxdWVzdDsgZG9lcyBpdCBhbGxvdyBmb3IgdGhlIEkvTyB0byBiZSBjYW5jZWxlZCBhbmQgcmV0dXJuIHBhcnRpYWwgZGF0YSwgb3IgbXVzdCB0aGUgSS9PIGJlIGNvbXBsZXRlbHkgcm9sbGVkIGJhY2s/CiogICBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGVkZ2UgY2FzZXMgbGlrZSBpZiBhIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHNjaGVkdWxlZCB5ZXQuCiogICBGaW5hbGx5LCBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCwgZXNwZWNpYWxseSBhcm91bmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UgbGVha3MgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGEgcHJlbWF0dXJlIG9yIGluY29tcGxldGUgY2FuY2VsbGF0aW9uLgoKTGV0IG1lIGdvIHRocm91Z2ggaXQgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMgYW5kIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTgwOlx0dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKVxuIDk4MTpcdHtcbiA5ODI6XHRcdGlmICghd3EtXHUwMDNldGFzaylcbiA5ODM6XHRcdFx0cmV0dXJuO1xuIDk4NDpcdFxuIDk4NTpcdFx0aWYgKCFlbmFibGUpIHtcbiA5ODY6XHRcdFx0Y2xlYXJfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFx1MDAyNndxLVx1MDAzZXN0YXRlKTtcbiA5ODc6XHRcdFx0cmV0dXJuO1xuIDk4ODpcdFx0fVxuIDk4OTpcdFxuIDk5MDpcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSU9fV1FfQklUX0VYSVRfT05fSURMRSwgXHUwMDI2d3EtXHUwMDNlc3RhdGUpKVxuIDk5MTpcdFx0XHRyZXR1cm47XG4gOTkyOlx0XG4gOTkzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gOTk0Olx0XHRpb193cV9mb3JfZWFjaF93b3JrZXIod3EsIGlvX3dxX3dvcmtlcl93YWtlLCBOVUxMKTtcbiA5OTU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDk5NjpcdH1cbiA5OTc6XHRcbiA5OTg6XHRzdGF0aWMgdm9pZCBpb19ydW5fY2FuY2VsKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCBzdHJ1Y3QgaW9fd3EgKndxKVxuIDk5OTpcdHtcbjEwMDA6XHRcdGRvIHtcbjEwMDE6XHRcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbjEwMDI6XHRcdFx0aW9fd3Ffc3VibWl0X3dvcmsod29yayk7XG4xMDAzOlx0XHRcdHdvcmsgPSBpb193cV9mcmVlX3dvcmsod29yayk7XG4xMDA0Olx0XHR9IHdoaWxlICh3b3JrKTtcbjEwMDU6XHR9XG4xMDA2Olx0XG4xMDA3Olx0c3RhdGljIHZvaWQgaW9fd3FfaW5zZXJ0X3dvcmsoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4xMDA4Olx0XHRcdFx0ICAgICAgc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxuMTAwOTpcdHtcbjEwMTA6XHRcdHVuc2lnbmVkIGludCBoYXNoO1xuMTAxMTpcdFx0c3RydWN0IGlvX3dxX3dvcmsgKnRhaWw7XG4xMDEyOlx0XG4xMDEzOlx0XHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKSB7XG4xMDE0Olx0YXBwZW5kOlxuMTAxNTpcdFx0XHR3cV9saXN0X2FkZF90YWlsKFx1MDAyNndvcmstXHUwMDNlbGlzdCwgXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QpO1xuMTAxNjpcdFx0XHRyZXR1cm47XG4xMDE3Olx0XHR9XG4xMDE4Olx0XG4xMDE5Olx0XHRoYXNoID0gX19pb19nZXRfd29ya19oYXNoKHdvcmtfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGBpb193cV93b3JrZXJfY2FuY2VsYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgYGlvX3dxX3dvcmtlcl9jYW5jZWxgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgSS9PIGNvbXBsZXRpb24gcXVldWUgZnJhbWV3b3JrLiBJdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiBoYW5kbGluZyB0YXNrIGNhbmNlbGxhdGlvbiBvciBhYm9ydHMgd2l0aGluIHRoZSBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRldGVybWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGgsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkLiBJcyBpdCBjYWxsZWQgZGlyZWN0bHksIG9yIGluZGlyZWN0bHkgdGhyb3VnaCBhIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbj8gSXMgaXQgaW52b2x2ZWQgaW4gY2xlYW51cCwgcmVzb3VyY2UgcmVsZWFzZSwgb3IgcGVyaGFwcyBzaWduYWxpbmcgdG8gb3RoZXIgdGhyZWFkcz8gSeKAmW0gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zIGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHN5bmNocm9uaXphdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgSS9PIGNvbXBsZXRpb25zLiBJIHN1c3BlY3QgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGVpdGhlciB0aGUgY2FuY2VsbGF0aW9uIG9mIHdvcmsgaXRlbXMgdGhlbXNlbHZlcyBvciB0aGUgcHJldmVudGlvbiBvZiBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gYmVoYWxmIG9mIGEgZ2l2ZW4gY2FuY2VsZWQgcmVxdWVzdC4gS25vd2luZyB0aGUgc3BlY2lmaWMgZGV2aWNlIGRyaXZlciBpdCB0b3VjaGVzIHVwb24gd2lsbCBwcm92aWRlIGZ1cnRoZXIgaW5zaWdodCBpbiB3aGF0IHRoZSBpbnRlbnQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dxX3dvcmtlcl9jYW5jZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xMDg3PXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDk0LVxuaW9fdXJpbmcvaW8td3EuYzoxMDk1OnN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG5pb191cmluZy9pby13cS5jLTEwOTYtXHRcdFx0XHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTA3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTA4OnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMTA5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTExMTYtXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNndvcmtlci1cdTAwM2Vsb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTExNzpcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVx1MDAzZWN1cl93b3JrKSlcbmlvX3VyaW5nL2lvLXdxLmMtMTExOC1cdFx0bWF0Y2gtXHUwMDNlbnJfcnVubmluZyYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTExODktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGlvX3VyaW5nL2lvLXdxLmM6IExpbmVzIDEwOTUtMTEzMCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDEwOTUgdGhyb3VnaCAxMTMwIG9mIGBpb191cmluZy9pby13cS5jYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgaW9fd3Egc3Vic3lzdGVtLCBsaWtlbHkgZm9jdXNpbmcgb24gc29tZSBhc3BlY3Qgb2Ygd29yayBxdWV1ZSBtYW5hZ2VtZW50IG9yIGNvbXBsZXRpb24gaGFuZGxpbmcuIFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LCBidXQganVzdCBiYXNlZCBvbiB0aGUgbG9jYXRpb24sIEkmIzM5O2QgYW50aWNpcGF0ZSB0aGlzIGNvZGUgaXMgaW52b2x2ZWQgaW4gcXVldWluZyBvciByZXRyaWV2aW5nIHRhc2tzIGZvciBvZmZsb2FkIHRvIGEgd29ya2VyIHRocmVhZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIHN1Y2ggYXMgc3BpbmxvY2tzIG9yIG11dGV4ZXMsIGJlY2F1c2UgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgc2hhcmVkIHJlc291cmNlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBwcm90ZWN0aW9uLiBUaGUgY29kZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggZWl0aGVyIHN1Ym1pdHRpbmcgd29yayB0byB0aGUgaW9fd3EsIG9yIGhhbmRsaW5nIGNvbXBsZXRpb25zLiBHaXZlbiB0aGUgcmFuZ2UsIGl0IGNvdWxkIGJlIGEgc21hbGwgZnVuY3Rpb24gb3IgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBjb21wbGV4IGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIGNoZWNrcyBmb3IgZXJyb3IgY29uZGl0aW9ucywgc3VjaCBhcyB0aGUgd29ya2VyIHRocmVhZCBub3QgYmVpbmcgYXZhaWxhYmxlIG9yIGV4Y2VlZGluZyBhIHF1ZXVlIHNpemUsIHdoaWNoIHNob3VsZCBwcm9iYWJseSBpbnZvbHZlIHNvbWUgZm9ybSBvZiBiYWNrb2ZmIG9yIHJldHJ5IGxvZ2ljLiBVbmRlcnN0YW5kaW5nIHRoZSBlcnJvciBoYW5kbGluZyBoZXJlIHdpbGwgYmUgY3J1Y2lhbCBpbiBnYXVnaW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIGJlIHdhcnkgb2YgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGlmIHRoZSBjb2RlIGhhbmRsZXMgaW50ZXJydXB0cyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCB0byBoYW5kbGUgSS9PIGNvbXBsZXRpb24uIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDk1Olx0c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbjEwOTY6XHRcdFx0XHRcdCAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCxcbjEwOTc6XHRcdFx0XHRcdCAgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4xMDk4Olx0e1xuMTA5OTpcdFx0aWYgKHdvcmsgXHUwMDI2XHUwMDI2IG1hdGNoLVx1MDAzZWZuKHdvcmssIG1hdGNoLVx1MDAzZWRhdGEpKSB7XG4xMTAwOlx0XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG4xMTAxOlx0XHRcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVx1MDAzZXRhc2spO1xuMTEwMjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdHJldHVybiBmYWxzZTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG4xMTA5Olx0e1xuMTExMDpcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCA9IGRhdGE7XG4xMTExOlx0XG4xMTEyOlx0XHQvKlxuMTExMzpcdFx0ICogSG9sZCB0aGUgbG9jayB0byBhdm9pZCAtXHUwMDNlY3VyX3dvcmsgZ29pbmcgb3V0IG9mIHNjb3BlLCBjYWxsZXJcbjExMTQ6XHRcdCAqIG1heSBkZXJlZmVyZW5jZSB0aGUgcGFzc2VkIGluIHdvcmsuXG4xMTE1Olx0XHQgKi9cbjExMTY6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2d29ya2VyLVx1MDAzZWxvY2spO1xuMTExNzpcdFx0aWYgKF9faW9fd3Ffd29ya2VyX2NhbmNlbCh3b3JrZXIsIG1hdGNoLCB3b3JrZXItXHUwMDNlY3VyX3dvcmspKVxuMTExODpcdFx0XHRtYXRjaC1cdTAwM2Vucl9ydW5uaW5nJiM0MzsmIzQzOztcbjExMTk6XHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZ3b3JrZXItXHUwMDNlbG9jayk7XG4xMTIwOlx0XG4xMTIxOlx0XHRyZXR1cm4gbWF0Y2gtXHUwMDNlbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLVx1MDAzZWNhbmNlbF9hbGw7XG4xMTIyOlx0fVxuMTEyMzpcdFxuMTEyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxuMTEyNTpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbjExMjY6XHRcdFx0XHRcdFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxuMTEyNzpcdFx0XHRcdFx0XHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcbjExMjg6XHR7XG4xMTI5Olx0XHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XG4xMTMwOlx0XHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcbjExMzE6XHRcbjExMzI6XHRcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXHUwMDI2XHUwMDI2IHdvcmsgPT0gd3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XG4xMTMzOlx0XHRcdGlmIChwcmV2KVxuMTEzNDpcdFx0XHRcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIC8gaW8td3EgUGF0Y2g6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2Agd2l0aGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBjYW5jZWxsYXRpb24gb2YgcXVldWVkIHdvcmsuIFRoZSBrZXkgaXMgaW4gaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGFjY291bnRzLCB3aGljaCBhcmUgZWl0aGVyIGJvdW5kIG9yIHVuYm91bmRlZCAoYElPX1dRX0FDQ1RfQk9VTkRgIGFuZCBgSU9fV1FfQUNDVF9VTkJPVU5EYCkuCgpCZWZvcmUgdGhlIHBhdGNoLCBldmVuIGlmIGEgbWF0Y2ggd2FzIGZvdW5kIGZvciBjYW5jZWxsYXRpb24gd2l0aGluIGFuIGFjY291bnQsIHRoZSBjb2RlIHdvdWxkIGl0ZXJhdGUgdGhyb3VnaCAqYWxsKiBhY2NvdW50cyAodGhlIGxvb3AgYGZvciAoaW50IGkgPSAwOyBpICZsdDsgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspYCkuIE5vdywgd2l0aCB0aGUgY2hhbmdlcywgdGhlIGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJldHVybnMgdHJ1ZSBpZiBgIW1hdGNoLSZndDtjYW5jZWxfYWxsYCBhbmQgYSBydW5uaW5nIHdvcmsgaXMgbWF0Y2hlZC4gQ3JpdGljYWxseSwgaWYgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AgcmV0dXJucyB0cnVlLCB0aGUgbWFpbiBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgZnVuY3Rpb24gYnJlYWtzIGl0cyBsb29wICh0aGUgYGlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoJmFtcDt3cS0mZ3Q7YWNjdFtpXSwgbWF0Y2gpKSBicmVhaztgKS4gVGhpcyBpbnRyb2R1Y2VzIGEgc2lnbmlmaWNhbnQgZWFybHktZXhpdCBjb25kaXRpb24gYmFzZWQgb24gdGhlIGZpcnN0IG1hdGNoLgoKVGhlIGNvZGUgY2hhbmdlcyBhcmUgc3VidGxlLCBidXQgdGhleSByZXByZXNlbnQgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiBpbiB0aGUgaW9fdXJpbmcgLyBpby13cSBpbXBsZW1lbnRhdGlvbi4gVGhlIGBpb193cV93b3JrZXJfY2FuY2VsYCBmdW5jdGlvbiBpdHNlbGYgaXMgdGhlIGNvcmUgb2YgdGhpcyBsb2dpYy4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIHJldHVybiB2YWx1ZXMgYXMgc2lnbmlmaWNhbnQ6IGlmIGBtYXRjaC0mZ3Q7Y2FuY2VsX2FsbGAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2U7IGlmIGl0JiMzOTtzIGZhbHNlLCBhbmQgYSB3b3JrZXIgbWF0Y2hlcywgaXQgcmV0dXJucyB0cnVlLCBpbmNyZW1lbnRpbmcgYG1hdGNoLSZndDtucl9ydW5uaW5nYC4KCk5vdywgY29uc2lkZXJpbmcgZnV6emluZywgbGV0JiMzOTtzIGFwcGx5IHRoZSBjcml0ZXJpYS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGlvX3VyaW5nIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHBhcnQgb2Ygb25lIG9mIHRoZSBtb3N0IGZ1enplZCBhbmQgY3JpdGljYWwgc3Vic3lzdGVtcyBpbiBMaW51eCEgVGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBhbGdvcml0aG0gZmxvdyBvZiB3b3JrIGNhbmNlbGxhdGlvbi4gSW4gdGhlIGNvbnRleHQgb2YgdGhlIHdvcnRoLWZ1enppbmcgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGl2ZWx5IGZhbGxzIGludG8gdGhlIGNhdGVnb3J5IG9mICYjMzQ7bG9naWMgbW9kaWZpY2F0aW9ucyBpbiAuLi4gY29yZSBzdWJzeXN0ZW1zJiMzNDsgYW5kICYjMzQ7cmVzdHJ1Y3R1cmluZyBvZiAuLi4gYWxnb3JpdGhtIGZsb3dzLiYjMzQ7Cgppb191cmluZyBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgY2FuIHVzZSB0aGUgc3RhbmRhcmQgc3lzY2FsbHMgYGlvX3VyaW5nX3NldHVwYCwgYGlvX3VyaW5nX2VudGVyYCwgYW5kIGBpb191cmluZ19yZWdpc3RlcmAgdG8gZXhlcmNpc2UgdGhpcyBjb2RlLiBTeXprYWxsZXIsIGluIHBhcnRpY3VsYXIsIGhhcyBleHRlbnNpdmUgY292ZXJhZ2Ugb2YgaW9fdXJpbmcuIFRoaXMgbWFrZXMgdGhpcyBwYXRjaCBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGUgZ2l0IGxvZyBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgcmF0aW9uYWxlIGFuZCBpbnRlbnQgYmVoaW5kIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTE4ND1zdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTk0LVxuaW9fdXJpbmcvaW8td3EuYzoxMTk1OnN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbmlvX3VyaW5nL2lvLXdxLmMtMTE5Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTIwNz1lbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbi0tXG5pb191cmluZy9pby13cS5jLTEyMzItXG5pb191cmluZy9pby13cS5jOjEyMzM6XHRpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHdxLCBcdTAwMjZtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTEyMzQtXHRpZiAobWF0Y2gubnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzQwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGlvX3dxX2NhbmNlbF9jYmAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgaW9fd3FfY2FuY2VsX2NiYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGNhbGxiYWNrIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcnVubmluZyBhIHF1aWNrIHNlYXJjaCwgcHJvYmFibHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGdyZXBgIG9yIGBjc2NvcGVgIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdCBzZXR1cCwgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgcGFzc2luZyBpbnRvIGl0LCBjb250ZXh0LXdpc2UsIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlLiBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IGl0IGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgSS9PIGNvbXBsZXRpb24gZnJhbWV3b3JrLiBBcmUgd2UgdGFsa2luZyBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRocmVhZCBwb29scywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjYWxsIGNvbnRleHQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bSBsb29raW5nIGZvciBib3RoIGRpcmVjdCBjYWxscyBhbmQgYW55IGluZGlyZWN0IGNhbGxzLCBwZXJoYXBzIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3IgbWFjcm8gZXhwYW5zaW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgSS9PIHdvcmsgcXVldWUgaXRzZWxmLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgSS9PIGlzIHNjaGVkdWxlZCBhbmQgY2FuY2VsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193cV9jYW5jZWxfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvY2FuY2VsLmM9Nzg9c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTg4LVx0YWxsID0gY2QtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfQVNZTkNfQ0FOQ0VMX0FMTHxJT1JJTkdfQVNZTkNfQ0FOQ0VMX0FOWSk7XG5pb191cmluZy9jYW5jZWwuYzo4OTpcdGNhbmNlbF9yZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cdTAwM2Vpb193cSwgaW9fY2FuY2VsX2NiLCBjZCwgYWxsKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTkwLVx0c3dpdGNoIChjYW5jZWxfcmV0KSB7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtNTA1LVx0XHRcdGNvbnRpbnVlO1xuaW9fdXJpbmcvY2FuY2VsLmM6NTA2Olx0XHRjcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XG5pb191cmluZy9jYW5jZWwuYy01MDctXHRcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTUzOS1cdFx0ICovXG5pb191cmluZy9jYW5jZWwuYzo1NDA6XHRcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cdTAwM2Vpb193cSwgaW9fY2FuY2VsX3Rhc2tfY2IsXG5pb191cmluZy9jYW5jZWwuYy01NDEtXHRcdFx0XHQgICAgICAgXHUwMDI2Y2FuY2VsLCB0cnVlKTtcbi0tXG5pb191cmluZy9pby13cS5jPTExOTU9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTIwNi1cbmlvX3VyaW5nL2lvLXdxLmM6MTIwNzplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbmlvX3VyaW5nL2lvLXdxLmMtMTIwOC1cdFx0XHRcdCAgdm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmg9NjQ9dHlwZWRlZiBib29sICh3b3JrX2NhbmNlbF9mbikoc3RydWN0IGlvX3dxX3dvcmsgKiwgdm9pZCAqKTtcbmlvX3VyaW5nL2lvLXdxLmgtNjUtXG5pb191cmluZy9pby13cS5oOjY2OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuaW9fdXJpbmcvaW8td3EuaC02Ny1cdFx0XHRcdFx0dm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIzMDk9c3RhdGljIF9fY29sZCB2b2lkIGlvX3JpbmdfZXhpdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIzNDgtXHRcdFx0aWYgKHRzayBcdTAwMjZcdTAwMjYgdHNrLVx1MDAzZWlvX3VyaW5nIFx1MDAyNlx1MDAyNiB0c2stXHUwMDNlaW9fdXJpbmctXHUwMDNlaW9fd3EpXG5pb191cmluZy9pb191cmluZy5jOjIzNDk6XHRcdFx0XHRpb193cV9jYW5jZWxfY2IodHNrLVx1MDAzZWlvX3VyaW5nLVx1MDAzZWlvX3dxLFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzUwLVx0XHRcdFx0XHRcdGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgaW9fd3FfY2FuY2VsX2NiKioKCk9rYXksIHNvIGBpb193cV9jYW5jZWxfY2JgIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGEgY291cGxlIG9mIGltcG9ydGFudCBsb2NhdGlvbnMuIFByaW1hcmlseSwgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgaW9fYXN5bmNfY2FuY2VsX29uZWAsIHdoaWNoIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMYCBvcGVyYXRpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBtZWNoYW5pc20gZm9yIGNhbmNlbGxpbmcgYXN5bmNocm9ub3VzIEkvTyByZXF1ZXN0cy4gQnV0LCBpdCYjMzk7cyBhbHNvIHVzZWQgZHVyaW5nIGNvbnRleHQgZXhpdCBhbmQgd2hlbiByZXF1ZXN0cyBhcmUgZXhwbGljaXRseSBjYW5jZWxsZWQgdGhyb3VnaCBvdGhlciBtZWFucy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBjYW5jZWxsYXRpb24gZnJvbSBtdWx0aXBsZSBzb3VyY2VzIG1ha2VzIGl0IGEgY3JpdGljYWwgcGFydCBvZiB0aGUgSS9PIHJpbmcgbWFuYWdlbWVudC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUsIGxldCYjMzk7cyBkaXZlIGludG8gYGlvX2FzeW5jX2NhbmNlbF9vbmVgLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBjb29yZGluYXRpbmcgd2l0aCBgaW9fd3FfY2FuY2VsX2NiYCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYmV5b25kIHRoZSBvYnZpb3VzIGBBU1lOQ19DQU5DRUxgIHBhdGguIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIGltcGxpY2F0aW9ucyBoZXJlIGZvciByZXNvdXJjZSBjbGVhbnVwIGFuZCBwcmV2ZW50aW5nIGRvdWJsZS1mcmVlcywgc28gbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2NhbmNlbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdHN0YXRpYyBib29sIGlvX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqZGF0YSlcbiAgNzE6XHR7XG4gIDcyOlx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9fa2lvY2IsIHdvcmspO1xuICA3MzpcdFx0c3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCA9IGRhdGE7XG4gIDc0Olx0XG4gIDc1Olx0XHRyZXR1cm4gaW9fY2FuY2VsX3JlcV9tYXRjaChyZXEsIGNkKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxuICA3OTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkKVxuICA4MDpcdHtcbiAgODE6XHRcdGVudW0gaW9fd3FfY2FuY2VsIGNhbmNlbF9yZXQ7XG4gIDgyOlx0XHRpbnQgcmV0ID0gMDtcbiAgODM6XHRcdGJvb2wgYWxsO1xuICA4NDpcdFxuICA4NTpcdFx0aWYgKCF0Y3R4IHx8ICF0Y3R4LVx1MDAzZWlvX3dxKVxuICA4NjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAgODc6XHRcbiAgODg6XHRcdGFsbCA9IGNkLVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX0FTWU5DX0NBTkNFTF9BTEx8SU9SSU5HX0FTWU5DX0NBTkNFTF9BTlkpO1xuICA4OTpcdFx0Y2FuY2VsX3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xuICA5MDpcdFx0c3dpdGNoIChjYW5jZWxfcmV0KSB7XG4gIDkxOlx0XHRjYXNlIElPX1dRX0NBTkNFTF9PSzpcbiAgOTI6XHRcdFx0cmV0ID0gMDtcbiAgOTM6XHRcdFx0YnJlYWs7XG4gIDk0Olx0XHRjYXNlIElPX1dRX0NBTkNFTF9SVU5OSU5HOlxuICA5NTpcdFx0XHRyZXQgPSAtRUFMUkVBRFk7XG4gIDk2Olx0XHRcdGJyZWFrO1xuICA5NzpcdFx0Y2FzZSBJT19XUV9DQU5DRUxfTk9URk9VTkQ6XG4gIDk4Olx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gIDk5Olx0XHRcdGJyZWFrO1xuIDEwMDpcdFx0fVxuIDEwMTpcdFxuIDEwMjpcdFx0cmV0dXJuIHJldDtcbiAxMDM6XHR9XG4gMTA0Olx0XG4gMTA1Olx0aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG4gMTA2Olx0XHRcdCAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4gMTA3Olx0e1xuIDEwODpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBjZC1cdTAwM2VjdHg7XG4gMTA5Olx0XHRpbnQgcmV0O1xuIDExMDpcdFxuIDExMTpcdFx0V0FSTl9PTl9PTkNFKCFpb193cV9jdXJyZW50X2lzX3dvcmtlcigpIFx1MDAyNlx1MDAyNiB0Y3R4ICE9IGN1cnJlbnQtXHUwMDNlaW9fdXJpbmcpO1xuIDExMjpcdFxuIDExMzpcdFx0cmV0ID0gaW9fYXN5bmNfY2FuY2VsX29uZSh0Y3R4LCBjZCk7XG4gMTE0Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIGlvX3VyaW5nL2lvLXdxLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpb191cmluZy9pby13cS5jYCBmaWxlIGFuZCBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSBnb3Zlcm5pbmcgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZWl0aGVyIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseSwgYXMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIG9yIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBiYXNlZCBvbiBLY29uZmlnIHN5bWJvbHMuIExldCYjMzk7cyBzZWUgd2hhdCBjbHVlcyB3ZSBjYW4gZmluZCBpbiBlaXRoZXIgb2YgdGhvc2UgbG9jYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byB1bmNvdmVyIHRoZSByZWxldmFudCBzeW1ib2xzIHF1aWNrbHk7IHRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgaW9fdXJpbmdcbiAgIDQ6XHRcbiAgIDU6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX1VSSU5HXG4gICA2Olx0R0NPVl9QUk9GSUxFIDo9IHlcbiAgIDc6XHRlbmRpZlxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19JT19VUklORylcdFx0JiM0Mzs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcbiAgMTA6XHRcdFx0XHRcdFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXG4gIDExOlx0XHRcdFx0XHRcdHR3Lm8gd2FpdC5vIGV2ZW50ZmQubyB1cmluZ19jbWQubyBcXFxuICAxMjpcdFx0XHRcdFx0XHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXG4gIDEzOlx0XHRcdFx0XHRcdGZzLm8gc3BsaWNlLm8gc3luYy5vIG1zZ19yaW5nLm8gXFxcbiAgMTQ6XHRcdFx0XHRcdFx0YWR2aXNlLm8gb3BlbmNsb3NlLm8gc3RhdHgubyB0aW1lb3V0Lm8gXFxcbiAgMTU6XHRcdFx0XHRcdFx0Y2FuY2VsLm8gd2FpdGlkLm8gcmVnaXN0ZXIubyBcXFxuICAxNjpcdFx0XHRcdFx0XHR0cnVuY2F0ZS5vIG1lbW1hcC5vIGFsbG9jX2NhY2hlLm8gXFxcbiAgMTc6XHRcdFx0XHRcdFx0cXVlcnkubyBsb29wLm9cbiAgMTg6XHRcbiAgMTk6XHRvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcdCYjNDM7PSB6Y3J4Lm9cbiAgMjA6XHRvYmotJChDT05GSUdfSU9fV1EpXHRcdCYjNDM7PSBpby13cS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTM5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSB0YXNrIGlzIHByZXR0eSBjbGVhciwgYW5kIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIHRoZSBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpb191cmluZywgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBjb250cm9sbGFibGUsIHdoYXQgZGVmYXVsdHMgYXJlIHNldCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZXNzZW50aWFsbHkgYmUgdGhlIHJvYWRtYXAgZm9yIGhvdyB0aGlzIG1vZHVsZSBiZWhhdmVzLCB3aGljaCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhdCB0aGlzIHBvaW50LiBUaW1lIHRvIGdldCBzdGFydGVkIGFuZCBzZWUgd2hhdCB3ZSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJT19XUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcdCYjNDM7PSB6Y3J4Lm9cbmlvX3VyaW5nL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbmlvX3VyaW5nL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19GVVRFWClcdFx0JiM0Mzs9IGZ1dGV4Lm9cbi0tXG5pb191cmluZy9jYW5jZWwuYz03OD1zdGF0aWMgaW50IGlvX2FzeW5jX2NhbmNlbF9vbmUoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtOTAtXHRzd2l0Y2ggKGNhbmNlbF9yZXQpIHtcbmlvX3VyaW5nL2NhbmNlbC5jOjkxOlx0Y2FzZSBJT19XUV9DQU5DRUxfT0s6XG5pb191cmluZy9jYW5jZWwuYy05Mi1cdFx0cmV0ID0gMDtcbmlvX3VyaW5nL2NhbmNlbC5jLTkzLVx0XHRicmVhaztcbmlvX3VyaW5nL2NhbmNlbC5jOjk0Olx0Y2FzZSBJT19XUV9DQU5DRUxfUlVOTklORzpcbmlvX3VyaW5nL2NhbmNlbC5jLTk1LVx0XHRyZXQgPSAtRUFMUkVBRFk7XG5pb191cmluZy9jYW5jZWwuYy05Ni1cdFx0YnJlYWs7XG5pb191cmluZy9jYW5jZWwuYzo5NzpcdGNhc2UgSU9fV1FfQ0FOQ0VMX05PVEZPVU5EOlxuaW9fdXJpbmcvY2FuY2VsLmMtOTgtXHRcdHJldCA9IC1FTk9FTlQ7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtNTA2LVx0XHRjcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XG5pb191cmluZy9jYW5jZWwuYzo1MDc6XHRcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xuaW9fdXJpbmcvY2FuY2VsLmMtNTA4LVx0fVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cdFx0XHRcdCAgICAgICBcdTAwMjZjYW5jZWwsIHRydWUpO1xuaW9fdXJpbmcvY2FuY2VsLmM6NTQyOlx0XHRyZXQgfD0gKGNyZXQgIT0gSU9fV1FfQ0FOQ0VMX05PVEZPVU5EKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTU0My1cdH1cbi0tXG5pb191cmluZy9pby13cS5jPTM3PWVudW0ge1xuaW9fdXJpbmcvaW8td3EuYzozODpcdElPX1dRX0JJVF9FWElUXHRcdD0gMCxcdC8qIHdxIGV4aXRpbmcgKi9cbmlvX3VyaW5nL2lvLXdxLmM6Mzk6XHRJT19XUV9CSVRfRVhJVF9PTl9JRExFXHQ9IDEsXHQvKiBhbGxvdyBhbGwgd29ya2VycyB0byBleGl0IG9uIGlkbGUgKi9cbmlvX3VyaW5nL2lvLXdxLmMtNDAtfTtcbi0tXG5pb191cmluZy9pby13cS5jPTQ5PXN0cnVjdCBpb193b3JrZXIge1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzMtI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjRcbmlvX3VyaW5nL2lvLXdxLmM6NzQ6I2RlZmluZSBJT19XUV9IQVNIX09SREVSXHQ2XG5pb191cmluZy9pby13cS5jLTc1LSNlbHNlXG5pb191cmluZy9pby13cS5jOjc2OiNkZWZpbmUgSU9fV1FfSEFTSF9PUkRFUlx0NVxuaW9fdXJpbmcvaW8td3EuYy03Ny0jZW5kaWZcbmlvX3VyaW5nL2lvLXdxLmMtNzgtXG5pb191cmluZy9pby13cS5jOjc5OiNkZWZpbmUgSU9fV1FfTlJfSEFTSF9CVUNLRVRTXHQoMXUgXHUwMDNjXHUwMDNjIElPX1dRX0hBU0hfT1JERVIpXG5pb191cmluZy9pby13cS5jLTgwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTA4PWVudW0ge1xuaW9fdXJpbmcvaW8td3EuYzoxMDk6XHRJT19XUV9BQ0NUX0JPVU5ELFxuaW9fdXJpbmcvaW8td3EuYzoxMTA6XHRJT19XUV9BQ0NUX1VOQk9VTkQsXG5pb191cmluZy9pby13cS5jOjExMTpcdElPX1dRX0FDQ1RfTlIsXG5pb191cmluZy9pby13cS5jLTExMi19O1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE3PXN0cnVjdCBpb193cSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMjgtXG5pb191cmluZy9pby13cS5jOjEyOTpcdHN0cnVjdCBpb193cV9hY2N0IGFjY3RbSU9fV1FfQUNDVF9OUl07XG5pb191cmluZy9pby13cS5jLTEzMC1cbi0tXG5pb191cmluZy9pby13cS5jLTEzMi1cbmlvX3VyaW5nL2lvLXdxLmM6MTMzOlx0c3RydWN0IGlvX3dxX3dvcmsgKmhhc2hfdGFpbFtJT19XUV9OUl9IQVNIX0JVQ0tFVFNdO1xuaW9fdXJpbmcvaW8td3EuYy0xMzQtXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xNTY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pb19nZXRfd29ya19oYXNoKHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxuaW9fdXJpbmcvaW8td3EuYy0xNTcte1xuaW9fdXJpbmcvaW8td3EuYzoxNTg6XHRyZXR1cm4gd29ya19mbGFncyBcdTAwM2VcdTAwM2UgSU9fV1FfSEFTSF9TSElGVDtcbmlvX3VyaW5nL2lvLXdxLmMtMTU5LX1cbi0tXG5pb191cmluZy9pby13cS5jPTE3Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb193cV9hY2N0ICppb19nZXRfYWNjdChzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGJvdW5kKVxuaW9fdXJpbmcvaW8td3EuYy0xNzgte1xuaW9fdXJpbmcvaW8td3EuYzoxNzk6XHRyZXR1cm4gXHUwMDI2d3EtXHUwMDNlYWNjdFtib3VuZCA/IElPX1dRX0FDQ1RfQk9VTkQgOiBJT19XUV9BQ0NUX1VOQk9VTkRdO1xuaW9fdXJpbmcvaW8td3EuYy0xODAtfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTgyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX3dvcmtfZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSxcbi0tXG5pb191cmluZy9pby13cS5jLTE4NC17XG5pb191cmluZy9pby13cS5jOjE4NTpcdHJldHVybiBpb19nZXRfYWNjdCh3cSwgISh3b3JrX2ZsYWdzIFx1MDAyNiBJT19XUV9XT1JLX1VOQk9VTkQpKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTg2LX1cbi0tXG5pb191cmluZy9pby13cS5jPTE5OT1ib29sIGlvX3dxX3dvcmtlcl9zdG9wcGVkKHZvaWQpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0yMDUtXG5pb191cmluZy9pby13cS5jOjIwNjpcdHJldHVybiB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXHUwMDI2d29ya2VyLVx1MDAzZXdxLVx1MDAzZXN0YXRlKTtcbmlvX3VyaW5nL2lvLXdxLmMtMjA3LX1cbi0tXG5pb191cmluZy9pby13cS5jPTM5MT1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbi0tXG5pb191cmluZy9pby13cS5jLTM5Ny1cdC8qIHJhY2VkIHdpdGggZXhpdCwganVzdCBpZ25vcmUgY3JlYXRlIGNhbGwgKi9cbmlvX3VyaW5nL2lvLXdxLmM6Mzk4Olx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpXG5pb191cmluZy9pby13cS5jLTM5OS1cdFx0Z290byBmYWlsO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVx0XHQgKi9cbmlvX3VyaW5nL2lvLXdxLmM6NDIxOlx0XHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSlcbmlvX3VyaW5nL2lvLXdxLmMtNDIyLVx0XHRcdGlvX3dxX2NhbmNlbF90d19jcmVhdGUod3EpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9NjAyPXN0YXRpYyB2b2lkIGlvX3dvcmtlcl9oYW5kbGVfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTY0My1cdFx0ZG8ge1xuaW9fdXJpbmcvaW8td3EuYzo2NDQ6XHRcdFx0Ym9vbCBkb19raWxsID0gdGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjQ1LVx0XHRcdHN0cnVjdCBpb193cV93b3JrICpuZXh0X2hhc2hlZCwgKmxpbmtlZDtcbi0tXG5pb191cmluZy9pby13cS5jLTY1NC1cdFx0XHRpZiAoZG9fa2lsbCBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL2lvLXdxLmM6NjU1Olx0XHRcdCAgICAod29ya19mbGFncyBcdTAwMjYgSU9fV1FfV09SS19VTkJPVU5EKSlcbmlvX3VyaW5nL2lvLXdxLmM6NjU2Olx0XHRcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvLXdxLmMtNjU3LVx0XHRcdHJlcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9fa2lvY2IsIHdvcmspO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9NjkwPXN0YXRpYyBpbnQgaW9fd3Ffd29ya2VyKHZvaWQgKmRhdGEpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy03MDMtXG5pb191cmluZy9pby13cS5jOjcwNDpcdHdoaWxlICghdGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSkge1xuaW9fdXJpbmcvaW8td3EuYy03MDUtXHRcdGxvbmcgcmV0O1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzI0LVx0XHRpZiAoKGxhc3RfdGltZW91dCBcdTAwMjZcdTAwMjYgKGV4aXRfbWFzayB8fCBhY2N0LVx1MDAzZW5yX3dvcmtlcnMgXHUwMDNlIDEpKSB8fFxuaW9fdXJpbmcvaW8td3EuYzo3MjU6XHRcdCAgICB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVF9PTl9JRExFLCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpIHtcbmlvX3VyaW5nL2lvLXdxLmMtNzI2LVx0XHRcdGFjY3QtXHUwMDNlbnJfd29ya2Vycy0tO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVxuaW9fdXJpbmcvaW8td3EuYzo3NTE6XHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjYgaW9fYWNjdF9ydW5fcXVldWUoYWNjdCkpXG5pb191cmluZy9pby13cS5jLTc1Mi1cdFx0aW9fd29ya2VyX2hhbmRsZV93b3JrKGFjY3QsIHdvcmtlcik7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz05NjQ9c3RhdGljIHZvaWQgaW9fd3FfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy05Njcte1xuaW9fdXJpbmcvaW8td3EuYzo5Njg6XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG5pb191cmluZy9pby13cS5jLTk2OS1cdFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9OTgwPXZvaWQgaW9fd3Ffc2V0X2V4aXRfb25faWRsZShzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGVuYWJsZSlcbi0tXG5pb191cmluZy9pby13cS5jLTk4NS1cdGlmICghZW5hYmxlKSB7XG5pb191cmluZy9pby13cS5jOjk4NjpcdFx0Y2xlYXJfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFx1MDAyNndxLVx1MDAzZXN0YXRlKTtcbmlvX3VyaW5nL2lvLXdxLmMtOTg3LVx0XHRyZXR1cm47XG4tLVxuaW9fdXJpbmcvaW8td3EuYy05ODktXG5pb191cmluZy9pby13cS5jOjk5MDpcdGlmICh0ZXN0X2FuZF9zZXRfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSlcbmlvX3VyaW5nL2lvLXdxLmMtOTkxLVx0XHRyZXR1cm47XG4tLVxuaW9fdXJpbmcvaW8td3EuYz05OTg9c3RhdGljIHZvaWQgaW9fcnVuX2NhbmNlbChzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgc3RydWN0IGlvX3dxICp3cSlcbi0tXG5pb191cmluZy9pby13cS5jLTEwMDAtXHRkbyB7XG5pb191cmluZy9pby13cS5jOjEwMDE6XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jLTEwMDItXHRcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTAzMz12b2lkIGlvX3dxX2VucXVldWUoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDQ3LVx0ICovXG5pb191cmluZy9pby13cS5jOjEwNDg6XHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFx1MDAyNndxLVx1MDAzZXN0YXRlKSB8fFxuaW9fdXJpbmcvaW8td3EuYzoxMDQ5Olx0ICAgICh3b3JrX2ZsYWdzIFx1MDAyNiBJT19XUV9XT1JLX0NBTkNFTCkpIHtcbmlvX3VyaW5nL2lvLXdxLmMtMTA1MC1cdFx0aW9fcnVuX2NhbmNlbCh3b3JrLCB3cSk7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDYyLVxuaW9fdXJpbmcvaW8td3EuYzoxMDYzOlx0aWYgKGRvX2NyZWF0ZSBcdTAwMjZcdTAwMjYgKCh3b3JrX2ZsYWdzIFx1MDAyNiBJT19XUV9XT1JLX0NPTkNVUlJFTlQpIHx8XG5pb191cmluZy9pby13cS5jLTEwNjQtXHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZykpKSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDg3PXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDkwLVxuaW9fdXJpbmcvaW8td3EuYzoxMDkxOlx0Yml0ID0gaGFzaF9wdHIodmFsLCBJT19XUV9IQVNIX09SREVSKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTA5MjpcdGF0b21pY19vcihJT19XUV9XT1JLX0hBU0hFRCB8IChiaXQgXHUwMDNjXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTA5My19XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMDk1PXN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDk5LVx0aWYgKHdvcmsgXHUwMDI2XHUwMDI2IG1hdGNoLVx1MDAzZWZuKHdvcmssIG1hdGNoLVx1MDAzZWRhdGEpKSB7XG5pb191cmluZy9pby13cS5jOjExMDA6XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5pb191cmluZy9pby13cS5jLTExMDEtXHRcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVx1MDAzZXRhc2spO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE2OD1zdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTcyLXJldHJ5OlxuaW9fdXJpbmcvaW8td3EuYzoxMTczOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspIHtcbmlvX3VyaW5nL2lvLXdxLmMtMTE3NC1cdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QgPSBpb19nZXRfYWNjdCh3cSwgaSA9PSAwKTtcbi0tXG5pb191cmluZy9pby13cS5jPTExOTU9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTE5OS1cbmlvX3VyaW5nL2lvLXdxLmM6MTIwMDpcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOylcbmlvX3VyaW5nL2lvLXdxLmMtMTIwMS1cdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMjA3PWVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTIzMC1cdGlmIChtYXRjaC5ucl9wZW5kaW5nIFx1MDAyNlx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcbmlvX3VyaW5nL2lvLXdxLmM6MTIzMTpcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcbmlvX3VyaW5nL2lvLXdxLmMtMTIzMi1cbi0tXG5pb191cmluZy9pby13cS5jLTEyMzQtXHRpZiAobWF0Y2gubnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXG5pb191cmluZy9pby13cS5jOjEyMzU6XHRcdHJldHVybiBJT19XUV9DQU5DRUxfUlVOTklORztcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNi1cbmlvX3VyaW5nL2lvLXdxLmMtMTIzNy1cdGlmIChtYXRjaC5ucl9ydW5uaW5nKVxuaW9fdXJpbmcvaW8td3EuYzoxMjM4Olx0XHRyZXR1cm4gSU9fV1FfQ0FOQ0VMX1JVTk5JTkc7XG5pb191cmluZy9pby13cS5jLTEyMzktXHRpZiAobWF0Y2gubnJfcGVuZGluZylcbmlvX3VyaW5nL2lvLXdxLmM6MTI0MDpcdFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcbmlvX3VyaW5nL2lvLXdxLmM6MTI0MTpcdHJldHVybiBJT19XUV9DQU5DRUxfTk9URk9VTkQ7XG5pb191cmluZy9pby13cS5jLTEyNDItfVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTI0ND1zdGF0aWMgaW50IGlvX3dxX2hhc2hfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSxcbi0tXG5pb191cmluZy9pby13cS5jLTEyNTItXHRyY3VfcmVhZF9sb2NrKCk7XG5pb191cmluZy9pby13cS5jOjEyNTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykge1xuaW9fdXJpbmcvaW8td3EuYy0xMjU0LVx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFx1MDAyNndxLVx1MDAzZWFjY3RbaV07XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMjYzPXN0cnVjdCBpb193cSAqaW9fd3FfY3JlYXRlKHVuc2lnbmVkIGJvdW5kZWQsIHN0cnVjdCBpb193cV9kYXRhICpkYXRhKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTI4Mi1cdGNwdXNldF9jcHVzX2FsbG93ZWQoZGF0YS1cdTAwM2V0YXNrLCB3cS1cdTAwM2VjcHVfbWFzayk7XG5pb191cmluZy9pby13cS5jOjEyODM6XHR3cS1cdTAwM2VhY2N0W0lPX1dRX0FDQ1RfQk9VTkRdLm1heF93b3JrZXJzID0gYm91bmRlZDtcbmlvX3VyaW5nL2lvLXdxLmM6MTI4NDpcdHdxLVx1MDAzZWFjY3RbSU9fV1FfQUNDVF9VTkJPVU5EXS5tYXhfd29ya2VycyA9XG5pb191cmluZy9pby13cS5jLTEyODUtXHRcdFx0XHR0YXNrX3JsaW1pdChjdXJyZW50LCBSTElNSVRfTlBST0MpO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTI4Ny1cdHdxLVx1MDAzZXdhaXQuZnVuYyA9IGlvX3dxX2hhc2hfd2FrZTtcbmlvX3VyaW5nL2lvLXdxLmM6MTI4ODpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jLTEyODktXHRcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0ID0gXHUwMDI2d3EtXHUwMDNlYWNjdFtpXTtcbi0tXG5pb191cmluZy9pby13cS5jPTEzMjg9dm9pZCBpb193cV9leGl0X3N0YXJ0KHN0cnVjdCBpb193cSAqd3EpXG5pb191cmluZy9pby13cS5jLTEzMjkte1xuaW9fdXJpbmcvaW8td3EuYzoxMzMwOlx0c2V0X2JpdChJT19XUV9CSVRfRVhJVCwgXHUwMDI2d3EtXHUwMDNlc3RhdGUpO1xuaW9fdXJpbmcvaW8td3EuYy0xMzMxLX1cbi0tXG5pb191cmluZy9pby13cS5jPTE0MDc9dm9pZCBpb193cV9wdXRfYW5kX2V4aXQoc3RydWN0IGlvX3dxICp3cSlcbmlvX3VyaW5nL2lvLXdxLmMtMTQwOC17XG5pb191cmluZy9pby13cS5jOjE0MDk6XHRXQVJOX09OX09OQ0UoIXRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcdTAwMjZ3cS1cdTAwM2VzdGF0ZSkpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDEwLVxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTQ4OT1pbnQgaW9fd3FfbWF4X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSwgaW50ICpuZXdfY291bnQpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNDkxLVx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3Q7XG5pb191cmluZy9pby13cS5jOjE0OTI6XHRpbnQgcHJldltJT19XUV9BQ0NUX05SXTtcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5My1cdGludCBpO1xuaW9fdXJpbmcvaW8td3EuYy0xNDk0LVxuaW9fdXJpbmcvaW8td3EuYzoxNDk1Olx0QlVJTERfQlVHX09OKChpbnQpIElPX1dRX0FDQ1RfQk9VTkQgICAhPSAoaW50KSBJT19XUV9CT1VORCk7XG5pb191cmluZy9pby13cS5jOjE0OTY6XHRCVUlMRF9CVUdfT04oKGludCkgSU9fV1FfQUNDVF9VTkJPVU5EICE9IChpbnQpIElPX1dRX1VOQk9VTkQpO1xuaW9fdXJpbmcvaW8td3EuYzoxNDk3Olx0QlVJTERfQlVHX09OKChpbnQpIElPX1dRX0FDQ1RfTlIgICAgICAhPSAyKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5OC1cbmlvX3VyaW5nL2lvLXdxLmM6MTQ5OTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jLTE1MDAtXHRcdGlmIChuZXdfY291bnRbaV0gXHUwMDNlIHRhc2tfcmxpbWl0KGN1cnJlbnQsIFJMSU1JVF9OUFJPQykpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNTAzLVxuaW9fdXJpbmcvaW8td3EuYzoxNTA0Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG5pb191cmluZy9pby13cS5jLTE1MDUtXHRcdHByZXZbaV0gPSAwO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTUwOC1cbmlvX3VyaW5nL2lvLXdxLmM6MTUwOTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KSB7XG5pb191cmluZy9pby13cS5jLTE1MTAtXHRcdGFjY3QgPSBcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmMtMTUxOC1cbmlvX3VyaW5nL2lvLXdxLmM6MTUxOTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KVxuaW9fdXJpbmcvaW8td3EuYy0xNTIwLVx0XHRuZXdfY291bnRbaV0gPSBwcmV2W2ldO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuaW9fdXJpbmcvaW8td3EuaDoyOiNpZm5kZWYgSU5URVJOQUxfSU9fV1FfSFxuaW9fdXJpbmcvaW8td3EuaDozOiNkZWZpbmUgSU5URVJOQUxfSU9fV1FfSFxuaW9fdXJpbmcvaW8td3EuaC00LVxuLS1cbmlvX3VyaW5nL2lvLXdxLmg9MTA9ZW51bSB7XG5pb191cmluZy9pby13cS5oOjExOlx0SU9fV1FfV09SS19DQU5DRUxcdD0gMSxcbmlvX3VyaW5nL2lvLXdxLmg6MTI6XHRJT19XUV9XT1JLX0hBU0hFRFx0PSAyLFxuaW9fdXJpbmcvaW8td3EuaDoxMzpcdElPX1dRX1dPUktfVU5CT1VORFx0PSA0LFxuaW9fdXJpbmcvaW8td3EuaDoxNDpcdElPX1dRX1dPUktfQ09OQ1VSUkVOVFx0PSAxNixcbmlvX3VyaW5nL2lvLXdxLmgtMTUtXG5pb191cmluZy9pby13cS5oOjE2Olx0SU9fV1FfSEFTSF9TSElGVFx0PSAyNCxcdC8qIHVwcGVyIDggYml0cyBhcmUgdXNlZCBmb3IgaGFzaCBrZXkgKi9cbmlvX3VyaW5nL2lvLXdxLmgtMTctfTtcbi0tXG5pb191cmluZy9pby13cS5oPTE5PWVudW0gaW9fd3FfY2FuY2VsIHtcbmlvX3VyaW5nL2lvLXdxLmg6MjA6XHRJT19XUV9DQU5DRUxfT0ssXHQvKiBjYW5jZWxsZWQgYmVmb3JlIHN0YXJ0ZWQgKi9cbmlvX3VyaW5nL2lvLXdxLmg6MjE6XHRJT19XUV9DQU5DRUxfUlVOTklORyxcdC8qIGZvdW5kLCBydW5uaW5nLCBhbmQgYXR0ZW1wdGVkIGNhbmNlbGxlZCAqL1xuaW9fdXJpbmcvaW8td3EuaDoyMjpcdElPX1dRX0NBTkNFTF9OT1RGT1VORCxcdC8qIHdvcmsgbm90IGZvdW5kICovXG5pb191cmluZy9pby13cS5oLTIzLX07XG4tLVxuaW9fdXJpbmcvaW8td3EuaD01ND1zdGF0aWMgaW5saW5lIGJvb2wgX19pb193cV9pc19oYXNoZWQodW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXG5pb191cmluZy9pby13cS5oLTU1LXtcbmlvX3VyaW5nL2lvLXdxLmg6NTY6XHRyZXR1cm4gd29ya19mbGFncyBcdTAwMjYgSU9fV1FfV09SS19IQVNIRUQ7XG5pb191cmluZy9pby13cS5oLTU3LX1cbi0tXG5pb191cmluZy9pby13cS5oPTY2PWVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmgtNjgtXG5pb191cmluZy9pby13cS5oOjY5OiNpZiBkZWZpbmVkKENPTkZJR19JT19XUSlcbmlvX3VyaW5nL2lvLXdxLmgtNzAtZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTM2MT1zdGF0aWMgdm9pZCBpb19wcmVwX2FzeW5jX3dvcmsoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zNzItXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9GT1JDRV9BU1lOQylcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MzczOlx0XHRhdG9taWNfb3IoSU9fV1FfV09SS19DT05DVVJSRU5ULCBcdTAwMjZyZXEtXHUwMDNld29yay5mbGFncyk7XG5pb191cmluZy9pb191cmluZy5jLTM3NC1cbi0tXG5pb191cmluZy9pb191cmluZy5jLTM4OC1cdFx0aWYgKGRlZi1cdTAwM2V1bmJvdW5kX25vbnJlZ19maWxlKVxuaW9fdXJpbmcvaW9fdXJpbmcuYzozODk6XHRcdFx0YXRvbWljX29yKElPX1dRX1dPUktfVU5CT1VORCwgXHUwMDI2cmVxLVx1MDAzZXdvcmsuZmxhZ3MpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0zOTAtXHR9XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz00MTA9dm9pZCBpb19xdWV1ZV9pb3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMxLVx0aWYgKFdBUk5fT05fT05DRSghc2FtZV90aHJlYWRfZ3JvdXAodGN0eC1cdTAwM2V0YXNrLCBjdXJyZW50KSkpXG5pb191cmluZy9pb191cmluZy5jOjQzMjpcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZyZXEtXHUwMDNld29yay5mbGFncyk7XG5pb191cmluZy9pb191cmluZy5jLTQzMy1cbi0tXG5pb191cmluZy9pb191cmluZy5jPTE0NjY9dm9pZCBpb193cV9zdWJtaXRfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE0ODAtXHQvKiBlaXRoZXIgY2FuY2VsbGVkIG9yIGlvLXdxIGlzIGR5aW5nLCBzbyBkb24mIzM5O3QgdG91Y2ggdGN0eC1cdTAwM2Vpb3dxICovXG5pb191cmluZy9pb191cmluZy5jOjE0ODE6XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2d29yay1cdTAwM2VmbGFncykgXHUwMDI2IElPX1dRX1dPUktfQ0FOQ0VMKSB7XG5pb191cmluZy9pb191cmluZy5jLTE0ODItZmFpbDpcbi0tXG5pb191cmluZy9pb191cmluZy5jLTE0ODctXHRcdGVyciA9IC1FQkFERjtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ4ODpcdFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMTQ4OS1cdFx0Z290byBmYWlsO1xuLS1cbmlvX3VyaW5nL3BvbGwuYz0zND1zdHJ1Y3QgaW9fcG9sbF90YWJsZSB7XG4tLVxuaW9fdXJpbmcvcG9sbC5jLTUzLVxuaW9fdXJpbmcvcG9sbC5jOjU0OiNkZWZpbmUgSU9fV1FFX0ZfRE9VQkxFXHRcdDFcbmlvX3VyaW5nL3BvbGwuYy01NS1cbi0tXG5pb191cmluZy9wb2xsLmM9NTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fa2lvY2IgKndxZV90b19yZXEoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndxZSlcbi0tXG5pb191cmluZy9wb2xsLmMtNjItXG5pb191cmluZy9wb2xsLmM6NjM6XHRyZXR1cm4gKHN0cnVjdCBpb19raW9jYiAqKShwcml2IFx1MDAyNiB+SU9fV1FFX0ZfRE9VQkxFKTtcbmlvX3VyaW5nL3BvbGwuYy02NC19XG4tLVxuaW9fdXJpbmcvcG9sbC5jPTY2PXN0YXRpYyBpbmxpbmUgYm9vbCB3cWVfaXNfZG91YmxlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cWUpXG4tLVxuaW9fdXJpbmcvcG9sbC5jLTY5LVxuaW9fdXJpbmcvcG9sbC5jOjcwOlx0cmV0dXJuIHByaXYgXHUwMDI2IElPX1dRRV9GX0RPVUJMRTtcbmlvX3VyaW5nL3BvbGwuYy03MS19XG4tLVxuaW9fdXJpbmcvcG9sbC5jPTQ2NT1zdGF0aWMgdm9pZCBfX2lvX3F1ZXVlX3Byb2Moc3RydWN0IGlvX3BvbGwgKnBvbGwsIHN0cnVjdCBpb19wb2xsX3RhYmxlICpwdCxcbi0tXG5pb191cmluZy9wb2xsLmMtNDk3LVx0XHQvKiBtYXJrIGFzIGRvdWJsZSB3cSBlbnRyeSAqL1xuaW9fdXJpbmcvcG9sbC5jOjQ5ODpcdFx0d3FlX3ByaXZhdGUgfD0gSU9fV1FFX0ZfRE9VQkxFO1xuaW9fdXJpbmcvcG9sbC5jLTQ5OS1cdFx0aW9faW5pdF9wb2xsX2lvY2IocG9sbCwgZmlyc3QtXHUwMDNlZXZlbnRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUmVsZXZhbnQgS2NvbmZpZyBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbiBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgZm9yIGBDT05GSUdfSU9fV1FgIGFuZCBgQ09ORklHX0lPX1VSSU5HYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgcG90ZW50aWFsbHksIHRvIGdhaW4gaW5zaWdodHMgaW50byB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBmZWF0dXJlIGZsYWdzIHN1cnJvdW5kaW5nIHRoZW0uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZWlyIGVuYWJsZW1lbnQgYXJlLiBBcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmUsIGRlcGVuZGVudCBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgb3IgZG8gdGhleSBzaW1wbHkgb2ZmZXIgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyBvZiBzaW1pbGFyIGZ1bmN0aW9uYWxpdHk/IFRoZSBzcGVjaWZpY3Mgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBDT05GSUdfSU9fV1EqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19JT19XUWAuIFRoaXMgbWVhbnMgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGNoYWxsZW5nZSwgb2YgY291cnNlLCBpcyB0aGF0IGEgc3ltYm9sIGxpa2UgdGhpcyBjb3VsZCBiZSBkZWZpbmVkIChvciByZWZlcmVuY2VkKSBhbnl3aGVyZSB3aXRoaW4gdGhlIHZhc3Qgc2VhIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSByZWN1cnNpdmUgc2VhcmNoIGFjcm9zcyB0aGUgZW50aXJlIEtjb25maWcgaGllcmFyY2h5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2VseSBgZ3JlcGAgb3IgYGZpbmRgIGNvbWJpbmVkIHdpdGggYGdyZXBgLCB0byBlZmZpY2llbnRseSBsb2NhdGUgYWxsIGluc3RhbmNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZXhhY3QgbWF0Y2hlcywgYnV0IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBwb3NzaWJsZSBpbmRpcmVjdCBkZWZpbml0aW9ucyAoZS5nLiwgdmlhIGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCkuIEkmIzM5O2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlYXJjaCBpcyBwcm9wZXJseSBzY29wZWQgdG8gdGhlIEtjb25maWcgZmlsZXMgc3BlY2lmaWNhbGx5LCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBvdGhlciBzb3VyY2UgZmlsZXMuIE9uY2UgSSBoYXZlIHRoZSBpbml0aWFsIGhpdCBsaXN0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgZWFjaCBkZWZpbml0aW9uIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dDogd2hhdCBhcmNoaXRlY3R1cmUsIHN1YnN5c3RlbSwgYW5kIGRlcGVuZGVuY2llcyBhcmUgaW52b2x2ZWQ/IEFuZCwgcGVyaGFwcyBtb3N0IGltcG9ydGFudGx5LCBob3cgaXMgdGhpcyBzeW1ib2wgKnVzZWQqIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIEkvTyBzdWJzeXN0ZW0/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBtdWx0aS1zdGVwIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19XUSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTQxOT1zb3VyY2UgXCYjMzQ7ZnMvdW5pY29kZS9LY29uZmlnXCYjMzQ7XG5mcy9LY29uZmlnLTQyMC1cbmZzL0tjb25maWc6NDIxOmNvbmZpZyBJT19XUVxuZnMvS2NvbmZpZy00MjItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcmVmbGVjdGluZyB0aGUgYXBwcm9hY2ggSSYjMzk7ZCB0YWtlIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDIxLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgYSBrZXkgc2V0dGluZyBvciByZWxhdGVkIGdyb3VwIG9mIHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgbG9jYXRlZC4gSSYjMzk7bGwgcmVhZCB0aG9zZSAyMCBsaW5lcyBjYXJlZnVsbHksIGxvb2tpbmcgZm9yOgoKKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgc2V0dGluZ3MsIGZlYXR1cmVzLCBvciBrZXJuZWwgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgc2VjdGlvbiBpcyByZWxldmFudD8gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gZmxvdy4KKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogV2hhdCBhcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3M/IEFyZSB0aGV5IHNlbnNpYmxlIGRlZmF1bHRzIGZvciBtb3N0IHVzZSBjYXNlcywgb3IgYXJlIHRoZXkgdGFpbG9yZWQgZm9yIHNwZWNpZmljIHNjZW5hcmlvcz8gVGhpcyByZXZlYWxzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGUgZGV2ZWxvcGVycy4KKiAgICoqSGVscCBUZXh0OioqIElzIHRoZSBoZWxwIHRleHQgY2xlYXIgYW5kIGNvbmNpc2U/IERvZXMgaXQgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNob2ljZXM/IEFtYmlndWl0eSBoZXJlIGlzIGEgcmVkIGZsYWcuCiogICAqKlN5bWJvbGljIE5hbWVzOioqIEFyZSB0aGV5IHVzaW5nIG1lYW5pbmdmdWwgc3ltYm9saWMgbmFtZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2Ugc2V0dGluZ3MgYWN0dWFsbHkgKm1lYW4qLCBub3QganVzdCB0aGVpciB0ZWNobmljYWwgbGFiZWxzLgoqICAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBIb3cgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW50IG9uIG90aGVyIHNldHRpbmdzIG9yIGFyY2hpdGVjdHVyZT8gSXMgdGhlIGxvZ2ljIHN0cmFpZ2h0Zm9yd2FyZCBvciBjb252b2x1dGVkPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLgoqICAgKipSZWxhdGlvbnNoaXBzKio6IEhvdyBkb2VzIHRoaXMgcGFydCBvZiB0aGUgY29uZmlnIHJlbGF0ZSB0byB0aGUgYnJvYWRlciBwaWN0dXJlPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRlcmFjdCBhbmQgYWZmZWN0IGVhY2ggb3RoZXIuCgpCeSBmb2N1c2luZyBvbiB0aGVzZSBwb2ludHMsIEkgY2FuIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDQyMSwgdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBkZXZlbG9wZXJzIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgaXNzdWUgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbXBsZXggaW50ZXJhY3Rpb25zIGluIHRoaXMgcGFydGljdWxhciBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxNTpcdGVuZGlmICMgTkVUV09SS19GSUxFU1lTVEVNU1xuIDQxNjpcdFxuIDQxNzpcdHNvdXJjZSBcJiMzNDtmcy9ubHMvS2NvbmZpZ1wmIzM0O1xuIDQxODpcdHNvdXJjZSBcJiMzNDtmcy9kbG0vS2NvbmZpZ1wmIzM0O1xuIDQxOTpcdHNvdXJjZSBcJiMzNDtmcy91bmljb2RlL0tjb25maWdcJiMzNDtcbiA0MjA6XHRcbiA0MjE6XHRjb25maWcgSU9fV1FcbiA0MjI6XHRcdGJvb2xcbiA0MjM6XHRcbiA0MjQ6XHRlbmRtZW51XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHF1ZXN0aW9uICYjMzQ7V2hlcmUgaXMgQ09ORklHX0lPX1dRIHNlbGVjdGVkPyYjMzQ7OgoKKipEaWdnaW5nIGludG8gQ09ORklHX0lPX1dRIFNlbGVjdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsIGNvbmZpZyBvcHRpb24gYENPTkZJR19JT19XUWAuLi4gd2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHRyYWNpbmcgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBicm9hZGVyIElPIHN1YnN5c3RlbSwgcHJvYmFibHkgcmVsYXRlZCB0byB3b3JrcXVldWVzLCBzaW5jZSB0aGUgbmFtZSBpcyBzdWdnZXN0aXZlLiBJJiMzOTtkIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciBpdCwgbGlrZWx5IHVzaW5nIGBncmVwICYjMzQ7Q09ORklHX0lPX1dRJiMzNDsgKi9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGxpc3Qgb2YgbGlrZWx5IEtjb25maWcgZmlsZXMsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBkZWZpbml0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNvbmRpdGlvbnMsIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0ZWxsIG1lICp3aGVuKiBpdCYjMzk7cyBzZWxlY3RlZC4KCkZyb20gdGhlcmUgSSYjMzk7ZCBjaGVjayByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMsIGlmIG5lZWRlZCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBnb3RjaGFzIG9yIGhpc3RvcmljYWwgY29udGV4dCBhcm91bmQgaXRzIHVzYWdlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHNjZW5hcmlvcyB3aGVyZSBpdCYjMzk7cyAqYXV0b21hdGljYWxseSogc2VsZWN0ZWQgKG1heWJlIHZpYSBhbm90aGVyIG9wdGlvbiksIG9yIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgdXNlLWNhc2VzIHRoYXQgd291bGQgYnJpbmcgaXQgaW4uIEkgYWxzbyB3b3VsZCBiZSBwcmVwYXJlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcyB0aGF0IHVzZSBpdCBpZiBncmVwIHR1cm5zIHVwIGFueXRoaW5nIGxpa2UgdGhpcy4KClVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBwYXRoIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBvciBub3QgYENPTkZJR19JT19XUWAgZ2V0cyBpbmNsdWRlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNlbGVjdGlvbiBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBJT19XUSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk2MD1jb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYxLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxOTYyOlx0c2VsZWN0IElPX1dRXG5pbml0L0tjb25maWctMTk2My1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ1OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDg4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKioKCk9rYXksIHNvIGBDT05GSUdfSU9fVVJJTkdgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgQ09ORklHX0lPX1dRYCwgbWVhbmluZyB3ZSBzaG91bGQgZW5hYmxlIGZ1enppbmcgZm9yIGBJT19VUklOR2AsIGFuZCBvcHRpb25hbGx5IGBJT19XUWAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHByb21pc2luZyBmdXp6aW5nIHRhcmdldC4KClllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmchIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiBgaW9fd3FgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZ1bmN0aW9uIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHdoaWNoIG5vdyBjb250YWlucyB0aGUgbWFpbiBsb2dpYy4gVGhlIG9yaWdpbmFsIHVzZWQgYSBsb29wIHRvIGNhbGwgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AsIGJ1dCBub3cgYnJlYWtzIHRoZSBsb29wIHVwb24gYW55IHN1Y2Nlc3NmdWwgY2FuY2VsbGF0aW9uLiBUaGlzIGVhcmx5LWV4aXQgYmVoYXZpb3IgY2hhbmdlIGR1cmluZyB0aGUgY2FuY2VsbGF0aW9uIG9mIHJ1bm5pbmcgd29yayBhY3Jvc3MgZGlmZmVyZW50IHdvcmtlciBhY2NvdW50cyB3aXRoaW4gYGlvX3dxYCBpcyBzaWduaWZpY2FudC4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGlvX3VyaW5nYCBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHN5c3RlbSBjYWxscyBzdWNoIGFzIGBpb191cmluZ2AgY2FuY2VsIHJlcXVlc3RzIG9yIGV2ZW4gZHVyaW5nIGNvbnRleHQgdGVhcmRvd24sIHRoaXMgbWFrZXMgaXQgYW4gZXh0cmVtZWx5IGF0dHJhY3RpdmUgZnV6emluZyB0YXJnZXQuIEl0JiMzOTtzIG1vZGlmeWluZyBleGVjdXRhYmxlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXZSBrbm93IGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgYXJlIGJvdGggc3RhdGljLCByZXNpZGluZyB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBCdXQgd2hhdCBhYm91dCBgaW9fd3FfY2FuY2VsX2NiYD8gSXQgYXBwZWFycyB0byBiZSBub24tc3RhdGljLCBhbmQgdGh1cywgcG90ZW50aWFsbHkgZXhwb3J0ZWQgYW5kIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIFdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiBvdXIgZm9jdXMuIExldCYjMzk7cyBhbHNvIGNvbnNpZGVyIGBpb19hc3luY19jYW5jZWxfb25lYCBhbmQgYGlvX2FzeW5jX2NhbmNlbGAgaW4gYGlvX3VyaW5nL2NhbmNlbC5jYCBzaW5jZSB0aGV5IGFyZSBhbHNvIHBvdGVudGlhbGx5IGludm9sdmVkLgoKSSBqdXN0IGNoZWNrZWQgYWdhaW4sIGFuZCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgZ2xvYmFsbHkgYXZhaWxhYmxlLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIHN1Y2ggYXMgYGlvX3dxX3dvcmtlcl9jYW5jZWxgIGFuZCBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIHJlbWFpbiBzdGF0aWMuIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdG8gdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyB3aGljaCBpcyBleGNlbGxlbnQgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIG91ciBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBpb193cV9jYW5jZWxfY2JgLCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgKGFuZCBieSBleHRlbnNpb24gYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2ApLCBhbmQgYGlvX2FzeW5jX2NhbmNlbGAgc2luY2UgdGhhdCYjMzk7cyB0aGUgb3AgaGFuZGxlciBmb3IgYElPUklOR19PUF9BU1lOQ19DQU5DRUxgLiBJIHNob3VsZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaW9fYXN5bmNfY2FuY2VsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fYXN5bmNfY2FuY2VsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2NhbmNlbC5jPTcwPXN0YXRpYyBib29sIGlvX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqZGF0YSlcbi0tXG5pb191cmluZy9jYW5jZWwuYy03Ny1cbmlvX3VyaW5nL2NhbmNlbC5jOjc4OnN0YXRpYyBpbnQgaW9fYXN5bmNfY2FuY2VsX29uZShzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL2NhbmNlbC5jLTc5LVx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkKVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTEwNT1pbnQgaW9fdHJ5X2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy0xMTItXG5pb191cmluZy9jYW5jZWwuYzoxMTM6XHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKHRjdHgsIGNkKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTExNC1cdC8qXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtMTM5LVxuaW9fdXJpbmcvY2FuY2VsLmM6MTQwOmludCBpb19hc3luY19jYW5jZWxfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvY2FuY2VsLmMtMTQxLXtcbi0tXG5pb191cmluZy9jYW5jZWwuYy0xNzMtXG5pb191cmluZy9jYW5jZWwuYzoxNzQ6c3RhdGljIGludCBfX2lvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuaW9fdXJpbmcvY2FuY2VsLmMtMTc1LVx0XHRcdCAgICAgc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvY2FuY2VsLmMtMTk3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZjdHgtXHUwMDNldGN0eF9saXN0LCBjdHhfbm9kZSkge1xuaW9fdXJpbmcvY2FuY2VsLmM6MTk4Olx0XHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKG5vZGUtXHUwMDNldGFzay1cdTAwM2Vpb191cmluZywgY2QpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMTk5LVx0XHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcbi0tXG5pb191cmluZy9jYW5jZWwuYy0yMDktXG5pb191cmluZy9jYW5jZWwuYzoyMTA6aW50IGlvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvY2FuY2VsLmMtMjExLXtcbi0tXG5pb191cmluZy9jYW5jZWwuYy0yMzgtXG5pb191cmluZy9jYW5jZWwuYzoyMzk6XHRyZXQgPSBfX2lvX2FzeW5jX2NhbmNlbChcdTAwMjZjZCwgdGN0eCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMjQwLWRvbmU6XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmM9MjQ3PXN0YXRpYyBpbnQgX19pb19zeW5jX2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy0yNjQtXG5pb191cmluZy9jYW5jZWwuYzoyNjU6XHRyZXR1cm4gX19pb19hc3luY19jYW5jZWwoY2QsIHRjdHgsIDApO1xuaW9fdXJpbmcvY2FuY2VsLmMtMjY2LX1cbi0tXG5pb191cmluZy9jYW5jZWwuaD03PXN0cnVjdCBpb19jYW5jZWxfZGF0YSB7XG4tLVxuaW9fdXJpbmcvY2FuY2VsLmgtMTUtXG5pb191cmluZy9jYW5jZWwuaDoxNjppbnQgaW9fYXN5bmNfY2FuY2VsX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9jYW5jZWwuaDoxNzppbnQgaW9fYXN5bmNfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmgtMTgtXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTE5MS1cdFx0LmF1ZGl0X3NraXBcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzoxOTI6XHRcdC5wcmVwXHRcdFx0PSBpb19hc3luY19jYW5jZWxfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6MTkzOlx0XHQuaXNzdWVcdFx0XHQ9IGlvX2FzeW5jX2NhbmNlbCxcbmlvX3VyaW5nL29wZGVmLmMtMTk0LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NDIKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIGlvX3VyaW5nIENhbmNlbGxhdGlvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgZnV6emluZyBzZXR1cC4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBjYW5jZWxsYXRpb24gcGF0aHMgd2l0aGluIGBpb191cmluZ2AsIHNwZWNpZmljYWxseSB0aGUgYGlvLXdxLmNgIGZpbGUuIEkgc2VlIHRoYXQgYGlvX3dxX2NhbmNlbF9jYmAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGJ5IGBpb19hc3luY19jYW5jZWxfb25lYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYF9faW9fYXN5bmNfY2FuY2VsYCBhbmQgdWx0aW1hdGVseSBieSB0aGUgdXNlci1mYWNpbmcgYGlvX2FzeW5jX2NhbmNlbGAgKGZvciBgSU9SSU5HX09QX0FTWU5DX0NBTkNFTGApIGFuZCBgX19pb19zeW5jX2NhbmNlbGAgKGZvciBgSU9SSU5HX1JFR0lTVEVSX1NZTkNfQ0FOQ0VMYCkuIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBpb191cmluZ190cnlfY2FuY2VsX2lvd3FgIGFuZCBgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0c2AuIFNvLCB0aGVyZSYjMzk7cyBxdWl0ZSBhIGJpdCBvZiBpbnRlcmNvbm5lY3RlZG5lc3MgaGVyZS4KCk15IHJldmlldyBvZiB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgaGlnaGxpZ2h0cyB0aGF0IHNpbmNlIEkmIzM5O20gdGFyZ2V0aW5nIGZlYXR1cmUtc3BlY2lmaWMgbG9naWMsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGUgbW9kaWZpY2F0aW9uIGhlcmUgcHJpbWFyaWx5IGNvbmNlcm5zIHRoZSBjYW5jZWxsYXRpb24gb2YgcnVubmluZyB3b3JrLiBXaXRoaW4gYGlvLXdxLmNgLCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCBhbmQgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgLCBib3RoIG9mIHdoaWNoIGFyZSBzdGF0aWMuIFRoZSBndWlkZWxpbmVzIHNwZWNpZmljYWxseSBkaXNjdXNzIHN0YXRpYyBpbmxpbmVzIGFuZCBzdWdnZXN0IHRhcmdldGluZyBub24tc3RhdGljIGNhbGxlcnMgdGhhdCBleGVyY2lzZSB0aG9zZSBmdW5jdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGBpb193cV9jYW5jZWxfY2JgIGFwcGVhcnMgdG8gYmUgYSBkaXJlY3QgY2FsbGVyIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGBpb19hc3luY19jYW5jZWxgIGFuZCBgaW9fdHJ5X2NhbmNlbGAsIGFzIHRoZXkmIzM5O3JlIHRoZSB1c2VyLWZhY2luZyBwb2ludHMuCgpHb29kIHRvIGtub3cgdGhhdCBzeXprYWxsZXIgKmNhbiogdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBjb21waWxlZCBhcyBzeW1ib2xzLCB3aGljaCBpcyB0aGUgY2FzZSBoZXJlLiBTbywgaW5jbHVkaW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zICphbmQqIHRoZSBub24tc3RhdGljIGNhbGxlciBgaW9fd3FfY2FuY2VsX2NiYCwgcGx1cyB0aGUgZW50cnlwb2ludHMgaXMgdGhlIHN0YW5kYXJkIHByYWN0aWNlIGFuZCB0aGUgcmlnaHQgYXBwcm9hY2guIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgYWxsIGluIHRoZSByaWdodCBwbGFjZS4gWWVwLCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBpbmRlZWQgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLCBhcyBleHBlY3RlZC4KClRoZXJlZm9yZSwgbXkgZmluYWwgYEZvY3VzU3ltYm9sc2AgbGlzdCB3aWxsIGJlOgoKKiAgICYjMzQ7aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrJiMzNDsKKiAgICYjMzQ7aW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7CiogICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7CiogICAmIzM0O2lvX2FzeW5jX2NhbmNlbCYjMzQ7CgpEb3VibGUtY2hlY2tpbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLCBgSU9fVVJJTkdgIGFuZCBgSU9fV1FgICh0aGUgbGF0dGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb3JtZXIpIGFyZSBlbmFibGVkLCB3aGljaCBpcyBjcml0aWNhbC4KCkZpbmFsbHksIGZvciB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLCBJJiMzOTtsbCBzZXQ6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoYWJzb2x1dGVseSkKKiAgIGBSZWFzb25pbmdgOiBDbGVhcmx5IGV4cGxhaW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgcnVubmluZy13b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBgaW9fdXJpbmcvaW8td3EuY2AsIGludHJvZHVjaW5nIGFuIGVhcmx5IGV4aXQgYWNyb3NzIHdvcmtlciBhY2NvdW50cyBvbmNlIGEgcnVubmluZyB3b3JrZXIgaGFzIG1hdGNoZWQgZm9yIGNhbmNlbGxhdGlvbiB3aGVuIG5vdCBjYW5jZWxsaW5nIGFsbCB3b3Jrcy4gVGhpcyBpbXBhY3RzIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgY2FuY2VsbGF0aW9uIHdpdGhpbiBgaW9fdXJpbmdgIGFuZCBpcyBmdWxseSB1c2VyLXJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJT19VUklORyYjMzQ7LCAmIzM0O0lPX1dRJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsmIzM0OywgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssICYjMzQ7aW9fd3FfY2FuY2VsX2NiJiMzNDssICYjMzQ7aW9fYXN5bmNfY2FuY2VsJiMzNDtdYAoKQWxsIHNldC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19XUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICAgJiMzNDtpb19hc3luY19jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtJT19XUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayYjMzQ7LAogICAgJiMzNDtpb193cV9jYW5jZWxfcnVubmluZ193b3JrJiMzNDssCiAgICAmIzM0O2lvX3dxX2NhbmNlbF9jYiYjMzQ7LAogICAgJiMzNDtpb19hc3luY19jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yaygpIGFuZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSB0byByZXR1cm4gZWFybHkgd2hlbiBhIG1hdGNoaW5nIHdvcmtlciBoYXMgYmVlbiBjYW5jZWxlZCBhbmQgY2FuY2VsX2FsbCBpcyBmYWxzZS4gSXQgY2hhbmdlcyBjb250cm9sIGZsb3cgYnkgcHJvcGFnYXRpbmcgdGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGZyb20gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoKSB0aHJvdWdoIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHNvIHRoZSBsb29wIG92ZXIgYWNjb3VudHMgYnJlYWtzIGVhcmx5LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJlYWRzIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGlzIGRpcmVjdGx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIsIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYm9vbCkuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHdpdGggaW9fd29ya2VyIG9yIGlvX3dxIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNTEwMzEyZTZhZTBiZTg3ZmZlOTZhZDY0ZDc3ZTJlYmNjM2ZhZTBkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6NDg6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuYwppbmRleCAyY2EyMjNlNDdkNDFmLi45ZjkwMzllM2QzOGZjIDEwMDY0NAotLS0gYS9pb191cmluZy9pby13cS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvLXdxLmMKQEAgLTExODEsMTIgJiM0MzsxMTgxLDE1IEBAIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSwKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCwKJiM0MztzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsCiAJCQkJCXN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpCiB7CiYjNDM7CWJvb2wgcmV0OwomIzQzOwogCXJhd19zcGluX2xvY2soJmFtcDthY2N0LSZndDt3b3JrZXJzX2xvY2spOwotCWlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTsKJiM0MzsJcmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpOwogCXJhd19zcGluX3VubG9jaygmYW1wO2FjY3QtJmd0O3dvcmtlcnNfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSwKQEAgLTExOTUsNyAmIzQzOzExOTgsOCBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykKLQkJaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCZhbXA7d3EtJmd0O2FjY3RbaV0sIG1hdGNoKTsKJiM0MzsJCWlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoJmFtcDt3cS0mZ3Q7YWNjdFtpXSwgbWF0Y2gpKQomIzQzOwkJCWJyZWFrOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgaW8td3EuYyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZGlmZiBhZ2FpbnN0IGBpb191cmluZy9pby13cS5jYC4gU2VlbXMgd2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgaW9fdXJpbmcgd29ya3F1ZXVlLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgZm9jdXMgb24gdGhlIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGZ1bmN0aW9uLgoKSXQmIzM5O3MgY2xlYXIgdGhleSYjMzk7dmUgbWFkZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBhbHRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2FzIGB2b2lkYCwgYW5kIG5vdyBpdCYjMzk7cyByZXR1cm5pbmcgYSBgYm9vbGAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBUaGlzIHN1Z2dlc3RzIHRoZSBjYWxsaW5nIGNvbnRleHQgbm93IG5lZWRzIHRvIGtub3cgKmlmKiBhIGNhbmNlbGxhdGlvbiBhY3R1YWxseSBvY2N1cnJlZC4gUHJldmlvdXNseSwgaXQgc2ltcGx5IGl0ZXJhdGVkLgoKTG9va2luZyBhdCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCBpdHNlbGYsIHRoZXkmIzM5O3ZlIHdyYXBwZWQgdGhlIHdvcmtlciBpdGVyYXRpb24gaW4gYSBzcGlubG9jayB0byBwcm90ZWN0IGBhY2N0LSZndDt3b3JrZXJzX2xvY2tgIHdoaWNoIG1ha2VzIHNlbnNlLCBnaXZlbiBjb25jdXJyZW50IGFjY2VzcyBpcyBsaWtlbHkuIFRoZSBsb29wIHdpdGggYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBhbHNvIGxvb2tzIHRvIGJlIHRoZSBzYW1lLCBidXQgdGhlIHJldHVybiB2YWx1ZSBpcyB1c2VkIHRvIGBicmVha2AgdGhlIGxvb3AgaW4gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgLiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4gSWYgYSBjYW5jZWxsYXRpb24gaXMgc3VjY2Vzc2Z1bGx5IGZvdW5kIG9uIG9uZSBgaW9fYWNjdGAgd2l0aGluIGEgYGlvX3dxYCAob2Ygd2hpY2ggdGhlcmUgYXJlIGEgZmV3KSwgaXQgc2hvcnQtY2lyY3VpdHMgdGhlIHJlc3QuIFRoaXMgbGlrZWx5IGFkZHJlc3NlcyBhIHNjZW5hcmlvIHdoZXJlIG9ubHkgKm9uZSogd29yayBpdGVtIG5lZWRlZCBjYW5jZWxsYXRpb24uCgpUaGUgUkNVIHJlYWQgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBpdGVyYXRpb24gaW4gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJlbWFpbiB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3RydWN0dXJlIHRoZXkmIzM5O3JlIHByb3RlY3RpbmcgZnJvbSBtb2RpZmljYXRpb24gYnkgdGhlIHVuZGVybHlpbmcgd29ya2Vycy4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNhbmNlbGxhdGlvbiBzdWNjZXNzIGluZGljYXRvciBhbmQgb3B0aW1pemVkIHRoZSBjYW5jZWxsYXRpb24gc2VhcmNoIGJ5IGJyZWFraW5nIHRoZSBsb29wLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYm9vbGVhbiByZXR1cm4gdmFsdWUgbW9yZSB0aG9yb3VnaGx5LiBJIGJldCB0aGV5JiMzOTtyZSBub3cgdXNpbmcgdGhhdCByZXR1cm4gdmFsdWUgdXBzdHJlYW0gdG8gZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIHN1Y2Nlc3Mgb2YgdGhlIGNhbmNlbGxhdGlvbi4gTm8gcG9pbnQgaW4gY29udGludWluZyB0aGUgc2VhcmNoIGlmIHRoZSB3b3JrIGlzIGFscmVhZHkgZG9uZSEgVGhhdCYjMzk7cyBhIGdvb2Qgb3B0aW1pemF0aW9uIGZvciBjb250ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcbjExNTE6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2Vsb2NrKTtcbjExNTI6XHRcdHdxX2xpc3RfZm9yX2VhY2gobm9kZSwgcHJldiwgXHUwMDI2YWNjdC1cdTAwM2V3b3JrX2xpc3QpIHtcbjExNTM6XHRcdFx0d29yayA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG4xMTU0Olx0XHRcdGlmICghbWF0Y2gtXHUwMDNlZm4od29yaywgbWF0Y2gtXHUwMDNlZGF0YSkpXG4xMTU1Olx0XHRcdFx0Y29udGludWU7XG4xMTU2Olx0XHRcdGlvX3dxX3JlbW92ZV9wZW5kaW5nKHdxLCBhY2N0LCB3b3JrLCBwcmV2KTtcbjExNTc6XHRcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG4xMTU4Olx0XHRcdGlvX3J1bl9jYW5jZWwod29yaywgd3EpO1xuMTE1OTpcdFx0XHRtYXRjaC1cdTAwM2Vucl9wZW5kaW5nJiM0MzsmIzQzOztcbjExNjA6XHRcdFx0Lyogbm90IHNhZmUgdG8gY29udGludWUgYWZ0ZXIgdW5sb2NrICovXG4xMTYxOlx0XHRcdHJldHVybiB0cnVlO1xuMTE2MjpcdFx0fVxuMTE2MzpcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNlbG9jayk7XG4xMTY0Olx0XG4xMTY1Olx0XHRyZXR1cm4gZmFsc2U7XG4xMTY2Olx0fVxuMTE2NzpcdFxuMTE2ODpcdHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbjExNjk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4xMTcwOlx0e1xuMTE3MTpcdFx0aW50IGk7XG4xMTcyOlx0cmV0cnk6XG4xMTczOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpJiM0MzsmIzQzOykge1xuMTE3NDpcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xuMTE3NTpcdFxuMTE3NjpcdFx0XHRpZiAoaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBhY2N0LCBtYXRjaCkpIHtcbjExNzc6XHRcdFx0XHRpZiAobWF0Y2gtXHUwMDNlY2FuY2VsX2FsbClcbjExNzg6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4xMTc5Olx0XHRcdFx0YnJlYWs7XG4xMTgwOlx0XHRcdH1cbjExODE6XHRcdH1cbjExODI6XHR9XG4xMTgzOlx0XG4xMTg0Olx0c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuMTE4NTpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxuMTE4NjpcdHtcbjExODc6XHRcdGJvb2wgcmV0O1xuMTE4ODpcdFxuMTE4OTpcdFx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4xMTkwOlx0XHRyZXQgPSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XG4xMTkxOlx0XHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuMTE5MjpcdFx0cmV0dXJuIHJldDtcbjExOTM6XHR9XG4xMTk0Olx0XG4xMTk1Olx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuMTE5NjpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4xMTk3Olx0e1xuMTE5ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTE5OTpcdFxuMTIwMDpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KVxuMTIwMTpcdFx0XHRpZiAoaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcbjEyMDI6XHRcdFx0XHRicmVhaztcbjEyMDM6XHRcbjEyMDQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTIwNTpcdH1cbjEyMDY6XHRcbjEyMDc6XHRlbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcbjEyMDg6XHRcdFx0XHRcdCAgdm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKVxuMTIwOTpcdHtcbjEyMTA6XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSBtYXRjaCA9IHtcbjEyMTE6XHRcdFx0LmZuXHRcdD0gY2FuY2VsLFxuMTIxMjpcdFx0XHQuZGF0YVx0XHQ9IGRhdGEsXG4xMjEzOlx0XHRcdC5jYW5jZWxfYWxsXHQ9IGNhbmNlbF9hbGwsXG4xMjE0Olx0XHR9O1xuMTIxNTpcdFxuMTIxNjpcdFx0LypcbjEyMTc6XHRcdCAqIEZpcnN0IGNoZWNrIHBlbmRpbmcgbGlzdCwgaWYgd2UmIzM5O3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxuMTIxODpcdFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxuMTIxOTpcdFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgRGVlcGVyIGludG8gSS9PIEFjY291bnRpbmcgYW5kIENhbmNlbGxhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoaXMgc3lzdGVtLCBidXQgbm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gc29tZSBzcGVjaWZpYyBhcmVhcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgSS9PIGFjY291bnRpbmcgaXMgbWFuYWdlZCBhdCB0aGUgd29ya2VyIGxldmVsLCBhbmQgaG93IHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBmb3IgdGhlc2Ugd29ya2VycyB3b3Jrcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLiBJIHN1c3BlY3QgdGhpcyBpcyBjcnVjaWFsIGZvciB0cmFja2luZyBJL08gbWV0cmljcyByZWxhdGVkIHRvIGVhY2ggd29ya2VyLCB3aGljaCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IHZpdGFsIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLiBTbywgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBkdXJpbmcgZWFjaCB3b3JrZXImIzM5O3MgSS9PIHByb2Nlc3NpbmcgYW5kIGhvdyBpcyB0aGlzIGFjY291bnRlZCBmb3I/IEFuZCB0aGVuLCBlcXVhbGx5IGltcG9ydGFudCwgaG93IGRvZXMgdGhlIGNhbmNlbGxhdGlvbiBmdW5jdGlvbiBgaW9fd3Ffd29ya2VyX2NhbmNlbGAgaW50ZWdyYXRlIGludG8gdGhpcyBJL08gYWNjb3VudGluZyBzY2hlbWU/IEhvdyBhcmUgb3V0c3RhbmRpbmcgSS9PcyBoYW5kbGVkIGlmIGEgd29ya2VyIG5lZWRzIHRvIGJlIGNhbmNlbGVkPyBEb2VzIGl0IGludm9sdmUgcmVsZWFzaW5nIHJlc291cmNlcywgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgdGhlIHdvcmsgdGhhdCAqd2FzKiBkb25lLCBvciBkb2VzIGl0IHJlcXVpcmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBhcHByb2FjaD8gR2V0dGluZyB0aGVzZSBhbnN3ZXJzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBzb3VuZG5lc3Mgb2YgdGhlIHN5c3RlbSB3aXRoIHJlZ2FyZCB0byBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fd3Ffd29ya2VyX2NhbmNlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYz0xMDg3PXZvaWQgaW9fd3FfaGFzaF93b3JrKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICp2YWwpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMDk0LVxuaW9fdXJpbmcvaW8td3EuYzoxMDk1OnN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXG5pb191cmluZy9pby13cS5jLTEwOTYtXHRcdFx0XHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTA3LVxuaW9fdXJpbmcvaW8td3EuYzoxMTA4OnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuaW9fdXJpbmcvaW8td3EuYy0xMTA5LXtcbi0tXG5pb191cmluZy9pby13cS5jLTExMTYtXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNndvcmtlci1cdTAwM2Vsb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTExNzpcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVx1MDAzZWN1cl93b3JrKSlcbmlvX3VyaW5nL2lvLXdxLmMtMTExOC1cdFx0bWF0Y2gtXHUwMDNlbnJfcnVubmluZyYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbi0tXG5pb191cmluZy9pby13cS5jLTExODktXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmVhZGluZyBhbmQgYW5hbHl6aW5nIGxpbmVzIDEwOTAtMTE0OSBpbiBgaW9fdXJpbmcvaW8td3EuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBJTy1XUSBDb2RlKioKCk9rYXksIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyAxMDkwLTExNDkgd2l0aGluIGBpb191cmluZy9pby13cS5jYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgc29tZSBrZXkgSU8tV1EgKElPIFdvcmsgUXVldWUpIGxvZ2ljIHJlc2lkZXMuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgZnVuY3Rpb25zIG9yIGNvZGUgYmxvY2tzIGRlYWxpbmcgd2l0aCB3b3JrIGl0ZW0gcHJvY2Vzc2luZywgcXVldWUgbWFuYWdlbWVudCwgb3IgcGVyaGFwcyBldmVuIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgSU8tV1EgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgbGlrZWx5IHdvcmsgcXVldWVzLCBjb21wbGV0aW9uIHF1ZXVlcywgYW5kIHRoZSByZWxhdGVkIGxvY2tzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgaG93IHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQsIGhvdyB0aGV5JiMzOTtyZSBlbnF1ZXVlZCBvbnRvIHRoZSBJTy1XUSwgaG93IHRoZSB3b3JrZXIgdGhyZWFkcyBwaWNrIHRoZW0gdXAsIGFuZCBmaW5hbGx5LCBob3cgdGhlIHJlc3VsdHMgYXJlIGhhbmRsZWQgYW5kIHBvc3NpYmx5IHJldHVybmVkIHRvIHRoZSBzdWJtaXR0aW5nIGFwcGxpY2F0aW9uIG9yIGtlcm5lbCBzdWJzeXN0ZW0uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgY29kZSBjaHVuayBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBgaW9fdXJpbmdgIGFyY2hpdGVjdHVyZS4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzIG9yIHZhcmlhYmxlIG5hbWVzIGluIHRoaXMgcmFuZ2Ugd2lsbCBsaWtlbHkgZ2l2ZSBhd2F5IHdoaWNoIGFzcGVjdHMgb2YgdGhlIElPLVdRIGFyZSByZWxldmFudCBoZXJlLgoKSSYjMzk7bSByZWFkeSB0byBsb29rIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29kZSBzZWN0aW9uLiBBbnkgY2xldmVyIHRyaWNrcyB0aGV5IG1pZ2h0IGJlIGVtcGxveWluZyBmb3IgYmF0Y2hpbmcsIHplcm8tY29weSwgb3Igb3RoZXIgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIHdpbGwgY2VydGFpbmx5IGNhdGNoIG15IGF0dGVudGlvbi4gTXkgZXhwZXJ0aXNlIGluIGNvbmN1cnJlbnQgcHJvZ3JhbW1pbmcgYW5kIElPIHN1YnN5c3RlbXMgd2lsbCBoZWxwIG1lIGV2YWx1YXRlIHRoZSBlZmZpY2llbmN5IGFuZCB0aHJlYWQgc2FmZXR5IG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBvciBlcnJvciBoYW5kbGluZyB0aGF0IGNvdWxkIGJlIGEgY2F1c2UgZm9yIGNvbmNlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5MDpcdFxuMTA5MTpcdFx0Yml0ID0gaGFzaF9wdHIodmFsLCBJT19XUV9IQVNIX09SREVSKTtcbjEwOTI6XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0hBU0hFRCB8IChiaXQgXHUwMDNjXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcdTAwMjZ3b3JrLVx1MDAzZWZsYWdzKTtcbjEwOTM6XHR9XG4xMDk0Olx0XG4xMDk1Olx0c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcbjEwOTY6XHRcdFx0XHRcdCAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCxcbjEwOTc6XHRcdFx0XHRcdCAgc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXG4xMDk4Olx0e1xuMTA5OTpcdFx0aWYgKHdvcmsgXHUwMDI2XHUwMDI2IG1hdGNoLVx1MDAzZWZuKHdvcmssIG1hdGNoLVx1MDAzZWRhdGEpKSB7XG4xMTAwOlx0XHRcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG4xMTAxOlx0XHRcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVx1MDAzZXRhc2spO1xuMTEwMjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjExMDM6XHRcdH1cbjExMDQ6XHRcbjExMDU6XHRcdHJldHVybiBmYWxzZTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXG4xMTA5Olx0e1xuMTExMDpcdFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCA9IGRhdGE7XG4xMTExOlx0XG4xMTEyOlx0XHQvKlxuMTExMzpcdFx0ICogSG9sZCB0aGUgbG9jayB0byBhdm9pZCAtXHUwMDNlY3VyX3dvcmsgZ29pbmcgb3V0IG9mIHNjb3BlLCBjYWxsZXJcbjExMTQ6XHRcdCAqIG1heSBkZXJlZmVyZW5jZSB0aGUgcGFzc2VkIGluIHdvcmsuXG4xMTE1Olx0XHQgKi9cbjExMTY6XHRcdHJhd19zcGluX2xvY2soXHUwMDI2d29ya2VyLVx1MDAzZWxvY2spO1xuMTExNzpcdFx0aWYgKF9faW9fd3Ffd29ya2VyX2NhbmNlbCh3b3JrZXIsIG1hdGNoLCB3b3JrZXItXHUwMDNlY3VyX3dvcmspKVxuMTExODpcdFx0XHRtYXRjaC1cdTAwM2Vucl9ydW5uaW5nJiM0MzsmIzQzOztcbjExMTk6XHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZ3b3JrZXItXHUwMDNlbG9jayk7XG4xMTIwOlx0XG4xMTIxOlx0XHRyZXR1cm4gbWF0Y2gtXHUwMDNlbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgIW1hdGNoLVx1MDAzZWNhbmNlbF9hbGw7XG4xMTIyOlx0fVxuMTEyMzpcdFxuMTEyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpb193cV9yZW1vdmVfcGVuZGluZyhzdHJ1Y3QgaW9fd3EgKndxLFxuMTEyNTpcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbjExMjY6XHRcdFx0XHRcdFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxuMTEyNzpcdFx0XHRcdFx0XHQgc3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqcHJldilcbjExMjg6XHR7XG4xMTI5Olx0XHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XG4xMTMwOlx0XHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcbjExMzE6XHRcbjExMzI6XHRcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXHUwMDI2XHUwMDI2IHdvcmsgPT0gd3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XG4xMTMzOlx0XHRcdGlmIChwcmV2KVxuMTEzNDpcdFx0XHRcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XG4xMTM1Olx0XHRcdGlmIChwcmV2X3dvcmsgXHUwMDI2XHUwMDI2IGlvX3dxX2lzX2hhc2hlZChwcmV2X3dvcmspIFx1MDAyNlx1MDAyNlxuMTEzNjpcdFx0XHQgICAgaW9fZ2V0X3dvcmtfaGFzaChwcmV2X3dvcmspID09IGhhc2gpXG4xMTM3Olx0XHRcdFx0d3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdID0gcHJldl93b3JrO1xuMTEzODpcdFx0XHRlbHNlXG4xMTM5Olx0XHRcdFx0d3EtXHUwMDNlaGFzaF90YWlsW2hhc2hdID0gTlVMTDtcbjExNDA6XHRcdH1cbjExNDE6XHRcdHdxX2xpc3RfZGVsKFx1MDAyNmFjY3QtXHUwMDNld29ya19saXN0LCBcdTAwMjZ3b3JrLVx1MDAzZWxpc3QsIHByZXYpO1xuMTE0MjpcdH1cbjExNDM6XHRcbjExNDQ6XHRzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcbjExNDU6XHRcdFx0XHRcdFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4xMTQ2Olx0XHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4xMTQ3Olx0e1xuMTE0ODpcdFx0c3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqbm9kZSwgKnByZXY7XG4xMTQ5Olx0XHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUzNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkFuYWx5emluZyB0aGUgSS9PIFdvcmtxdWV1ZSBDYW5jZWxsYXRpb24gTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBpb193cV93b3JrZXJfY2FuY2VsYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0d28gZmFjdG9yczogYG1hdGNoLSZndDtucl9ydW5uaW5nYCBhbmQgYCFtYXRjaC0mZ3Q7Y2FuY2VsX2FsbGAuIEJhc2ljYWxseSwgaXQmIzM5O3MgYSBjb21iaW5lZCBzdGF0ZSByZXByZXNlbnRpbmcgcnVubmluZyB3b3JrIGFuZCB0aGUgZGVzaXJlIHRvIGNhbmNlbCAqZXZlcnl0aGluZyouIEludHVpdGl2ZWx5LCB0aGF0IG1ha2VzIHNlbnNlLiBJZiB3b3JrIGlzIHJ1bm5pbmcgKmFuZCogd2UgYXJlbiYjMzk7dCBjYW5jZWxsaW5nIGV2ZXJ5dGhpbmcsIHRoZW4gYGlvX3dxX3dvcmtlcl9jYW5jZWxgIHNob3VsZCByZXR1cm4gdHJ1ZSAoYW5kIHNpZ25hbCBzb21lIGNvbmRpdGlvbikuIEJ1dCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBpdHMgaW50ZXJuYWxzLgpUaGVuLCBJIHNlZSBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGlzIHJldHVybmluZyBgYm9vbGAgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYWN0dWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYm9vbGVhbiByZXR1cm4gdmFsdWUgaXMsIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgZ28gY2hlY2sgdGhhdCBmdW5jdGlvbiBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2FjY3RfZm9yX2VhY2hfd29ya2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jPTkwMT1zdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtOTQyLSAqL1xuaW9fdXJpbmcvaW8td3EuYzo5NDM6c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG5pb191cmluZy9pby13cS5jLTk0NC1cdFx0XHRcdCAgICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmM9OTY0PXN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtOTY4LVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkmIzQzOyYjNDM7KVxuaW9fdXJpbmcvaW8td3EuYzo5Njk6XHRcdGlmIChpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcbmlvX3VyaW5nL2lvLXdxLmMtOTcwLVx0XHRcdGJyZWFrO1xuLS1cbmlvX3VyaW5nL2lvLXdxLmM9MTE4ND1zdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xMTg5LVx0cmF3X3NwaW5fbG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG5pb191cmluZy9pby13cS5jOjExOTA6XHRyZXQgPSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XG5pb191cmluZy9pby13cS5jLTExOTEtXHRyYXdfc3Bpbl91bmxvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyA5NDAtOTc1IG9mIGBpb191cmluZy9pby13cS5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlLCBwcm9iYWJseSBzb21lIGNydWNpYWwgcGFydCBvZiB0aGUgaW9fd3EgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlIGZpbGUgYW5kIGZ1bmN0aW9uIG5hbWUsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggdGhlIHdvcmsgcXVldWUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBJL08gb3BlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0YXNrIHNjaGVkdWxpbmcsIGNvbXBsZXRpb24gaGFuZGxpbmcsIGVycm9yIG1hbmFnZW1lbnQsIG9yIHJlc291cmNlIGFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgc2VhcmNoaW5nIGZvciBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgZXhlY3V0aW9uIGFuZC9vciBjb21wbGV0aW9uIG9mIEkvTyByZXF1ZXN0cy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIHdvcmsgcXVldWUgaXMgbWFuYWdpbmcgSS9PIG9wZXJhdGlvbnMgYXQgdGhpcyBqdW5jdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pby13cS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHQgKiBJdGVyYXRlIHRoZSBwYXNzZWQgaW4gbGlzdCBhbmQgY2FsbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2hcbiA5NDE6XHQgKiB3b3JrZXIgdGhhdCBpc24mIzM5O3QgZXhpdGluZ1xuIDk0MjpcdCAqL1xuIDk0MzpcdHN0YXRpYyBib29sIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuIDk0NDpcdFx0XHRcdFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4gOTQ1Olx0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbiA5NDY6XHR7XG4gOTQ3Olx0XHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XG4gOTQ4Olx0XHRib29sIHJldCA9IGZhbHNlO1xuIDk0OTpcdFxuIDk1MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29ya2VyLCBcdTAwMjZhY2N0LVx1MDAzZWFsbF9saXN0LCBhbGxfbGlzdCkge1xuIDk1MTpcdFx0XHRpZiAoaW9fd29ya2VyX2dldCh3b3JrZXIpKSB7XG4gOTUyOlx0XHRcdFx0Lyogbm8gdGFzayBpZiBub2RlIGlzL3dhcyBvZmZsaW5lICovXG4gOTUzOlx0XHRcdFx0aWYgKHdvcmtlci1cdTAwM2V0YXNrKVxuIDk1NDpcdFx0XHRcdFx0cmV0ID0gZnVuYyh3b3JrZXIsIGRhdGEpO1xuIDk1NTpcdFx0XHRcdGlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7XG4gOTU2Olx0XHRcdFx0aWYgKHJldClcbiA5NTc6XHRcdFx0XHRcdGJyZWFrO1xuIDk1ODpcdFx0XHR9XG4gOTU5Olx0XHR9XG4gOTYwOlx0XG4gOTYxOlx0XHRyZXR1cm4gcmV0O1xuIDk2MjpcdH1cbiA5NjM6XHRcbiA5NjQ6XHRzdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcbiA5NjU6XHRcdFx0XHRcdCAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcbiA5NjY6XHRcdFx0XHRcdCAgdm9pZCAqZGF0YSlcbiA5Njc6XHR7XG4gOTY4Olx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSYjNDM7JiM0MzspXG4gOTY5Olx0XHRcdGlmIChpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcbiA5NzA6XHRcdFx0XHRicmVhaztcbiA5NzE6XHR9XG4gOTcyOlx0XG4gOTczOlx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX3dha2Uoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxuIDk3NDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAwNgoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiAxNTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBpby13cSBDYW5jZWxsYXRpb24gUGF0Y2ggYW5kIEtNU0FOIFJlcXVpcmVtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgb3B0aW1pemVzIHRoZSBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgZnVuY3Rpb24uIEJhc2ljYWxseSwgaXQmIzM5O3MgYWJvdXQgbWFraW5nIHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBtb3JlIGVmZmljaWVudC4gUHJldmlvdXNseSwgZXZlbiBpZiBhIG1hdGNoaW5nIHdvcmsgaXRlbSB3YXMgZm91bmQgYW5kIGNhbmNlbGVkIHdpdGhpbiBvbmUgYWNjb3VudCAoYHdxLSZndDthY2N0W2ldYCksIHRoZSBsb29wIHdvdWxkIGNvbnRpbnVlIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIG90aGVyIGFjY291bnRzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBgYm9vbGAgcmV0dXJuIHZhbHVlIGZyb20gYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AsIHdoaWNoIGlzLCBpbiB0dXJuLCBwcm9wYWdhdGVkIGZyb20gYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCwgdG8gYWxsb3cgZWFybHkgZXhpdCBmcm9tIHRoZSBsb29wIGlmIGEgbWF0Y2ggaGFzIGJlZW4gZm91bmQgYW5kIGBjYW5jZWxfYWxsYCBpcyBgZmFsc2VgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBEbyB3ZSBuZWVkIHRvIHJ1biBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBmb3IgdGhpcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTiYjMzk7cyBtYWluIGNvbmNlcm4uIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBjb25zaWRlcmVkOgoKRmlyc3QsIGxldCYjMzk7cyByZW1lbWJlciB0aGUgZ29hbC4gS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciB0b29scyBsaWtlIExPQ0tERVAgYXJlIGdvb2QgZm9yIGNhdGNoaW5nIG1lbW9yeSBlcnJvcnMsIGxvY2tpbmcgaXNzdWVzLCBhbmQgb3RoZXIgY29tbW9uIGJ1Z3MuIEtNU0FOIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgd2UmIzM5O3JlIHdvcnJpZWQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgKnNwZWNpZmljYWxseSouCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgZnVuY3Rpb24gYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCByZXR1cm5zIGEgYm9vbGVhbiwgYW5kIHRoaXMgYm9vbGVhbiBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG5hbWVkIGByZXRgLiBUaGF0IHZhcmlhYmxlIGlzICppbml0aWFsaXplZCogaW1tZWRpYXRlbHkgd2hlbiBhc3NpZ25lZCwgc28gaXQgY2FuJiMzOTt0IGJlIHVuaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIHRoZW4gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxvZ2ljIGZsb3cuCgpEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgJiMzNDtubyYjMzQ7LiBMZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIHJ1bGVzOgoKMS4gICoqS2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzOioqIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAsIGlvY3Rscywgb3Igc29ja2V0IG9wdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBjb250cm9sIGZsb3cgZm9yIGFuIGV4aXN0aW5nIGNhbmNlbGxhdGlvbiBtZWNoYW5pc20uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSBgcmV0YCB2YXJpYWJsZSBpcyBhc3NpZ25lZCBmcm9tIGEgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJucyBhIGJvb2xlYW4uIFNvIGl0JiMzOTtzIGluaXRpYWxpemVkIGZyb20gdGhlIHN0YXJ0LiBOb3RoaW5nIGhlcmUgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgKipEYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUuIFRoZSBsb2dpYyBjaGFuZ2UgaXMgYWJvdXQgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGVhcmx5IGlmIHdvcmsgaXMgY2FuY2VsZWQsIG5vdCBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMgb3Igd2F5cyB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLgo0LiAgKipCdWZmZXIgYWNjZXNzOioqIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGhlcmUgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgb3Igd3JpdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBzaW1wbHkgb3B0aW1pemF0aW9uIG9mIGV4aXN0aW5nIGxvZ2ljLgoKSW4gc2hvcnQsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgY29udHJvbC1mbG93IGNoYW5nZSB3aXRoaW4gZXhpc3RpbmcgY29kZS4gVGhlIHBhdGNoIGhhcyAqbm90aGluZyogdG8gZG8gd2l0aCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgYWJvdXQgb3B0aW1pemluZyBhbiBleGlzdGluZyBjYW5jZWxsYXRpb24gcHJvY2Vzcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmFjZSBjb25kaXRpb25zIChhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSksIHdpbGwgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBhbmQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgdG8gcmV0dXJuIGVhcmx5IHdoZW4gYSBtYXRjaGluZyB3b3JrZXIgaGFzIGJlZW4gY2FuY2VsZWQgYW5kIGNhbmNlbF9hbGwgaXMgZmFsc2UuIEl0IGNoYW5nZXMgY29udHJvbCBmbG93IGJ5IHByb3BhZ2F0aW5nIHRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBmcm9tIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKCkgdGhyb3VnaCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSBzbyB0aGUgbG9vcCBvdmVyIGFjY291bnRzIGJyZWFrcyBlYXJseS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJiMzOTtyZXQmIzM5OyBpcyBkaXJlY3RseSBhc3NpZ25lZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyLCB3aGljaCBhbHdheXMgcmV0dXJucyBhIGZ1bGx5IGluaXRpYWxpemVkIGJvb2wpLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyB3aXRoIGlvX3dvcmtlciBvciBpb193cSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yaygpIGFuZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSB0byByZXR1cm4gZWFybHkgd2hlbiBhIG1hdGNoaW5nIHdvcmtlciBoYXMgYmVlbiBjYW5jZWxlZCBhbmQgY2FuY2VsX2FsbCBpcyBmYWxzZS4gSXQgY2hhbmdlcyBjb250cm9sIGZsb3cgYnkgcHJvcGFnYXRpbmcgdGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGZyb20gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoKSB0aHJvdWdoIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHNvIHRoZSBsb29wIG92ZXIgYWNjb3VudHMgYnJlYWtzIGVhcmx5LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJlYWRzIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGlzIGRpcmVjdGx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIsIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYm9vbCkuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHdpdGggaW9fd29ya2VyIG9yIGlvX3dxIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ4OjU5LjM5NDA0OTU3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTgzODE0OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiSU9fV1FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICAgIFwiaW9fYXN5bmNfY2FuY2VsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKCkgYW5kIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHRvIHJldHVybiBlYXJseSB3aGVuIGEgbWF0Y2hpbmcgd29ya2VyIGhhcyBiZWVuIGNhbmNlbGVkIGFuZCBjYW5jZWxfYWxsIGlzIGZhbHNlLiBJdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBieSBwcm9wYWdhdGluZyB0aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcigpIHRocm91Z2ggaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgc28gdGhlIGxvb3Agb3ZlciBhY2NvdW50cyBicmVha3MgZWFybHkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgaXMgZGlyZWN0bHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciwgd2hpY2ggYWx3YXlzIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXplZCBib29sKS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgd2l0aCBpb193b3JrZXIgb3IgaW9fd3EgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ4OjU5LjM5NDA1NDY0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDIzOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDo0ODo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9pby13cS5jIGIvaW9fdXJpbmcvaW8td3EuY1xcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvaW8td3EuY1xcbisrKyBiL2lvX3VyaW5nL2lvLXdxLmNcXG5AQCAtMTE4MSwxMiArMTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbitzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuIHtcXG4rXFx0Ym9vbCByZXQ7XFxuK1xcbiBcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbi1cXHRpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XFxuK1xcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG4gXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuQEAgLTExOTUsNyArMTE5OCw4IEBAIHN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuLVxcdFxcdGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcXG4rXFx0XFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0ODo1OS44NzY3MTg2NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc5MzkzMTY0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJJT19XUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCIsXG4gICAgXCJpb19hc3luY19jYW5jZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjQ4OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmNcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pby13cS5jXG4rKysgYi9pb191cmluZy9pby13cS5jXG5AQCAtMTE4MSwxMiArMTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbitzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4gXHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4ge1xuK1x0Ym9vbCByZXQ7XG4rXG4gXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi1cdGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbitcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbiBcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5AQCAtMTE5NSw3ICsxMTk4LDggQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcbi1cdFx0aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcbitcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0ODo1OS44NzY3MjAyMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODU5ODgzNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvaW8td3EuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFwcGxpZWQgdG8gYGlvX3VyaW5nL2lvLXdxLmNgLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGNvZGUgY2hhbmdlcyBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIG1vZGlmaWVkIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLiBQcmV2aW91c2x5LCBpdCB3YXMgYSBgdm9pZGAgZnVuY3Rpb24sIGFuZCBub3cgaXQgcmV0dXJucyBhIGBib29sYC4gVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdyYXBwaW5nIHRoZSBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGNhbGwgd2l0aCBgcmF3X3NwaW5fbG9ja2AgYW5kIGByYXdfc3Bpbl91bmxvY2tgLCBhbmQgdGhlIG5ldyByZXR1cm4gdmFsdWUuIEFsc28gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIG5vdyBicmVha3Mgb24gYSB0cnVlIHJldHVybiBmcm9tIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhleSBpbnRyb2R1Y2VkIHRoaXMgYm9vbGVhbiByZXR1cm4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGBicmVha2AuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBvZiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLCBhbmQgd2h5IGxvY2tpbmcgaXMgbm93IHJlcXVpcmVkLiBXaGF0IGlzIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgdGhhdCB0aGlzIGlzIGVuYWJsaW5nIG9yIGltcHJvdmluZz9cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBpbiBgaW9fdXJpbmcvaW8td3EuY2AuIEknbGwgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrYCwgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhpcyB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgaW50ZW50IG9mIHRoZSBwYXRjaCBhbmQgd2hldGhlciB0aGUgY2hhbmdlcyBhcmUgc2Vuc2libGUgYW5kIGNvcnJlY3QuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MDQuNzM2NjA2MDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTcwOlxcdHtcXG4xMTcxOlxcdFxcdGludCBpO1xcbjExNzI6XFx0cmV0cnk6XFxuMTE3MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKSB7XFxuMTE3NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHRpZiAoaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBhY2N0LCBtYXRjaCkpIHtcXG4xMTc3OlxcdFxcdFxcdFxcdGlmIChtYXRjaC1cXHUwMDNlY2FuY2VsX2FsbClcXG4xMTc4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMTE3OTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTgwOlxcdFxcdFxcdH1cXG4xMTgxOlxcdFxcdH1cXG4xMTgyOlxcdH1cXG4xMTgzOlxcdFxcbjExODQ6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG4xMTg2OlxcdHtcXG4xMTg3OlxcdFxcdGJvb2wgcmV0O1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTA6XFx0XFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xcbjExOTE6XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExOTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuMTE5NzpcXHR7XFxuMTE5ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbjEyMDE6XFx0XFx0XFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcXG4xMjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMjA1OlxcdH1cXG4xMjA2OlxcdFxcbjEyMDc6XFx0ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuMTIwODpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmRhdGEsIGJvb2wgY2FuY2VsX2FsbClcXG4xMjA5OlxcdHtcXG4xMjEwOlxcdFxcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSBtYXRjaCA9IHtcXG4xMjExOlxcdFxcdFxcdC5mblxcdFxcdD0gY2FuY2VsLFxcbjEyMTI6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IGRhdGEsXFxuMTIxMzpcXHRcXHRcXHQuY2FuY2VsX2FsbFxcdD0gY2FuY2VsX2FsbCxcXG4xMjE0OlxcdFxcdH07XFxuMTIxNTpcXHRcXG4xMjE2OlxcdFxcdC8qXFxuMTIxNzpcXHRcXHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJ3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxcbjEyMTg6XFx0XFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxcbjEyMTk6XFx0XFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjA0LjczNjcwMjM1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4MDAwNTk2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBrZWVwaW5nIGluIG1pbmQgbXkgZGVlcCBrbm93bGVkZ2Ugb2YgdGhpcyBhcmVhOlxuXG4qKkRlY29uc3RydWN0aW5nIGlvX3dxX2NhbmNlbF9jYiBcdTAwMjYgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgaW9fd3FfY2FuY2VsX2NiYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBsZXRlIGNvbnRleHQuIFRvIGRvIHRoYXQsIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIHF1aWNrbHkgdW5kZXJzdGFuZCBob3cgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIGlzIGFjdHVhbGx5ICppbnZva2VkKiB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBzcG90IGZvciBJL08gY2FuY2VsbGF0aW9uLCBzbyBnZXR0aW5nIHRoZSBmbG93IHJpZ2h0IGlzIHBhcmFtb3VudC5cblxuVGhlbiwgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCByZXR1cm4gdmFsdWUgb2YgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYC4gSSBzdXNwZWN0IGl0J3MgZ2l2aW5nIHNvbWUgY3JpdGljYWwgc3RhdHVzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB3b3JrZXJzIHdpdGhpbiB0aGUgSS9PIHF1ZXVlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgbWVhbnMsIGFuZCBob3cgdGhpcyByZXR1cm4gdmFsdWUgaW5mbHVlbmNlcyBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBQcm9iYWJseSBzb21lIGtpbmQgb2YgYWNjb3VudGluZyBkYXRhLiBUaGUgZnVuY3Rpb24gbmFtZSBjZXJ0YWlubHkgc3VnZ2VzdHMgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MDguNTM2NzY0NTAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNTpcXHRcXG4xMjE2OlxcdFxcdC8qXFxuMTIxNzpcXHRcXHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJ3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxcbjEyMTg6XFx0XFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxcbjEyMTk6XFx0XFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXFxuMTIyMDpcXHRcXHQgKlxcbjEyMjE6XFx0XFx0ICogVGhlbiBjaGVjayBpZiBhIGZyZWUgKGdvaW5nIGJ1c3kpIG9yIGJ1c3kgd29ya2VyIGhhcyB0aGUgd29ya1xcbjEyMjI6XFx0XFx0ICogY3VycmVudGx5IHJ1bm5pbmcuIElmIHdlIGZpbmQgaXQgdGhlcmUsIHdlJ2xsIHJldHVybiBDQU5DRUxfUlVOTklOR1xcbjEyMjM6XFx0XFx0ICogYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHdlIGF0dGVtcHQgdG8gc2lnbmFsIGNhbmNlbGxhdGlvbi4gVGhlXFxuMTIyNDpcXHRcXHQgKiBjb21wbGV0aW9uIHdpbGwgcnVuIG5vcm1hbGx5IGluIHRoaXMgY2FzZS5cXG4xMjI1OlxcdFxcdCAqXFxuMTIyNjpcXHRcXHQgKiBEbyBib3RoIG9mIHRoZXNlIHdoaWxlIGhvbGRpbmcgdGhlIGFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jaywgdG8gZW5zdXJlIHRoYXRcXG4xMjI3OlxcdFxcdCAqIHdlJ2xsIGZpbmQgYSB3b3JrIGl0ZW0gcmVnYXJkbGVzcyBvZiBzdGF0ZS5cXG4xMjI4OlxcdFxcdCAqL1xcbjEyMjk6XFx0XFx0aW9fd3FfY2FuY2VsX3BlbmRpbmdfd29yayh3cSwgXFx1MDAyNm1hdGNoKTtcXG4xMjMwOlxcdFxcdGlmIChtYXRjaC5ucl9wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbjEyMzE6XFx0XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcXG4xMjMyOlxcdFxcbjEyMzM6XFx0XFx0aW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayh3cSwgXFx1MDAyNm1hdGNoKTtcXG4xMjM0OlxcdFxcdGlmIChtYXRjaC5ucl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbjEyMzU6XFx0XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9SVU5OSU5HO1xcbjEyMzY6XFx0XFxuMTIzNzpcXHRcXHRpZiAobWF0Y2gubnJfcnVubmluZylcXG4xMjM4OlxcdFxcdFxcdHJldHVybiBJT19XUV9DQU5DRUxfUlVOTklORztcXG4xMjM5OlxcdFxcdGlmIChtYXRjaC5ucl9wZW5kaW5nKVxcbjEyNDA6XFx0XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcXG4xMjQxOlxcdFxcdHJldHVybiBJT19XUV9DQU5DRUxfTk9URk9VTkQ7XFxuMTI0MjpcXHR9XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdHN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbjEyNDU6XFx0XFx0XFx0XFx0ICAgIGludCBzeW5jLCB2b2lkICprZXkpXFxuMTI0NjpcXHR7XFxuMTI0NzpcXHRcXHRzdHJ1Y3QgaW9fd3EgKndxID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBpb193cSwgd2FpdCk7XFxuMTI0ODpcXHRcXHRpbnQgaTtcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2d2FpdC1cXHUwMDNlZW50cnkpO1xcbjEyNTE6XFx0XFxuMTI1MjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTI1MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKSB7XFxuMTI1NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MDguNTM2ODgwMDUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjczODUzNDg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdvcmsgUXVldWUgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTG9va2luZyBhdCBsaW5lcyAxMjAwLTEyMDIsIEkgc2VlIGEgbG9vcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYGlvX2FjY3RgIGFycmF5IHdpdGhpbiBhIHdvcmsgcXVldWUgKGB3cWApLiBUaGUgY29kZSBhdHRlbXB0cyB0byBjYW5jZWwgcnVubmluZyB3b3JrIGl0ZW1zIHVzaW5nIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgLCBicmVha2luZyB0aGUgbG9vcCBpZiBhIGNhbmNlbGxhdGlvbiBpcyBzdWNjZXNzZnVsLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgaWYgYG1hdGNoLVx1MDAzZWNhbmNlbF9hbGxgIGlzIHRydWU/XG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldvdWxkbid0IHdlIHdhbnQgdG8gY2FuY2VsICphbGwqIHJ1bm5pbmcgd29yayBpdGVtcyBpbiB0aGF0IGNhc2U/XCIgUHJldmlvdXNseSwgaWYgYGNhbmNlbF9hbGxgICp3YXMqIHRydWUsIHRoZSBjb2RlIGl0ZXJhdGVkIHRocm91Z2ggdGhlIGFycmF5IHdpdGhvdXQgYSBgYnJlYWtgLiBDbGVhcmx5LCB0aGF0IGJlaGF2aW91ciBoYXMgY2hhbmdlZC4gTm93IGl0IGJyZWFrcyFcblxuVGhpcyBtZWFucyB0aGF0IGlmIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgICpyZXR1cm5zKiB0cnVlLCB0aGUgbG9vcCBub3cgYnJlYWtzLiBUaGF0IHJhaXNlcyB0aGUgcXVlc3Rpb246IGlzIHRoYXQgaW50ZW5kZWQgYmVoYXZpb3IsIGV2ZW4gd2hlbiB3ZSB3YW50IHRvIGNhbmNlbCBldmVyeXRoaW5nPyBPciwgc2hvdWxkIHRoZSBsb29wIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIGBjYW5jZWxfYWxsYCBpcyB0cnVlP1xuXG5UbyBjbGFyaWZ5IHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AgcmV0dXJucyBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBNb3JlIGltcG9ydGFudGx5LCB3aGF0J3MgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBhbmQgaG93IGl0IG1pZ2h0IHBsYXkgaW50byB0aGUgb3ZlcmFsbCBsb2dpYy4gSSBuZWVkIHRvIGdvIGxvb2sgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIGJlaGF2aW9yIGhlcmUgc2VlbXMgY291bnRlcmludHVpdGl2ZSB0byBhIGZ1bGwgY2FuY2VsbGF0aW9uIGFwcHJvYWNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTEuMjc1NDE3Mjg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg2MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2FjY3RfZm9yX2VhY2hfd29ya2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTkwMT1zdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05NDItICovXFxuaW9fdXJpbmcvaW8td3EuYzo5NDM6c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuaW9fdXJpbmcvaW8td3EuYy05NDQtXFx0XFx0XFx0XFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXFxuLS1cXG5pb191cmluZy9pby13cS5jPTk2ND1zdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTY4LVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbmlvX3VyaW5nL2lvLXdxLmM6OTY5OlxcdFxcdGlmIChpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIGZ1bmMsIGRhdGEpKVxcbmlvX3VyaW5nL2lvLXdxLmMtOTcwLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTg0PXN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE4OS1cXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTE5MDpcXHRyZXQgPSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihhY2N0LCBpb193cV93b3JrZXJfY2FuY2VsLCBtYXRjaCk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMTkxLVxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTEuMzI3OTEzMDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTgzNDUyODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciBhbmQgaW9fd3Ffd29ya2VyX2NhbmNlbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSB0d28uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgSS9PIGFjY291bnRpbmcgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyB3b3JrZXIgdGhyZWFkIG9yIGdyb3VwIG9mIHdvcmtlciB0aHJlYWRzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEknZCBleHBlY3QgaXQgdG8gaGFuZGxlIGFjY291bnRpbmcgdXBkYXRlcyBvciBwZXJoYXBzIGFnZ3JlZ2F0ZSBzdGF0aXN0aWNzLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gYGlvX3dxX3dvcmtlcl9jb3VudGAgdG8gaW5mZXIgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB3b3JrZXIgcXVldWUuIEl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgaXMgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zLCBieXRlcyB0cmFuc2ZlcnJlZCwgb3IgdGltZXN0YW1wcy4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIHNvbWUgc29ydCBvZiBzcGlubG9jayBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGludm9sdmVkLCB0byBlbnN1cmUgYXRvbWljIHVwZGF0ZXMuXG5cbk5vdywgYGlvX3dxX3dvcmtlcl9jYW5jZWxgLiBUaGUgXCJjYW5jZWxcIiBwYXJ0IGltbWVkaWF0ZWx5IHNjcmVhbXMgcmVzb3VyY2UgY2xlYW51cC4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgY2FuY2VsbGluZyBwZW5kaW5nIEkvTyB3b3JrIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgd29ya2VyIG9yIHRoZSBxdWV1ZS4gSSBzaG91bGQgbG9vayB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB3b3JrcXVldWUncyBjYW5jZWxsYXRpb24gbWVjaGFuaXNtcy4gSSdkIGV4cGVjdCB0aGF0IGl0IGhhbmRsZXMgZW5zdXJpbmcgdGhlIHRocmVhZCBkb2Vzbid0IGNvbnRpbnVlIGRvaW5nIGl0cyBqb2Igd2l0aCBpbnZhbGlkYXRlZCBwYXJhbWV0ZXJzLiBHaXZlbiB0aGF0IHRoaXMgaXMgd29ya2luZyB3aXRoIEkvTywgSSB3b3VsZCBleHBlY3QgdGhlIGNhbmNlbGxhdGlvbiB0byBoYXZlIHRvIGhhcHBlbiBpbiBhIHZlcnkgY2FyZWZ1bCB3YXkuIEknZCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGFueSByZWxhdGlvbiB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjYW5jZWxsYXRpb247IGFyZSB3ZSB0YWxraW5nIGFib3V0IGltbWVkaWF0ZSwgZGVmZXJyZWQsIG9yIGdyYWNlZnVsIHRlcm1pbmF0aW9uIG9mIHdvcms/IFdoYXQncyB0aGUgaW1wYWN0IG9uIGRhdGEgY29uc2lzdGVuY3ksIGFuZCBob3cgYXJlIGVycm9ycyBoYW5kbGVkPyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgaG93IGNhbmNlbGxhdGlvbiBhZmZlY3RzIHBlbmRpbmcgY29tcGxldGlvbiBjYWxsYmFja3MgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbi5cblxuSSBzaG91bGQgYWxzbyBsb29rIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybnMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTUuNTExMzc0NjI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pby13cS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0MDpcXHQgKiBJdGVyYXRlIHRoZSBwYXNzZWQgaW4gbGlzdCBhbmQgY2FsbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2hcXG4gOTQxOlxcdCAqIHdvcmtlciB0aGF0IGlzbid0IGV4aXRpbmdcXG4gOTQyOlxcdCAqL1xcbiA5NDM6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuIDk0NDpcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4gOTQ1OlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhKVxcbiA5NDY6XFx0e1xcbiA5NDc6XFx0XFx0c3RydWN0IGlvX3dvcmtlciAqd29ya2VyO1xcbiA5NDg6XFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29ya2VyLCBcXHUwMDI2YWNjdC1cXHUwMDNlYWxsX2xpc3QsIGFsbF9saXN0KSB7XFxuIDk1MTpcXHRcXHRcXHRpZiAoaW9fd29ya2VyX2dldCh3b3JrZXIpKSB7XFxuIDk1MjpcXHRcXHRcXHRcXHQvKiBubyB0YXNrIGlmIG5vZGUgaXMvd2FzIG9mZmxpbmUgKi9cXG4gOTUzOlxcdFxcdFxcdFxcdGlmICh3b3JrZXItXFx1MDAzZXRhc2spXFxuIDk1NDpcXHRcXHRcXHRcXHRcXHRyZXQgPSBmdW5jKHdvcmtlciwgZGF0YSk7XFxuIDk1NTpcXHRcXHRcXHRcXHRpb193b3JrZXJfcmVsZWFzZSh3b3JrZXIpO1xcbiA5NTY6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4gOTU3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NTg6XFx0XFx0XFx0fVxcbiA5NTk6XFx0XFx0fVxcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA5NjI6XFx0fVxcbiA5NjM6XFx0XFxuIDk2NDpcXHRzdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG4gOTY1OlxcdFxcdFxcdFxcdFxcdCAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4gOTY2OlxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqZGF0YSlcXG4gOTY3OlxcdHtcXG4gOTY4OlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbiA5Njk6XFx0XFx0XFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXSwgZnVuYywgZGF0YSkpXFxuIDk3MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX3dha2Uoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxcbiA5NzQ6XFx0e1xcbiA5NzU6XFx0XFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXFx1MDAzZXRhc2spO1xcbiA5NzY6XFx0XFx0d2FrZV91cF9wcm9jZXNzKHdvcmtlci1cXHUwMDNldGFzayk7XFxuIDk3NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDk3ODpcXHR9XFxuIDk3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTUuNTExODUwOTk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NzY4MzgwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBpb193cV93b3JrZXJfY2FuY2VsYCBmdW5jdGlvbi4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBJL08gYW5kIHdvcmtlciB0aHJlYWRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNhbmNlbGxhdGlvbiBwcm9jZXNzIHdvcmtzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoZSBjb3JlIHByb2JsZW0gaGVyZSBpcyBsaWtlbHkgbWFuYWdpbmcgdGhlIHN0YXRlIG9mIGFuIEkvTyBvcGVyYXRpb24gYW5kIGVuc3VyaW5nIGEgY2xlYW4gc2h1dGRvd24gb2YgYSB3b3JrZXIgdGhyZWFkIHdpdGhvdXQgY29ycnVwdGluZyBkYXRhIG9yIGxlYXZpbmcgcmVzb3VyY2VzIGRhbmdsaW5nLlxuXG4qICAgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4gSWYgYSB3b3JrZXIgdGhyZWFkIGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIGFuIEkvTyByZXF1ZXN0LCBhbmQgYSBjYW5jZWwgc2lnbmFsIGFycml2ZXMsIHdlIG5lZWQgYSBtZWNoYW5pc20gdG8gcHJldmVudCBpdCBmcm9tIGNvbXBsZXRpbmcgYWZ0ZXIgdGhlIGNhbmNlbCBoYXMgYmVlbiByZXF1ZXN0ZWQuIFdlIGFsc28gbmVlZCB0byBhdm9pZCBhbnkgcG9zc2liaWxpdHkgb2YgZGVhZGxvY2tzIGlmIHRoZSB3b3JrZXIgaXMgaG9sZGluZyBhbnkgbG9ja3MuXG4qICAgTmV4dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBtZWNoYW5pc20gdG8gc2lnbmFsIHRvIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgb3BlcmF0aW9uLCB0aGF0IGl0IGhhcyBiZWVuIGNhbmNlbGVkLlxuKiAgIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSB0cmFja3MgdGhlIEkvTyByZXF1ZXN0J3MgcHJvZ3Jlc3MuIEFyZSB0aGVyZSBmbGFncz8gU3RhdGUgdmFyaWFibGVzPyBBdG9taWMgb3BlcmF0aW9ucz8gVGhvc2Ugd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3luY2hyb25pemF0aW9uLlxuKiAgIEkgc3VzcGVjdCB0aGUgY2FuY2VsbGF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgc2V0dGluZyBzb21lIGtpbmQgb2YgXCJjYW5jZWxcIiBmbGFnLCBhbmQgcG90ZW50aWFsbHkgd2FraW5nIHVwIHRoZSB3b3JrZXIgdGhyZWFkIGlmIGl0J3MgY3VycmVudGx5IHNsZWVwaW5nLiBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IG1lYW5zIGZvciByZXNvdXJjZSBjbGVhbnVwLlxuKiAgIEkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gaGFuZGxlcyBwYXJ0aWFsIGNvbXBsZXRpb25zIG9mIGFuIEkvTyByZXF1ZXN0OyBkb2VzIGl0IGFsbG93IGZvciB0aGUgSS9PIHRvIGJlIGNhbmNlbGVkIGFuZCByZXR1cm4gcGFydGlhbCBkYXRhLCBvciBtdXN0IHRoZSBJL08gYmUgY29tcGxldGVseSByb2xsZWQgYmFjaz9cbiogICBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGVkZ2UgY2FzZXMgbGlrZSBpZiBhIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHNjaGVkdWxlZCB5ZXQuXG4qICAgRmluYWxseSwgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwsIGVzcGVjaWFsbHkgYXJvdW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlIGxlYWtzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBhIHByZW1hdHVyZSBvciBpbmNvbXBsZXRlIGNhbmNlbGxhdGlvbi5cblxuTGV0IG1lIGdvIHRocm91Z2ggaXQgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMgYW5kIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjE4LjQ4ODY5MjE0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0dm9pZCBpb193cV9zZXRfZXhpdF9vbl9pZGxlKHN0cnVjdCBpb193cSAqd3EsIGJvb2wgZW5hYmxlKVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0aWYgKCF3cS1cXHUwMDNldGFzaylcXG4gOTgzOlxcdFxcdFxcdHJldHVybjtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0aWYgKCFlbmFibGUpIHtcXG4gOTg2OlxcdFxcdFxcdGNsZWFyX2JpdChJT19XUV9CSVRfRVhJVF9PTl9JRExFLCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKTtcXG4gOTg3OlxcdFxcdFxcdHJldHVybjtcXG4gOTg4OlxcdFxcdH1cXG4gOTg5OlxcdFxcbiA5OTA6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSU9fV1FfQklUX0VYSVRfT05fSURMRSwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuIDk5MTpcXHRcXHRcXHRyZXR1cm47XFxuIDk5MjpcXHRcXG4gOTkzOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gOTk0OlxcdFxcdGlvX3dxX2Zvcl9lYWNoX3dvcmtlcih3cSwgaW9fd3Ffd29ya2VyX3dha2UsIE5VTEwpO1xcbiA5OTU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDk5NjpcXHR9XFxuIDk5NzpcXHRcXG4gOTk4OlxcdHN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXFxuIDk5OTpcXHR7XFxuMTAwMDpcXHRcXHRkbyB7XFxuMTAwMTpcXHRcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuMTAwMjpcXHRcXHRcXHRpb193cV9zdWJtaXRfd29yayh3b3JrKTtcXG4xMDAzOlxcdFxcdFxcdHdvcmsgPSBpb193cV9mcmVlX3dvcmsod29yayk7XFxuMTAwNDpcXHRcXHR9IHdoaWxlICh3b3JrKTtcXG4xMDA1OlxcdH1cXG4xMDA2OlxcdFxcbjEwMDc6XFx0c3RhdGljIHZvaWQgaW9fd3FfaW5zZXJ0X3dvcmsoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuMTAwODpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXFxuMTAwOTpcXHR7XFxuMTAxMDpcXHRcXHR1bnNpZ25lZCBpbnQgaGFzaDtcXG4xMDExOlxcdFxcdHN0cnVjdCBpb193cV93b3JrICp0YWlsO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRpZiAoIV9faW9fd3FfaXNfaGFzaGVkKHdvcmtfZmxhZ3MpKSB7XFxuMTAxNDpcXHRhcHBlbmQ6XFxuMTAxNTpcXHRcXHRcXHR3cV9saXN0X2FkZF90YWlsKFxcdTAwMjZ3b3JrLVxcdTAwM2VsaXN0LCBcXHUwMDI2YWNjdC1cXHUwMDNld29ya19saXN0KTtcXG4xMDE2OlxcdFxcdFxcdHJldHVybjtcXG4xMDE3OlxcdFxcdH1cXG4xMDE4OlxcdFxcbjEwMTk6XFx0XFx0aGFzaCA9IF9faW9fZ2V0X3dvcmtfaGFzaCh3b3JrX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MTguNDg4ODExMTQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyODIyNjg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgaW9fd3Ffd29ya2VyX2NhbmNlbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjayBkb3duIHRoZSBgaW9fd3Ffd29ya2VyX2NhbmNlbGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBJL08gY29tcGxldGlvbiBxdWV1ZSBmcmFtZXdvcmsuIEl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gaGFuZGxpbmcgdGFzayBjYW5jZWxsYXRpb24gb3IgYWJvcnRzIHdpdGhpbiB0aGUgYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkZXRlcm1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGgsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyB0cmlnZ2VyZWQuIElzIGl0IGNhbGxlZCBkaXJlY3RseSwgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uPyBJcyBpdCBpbnZvbHZlZCBpbiBjbGVhbnVwLCByZXNvdXJjZSByZWxlYXNlLCBvciBwZXJoYXBzIHNpZ25hbGluZyB0byBvdGhlciB0aHJlYWRzPyBJ4oCZbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCByYWNlIGNvbmRpdGlvbnMgYW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgc3luY2hyb25pemF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBJL08gY29tcGxldGlvbnMuIEkgc3VzcGVjdCBpdCdzIGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGNhbmNlbGxhdGlvbiBvZiB3b3JrIGl0ZW1zIHRoZW1zZWx2ZXMgb3IgdGhlIHByZXZlbnRpb24gb2YgZnVydGhlciBwcm9jZXNzaW5nIG9uIGJlaGFsZiBvZiBhIGdpdmVuIGNhbmNlbGVkIHJlcXVlc3QuIEtub3dpbmcgdGhlIHNwZWNpZmljIGRldmljZSBkcml2ZXIgaXQgdG91Y2hlcyB1cG9uIHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHQgaW4gd2hhdCB0aGUgaW50ZW50IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OToyMy43NzEwODM1NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODEyNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX3dvcmtlcl9jYW5jZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9MTA4Nz12b2lkIGlvX3dxX2hhc2hfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqdmFsKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDk0LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTA5NTpzdGF0aWMgYm9vbCBfX2lvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxcbmlvX3VyaW5nL2lvLXdxLmMtMTA5Ni1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTExMDctXFxuaW9fdXJpbmcvaW8td3EuYzoxMTA4OnN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxcbmlvX3VyaW5nL2lvLXdxLmMtMTEwOS17XFxuLS1cXG5pb191cmluZy9pby13cS5jLTExMTYtXFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2d29ya2VyLVxcdTAwM2Vsb2NrKTtcXG5pb191cmluZy9pby13cS5jOjExMTc6XFx0aWYgKF9faW9fd3Ffd29ya2VyX2NhbmNlbCh3b3JrZXIsIG1hdGNoLCB3b3JrZXItXFx1MDAzZWN1cl93b3JrKSlcXG5pb191cmluZy9pby13cS5jLTExMTgtXFx0XFx0bWF0Y2gtXFx1MDAzZW5yX3J1bm5pbmcrKztcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTE4ND1zdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTExODktXFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2YWNjdC1cXHUwMDNld29ya2Vyc19sb2NrKTtcXG5pb191cmluZy9pby13cS5jOjExOTA6XFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE5MS1cXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjIzLjgxNjkwMTIyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTY0NTYwMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGlvX3VyaW5nL2lvLXdxLmM6IExpbmVzIDEwOTUtMTEzMCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBsaW5lcyAxMDk1IHRocm91Z2ggMTEzMCBvZiBgaW9fdXJpbmcvaW8td3EuY2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgaW9fd3Egc3Vic3lzdGVtLCBsaWtlbHkgZm9jdXNpbmcgb24gc29tZSBhc3BlY3Qgb2Ygd29yayBxdWV1ZSBtYW5hZ2VtZW50IG9yIGNvbXBsZXRpb24gaGFuZGxpbmcuIFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LCBidXQganVzdCBiYXNlZCBvbiB0aGUgbG9jYXRpb24sIEknZCBhbnRpY2lwYXRlIHRoaXMgY29kZSBpcyBpbnZvbHZlZCBpbiBxdWV1aW5nIG9yIHJldHJpZXZpbmcgdGFza3MgZm9yIG9mZmxvYWQgdG8gYSB3b3JrZXIgdGhyZWFkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBzdWNoIGFzIHNwaW5sb2NrcyBvciBtdXRleGVzLCBiZWNhdXNlIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhIHNoYXJlZCByZXNvdXJjZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgcHJvdGVjdGlvbi4gVGhlIGNvZGUgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBzdWJtaXR0aW5nIHdvcmsgdG8gdGhlIGlvX3dxLCBvciBoYW5kbGluZyBjb21wbGV0aW9ucy4gR2l2ZW4gdGhlIHJhbmdlLCBpdCBjb3VsZCBiZSBhIHNtYWxsIGZ1bmN0aW9uIG9yIHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgY29tcGxleCBmdW5jdGlvbi4gSSBhbnRpY2lwYXRlIGVuY291bnRlcmluZyBjaGVja3MgZm9yIGVycm9yIGNvbmRpdGlvbnMsIHN1Y2ggYXMgdGhlIHdvcmtlciB0aHJlYWQgbm90IGJlaW5nIGF2YWlsYWJsZSBvciBleGNlZWRpbmcgYSBxdWV1ZSBzaXplLCB3aGljaCBzaG91bGQgcHJvYmFibHkgaW52b2x2ZSBzb21lIGZvcm0gb2YgYmFja29mZiBvciByZXRyeSBsb2dpYy4gVW5kZXJzdGFuZGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSB3aWxsIGJlIGNydWNpYWwgaW4gZ2F1Z2luZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBiZSB3YXJ5IG9mIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBpZiB0aGUgY29kZSBoYW5kbGVzIGludGVycnVwdHMgdGhhdCBtaWdodCBiZSB0cmlnZ2VyZWQgdG8gaGFuZGxlIEkvTyBjb21wbGV0aW9uLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OToyNi43ODE0NjQxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdHN0YXRpYyBib29sIF9faW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsXFxuMTA5NjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gsXFxuMTA5NzpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb193cV93b3JrICp3b3JrKVxcbjEwOTg6XFx0e1xcbjEwOTk6XFx0XFx0aWYgKHdvcmsgXFx1MDAyNlxcdTAwMjYgbWF0Y2gtXFx1MDAzZWZuKHdvcmssIG1hdGNoLVxcdTAwM2VkYXRhKSkge1xcbjExMDA6XFx0XFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ0FOQ0VMLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbjExMDE6XFx0XFx0XFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXFx1MDAzZXRhc2spO1xcbjExMDI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTEwMzpcXHRcXHR9XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0c3RhdGljIGJvb2wgaW9fd3Ffd29ya2VyX2NhbmNlbChzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXFxuMTEwOTpcXHR7XFxuMTExMDpcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoID0gZGF0YTtcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0LypcXG4xMTEzOlxcdFxcdCAqIEhvbGQgdGhlIGxvY2sgdG8gYXZvaWQgLVxcdTAwM2VjdXJfd29yayBnb2luZyBvdXQgb2Ygc2NvcGUsIGNhbGxlclxcbjExMTQ6XFx0XFx0ICogbWF5IGRlcmVmZXJlbmNlIHRoZSBwYXNzZWQgaW4gd29yay5cXG4xMTE1OlxcdFxcdCAqL1xcbjExMTY6XFx0XFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2d29ya2VyLVxcdTAwM2Vsb2NrKTtcXG4xMTE3OlxcdFxcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVxcdTAwM2VjdXJfd29yaykpXFxuMTExODpcXHRcXHRcXHRtYXRjaC1cXHUwMDNlbnJfcnVubmluZysrO1xcbjExMTk6XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZ3b3JrZXItXFx1MDAzZWxvY2spO1xcbjExMjA6XFx0XFxuMTEyMTpcXHRcXHRyZXR1cm4gbWF0Y2gtXFx1MDAzZW5yX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgIW1hdGNoLVxcdTAwM2VjYW5jZWxfYWxsO1xcbjExMjI6XFx0fVxcbjExMjM6XFx0XFxuMTEyNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW9fd3FfcmVtb3ZlX3BlbmRpbmcoc3RydWN0IGlvX3dxICp3cSxcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbjExMjY6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb193cV93b3JrICp3b3JrLFxcbjExMjc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb193cV93b3JrX25vZGUgKnByZXYpXFxuMTEyODpcXHR7XFxuMTEyOTpcXHRcXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGlvX2dldF93b3JrX2hhc2god29yayk7XFxuMTEzMDpcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqcHJldl93b3JrID0gTlVMTDtcXG4xMTMxOlxcdFxcbjExMzI6XFx0XFx0aWYgKGlvX3dxX2lzX2hhc2hlZCh3b3JrKSBcXHUwMDI2XFx1MDAyNiB3b3JrID09IHdxLVxcdTAwM2VoYXNoX3RhaWxbaGFzaF0pIHtcXG4xMTMzOlxcdFxcdFxcdGlmIChwcmV2KVxcbjExMzQ6XFx0XFx0XFx0XFx0cHJldl93b3JrID0gY29udGFpbmVyX29mKHByZXYsIHN0cnVjdCBpb193cV93b3JrLCBsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MjYuNzgxNTk5MDQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyMjY3OTYzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyAvIGlvLXdxIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgY2FuY2VsbGF0aW9uIG9mIHF1ZXVlZCB3b3JrLiBUaGUga2V5IGlzIGluIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBhY2NvdW50cywgd2hpY2ggYXJlIGVpdGhlciBib3VuZCBvciB1bmJvdW5kZWQgKGBJT19XUV9BQ0NUX0JPVU5EYCBhbmQgYElPX1dRX0FDQ1RfVU5CT1VORGApLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBldmVuIGlmIGEgbWF0Y2ggd2FzIGZvdW5kIGZvciBjYW5jZWxsYXRpb24gd2l0aGluIGFuIGFjY291bnQsIHRoZSBjb2RlIHdvdWxkIGl0ZXJhdGUgdGhyb3VnaCAqYWxsKiBhY2NvdW50cyAodGhlIGxvb3AgYGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspYCkuIE5vdywgd2l0aCB0aGUgY2hhbmdlcywgdGhlIGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJldHVybnMgdHJ1ZSBpZiBgIW1hdGNoLVx1MDAzZWNhbmNlbF9hbGxgIGFuZCBhIHJ1bm5pbmcgd29yayBpcyBtYXRjaGVkLiBDcml0aWNhbGx5LCBpZiBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCByZXR1cm5zIHRydWUsIHRoZSBtYWluIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYCBmdW5jdGlvbiBicmVha3MgaXRzIGxvb3AgKHRoZSBgaWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpIGJyZWFrO2ApLiBUaGlzIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBlYXJseS1leGl0IGNvbmRpdGlvbiBiYXNlZCBvbiB0aGUgZmlyc3QgbWF0Y2guXG5cblRoZSBjb2RlIGNoYW5nZXMgYXJlIHN1YnRsZSwgYnV0IHRoZXkgcmVwcmVzZW50IGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gaW4gdGhlIGlvX3VyaW5nIC8gaW8td3EgaW1wbGVtZW50YXRpb24uIFRoZSBgaW9fd3Ffd29ya2VyX2NhbmNlbGAgZnVuY3Rpb24gaXRzZWxmIGlzIHRoZSBjb3JlIG9mIHRoaXMgbG9naWMuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSByZXR1cm4gdmFsdWVzIGFzIHNpZ25pZmljYW50OiBpZiBgbWF0Y2gtXHUwMDNlY2FuY2VsX2FsbGAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2U7IGlmIGl0J3MgZmFsc2UsIGFuZCBhIHdvcmtlciBtYXRjaGVzLCBpdCByZXR1cm5zIHRydWUsIGluY3JlbWVudGluZyBgbWF0Y2gtXHUwMDNlbnJfcnVubmluZ2AuXG5cbk5vdywgY29uc2lkZXJpbmcgZnV6emluZywgbGV0J3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgcGFydCBvZiBvbmUgb2YgdGhlIG1vc3QgZnV6emVkIGFuZCBjcml0aWNhbCBzdWJzeXN0ZW1zIGluIExpbnV4ISBUaGUgcGF0Y2ggaXMgYWx0ZXJpbmcgdGhlIGFsZ29yaXRobSBmbG93IG9mIHdvcmsgY2FuY2VsbGF0aW9uLiBJbiB0aGUgY29udGV4dCBvZiB0aGUgd29ydGgtZnV6emluZyBwb3NpdGl2ZSBjcml0ZXJpYSwgdGhpcyBwYXRjaCBkZWZpbml0aXZlbHkgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgXCJsb2dpYyBtb2RpZmljYXRpb25zIGluIC4uLiBjb3JlIHN1YnN5c3RlbXNcIiBhbmQgXCJyZXN0cnVjdHVyaW5nIG9mIC4uLiBhbGdvcml0aG0gZmxvd3MuXCJcblxuaW9fdXJpbmcgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIGNhbiB1c2UgdGhlIHN0YW5kYXJkIHN5c2NhbGxzIGBpb191cmluZ19zZXR1cGAsIGBpb191cmluZ19lbnRlcmAsIGFuZCBgaW9fdXJpbmdfcmVnaXN0ZXJgIHRvIGV4ZXJjaXNlIHRoaXMgY29kZS4gU3l6a2FsbGVyLCBpbiBwYXJ0aWN1bGFyLCBoYXMgZXh0ZW5zaXZlIGNvdmVyYWdlIG9mIGlvX3VyaW5nLiBUaGlzIG1ha2VzIHRoaXMgcGF0Y2ggYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUbyBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgdGhlIGdpdCBsb2cgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIHJhdGlvbmFsZSBhbmQgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MzUuMDA4Mzk4MDA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg2MDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb193cV9jYW5jZWxfcnVubmluZ193b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTExODQ9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk0LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTE5NTpzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXFxuaW9fdXJpbmcvaW8td3EuYy0xMTk2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjA3PWVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjMyLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIzMzpcXHRpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHdxLCBcXHUwMDI2bWF0Y2gpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNC1cXHRpZiAobWF0Y2gubnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiAhbWF0Y2guY2FuY2VsX2FsbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6MzUuMDU0MjY1ODkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MzUwMzI0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpb193cV9jYW5jZWxfY2JgIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgaW9fd3FfY2FuY2VsX2NiYC4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgYmVpbmcgaW52b2tlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgYSBxdWljayBzZWFyY2gsIHByb2JhYmx5IHVzaW5nIHNvbWV0aGluZyBsaWtlIGBncmVwYCBvciBgY3Njb3BlYCBkZXBlbmRpbmcgb24gdGhlIHByb2plY3Qgc2V0dXAsIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgcGFzc2luZyBpbnRvIGl0LCBjb250ZXh0LXdpc2UsIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlLiBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IGl0IGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgSS9PIGNvbXBsZXRpb24gZnJhbWV3b3JrLiBBcmUgd2UgdGFsa2luZyBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRocmVhZCBwb29scywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjYWxsIGNvbnRleHQgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSdtIGxvb2tpbmcgZm9yIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMsIHBlcmhhcHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBtYWNybyBleHBhbnNpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIEkvTyB3b3JrIHF1ZXVlIGl0c2VsZi4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIEkvTyBpcyBzY2hlZHVsZWQgYW5kIGNhbmNlbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTozNy40ODkzMDA1OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODU5NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvY2FuY2VsLmM9Nzg9c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtODgtXFx0YWxsID0gY2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19BU1lOQ19DQU5DRUxfQUxMfElPUklOR19BU1lOQ19DQU5DRUxfQU5ZKTtcXG5pb191cmluZy9jYW5jZWwuYzo4OTpcXHRjYW5jZWxfcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXFx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY2IsIGNkLCBhbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTkwLVxcdHN3aXRjaCAoY2FuY2VsX3JldCkge1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NDg5PXN0YXRpYyBfX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX2lvd3Eoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MDUtXFx0XFx0XFx0Y29udGludWU7XFxuaW9fdXJpbmcvY2FuY2VsLmM6NTA2OlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF9jdHhfY2IsIGN0eCwgdHJ1ZSk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNTA3LVxcdFxcdHJldCB8PSAoY3JldCAhPSBJT19XUV9DQU5DRUxfTk9URk9VTkQpO1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01MzktXFx0XFx0ICovXFxuaW9fdXJpbmcvY2FuY2VsLmM6NTQwOlxcdFxcdGNyZXQgPSBpb193cV9jYW5jZWxfY2IodGN0eC1cXHUwMDNlaW9fd3EsIGlvX2NhbmNlbF90YXNrX2NiLFxcbmlvX3VyaW5nL2NhbmNlbC5jLTU0MS1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNhbmNlbCwgdHJ1ZSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExOTU9c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjA2LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIwNzplbnVtIGlvX3dxX2NhbmNlbCBpb193cV9jYW5jZWxfY2Ioc3RydWN0IGlvX3dxICp3cSwgd29ya19jYW5jZWxfZm4gKmNhbmNlbCxcXG5pb191cmluZy9pby13cS5jLTEyMDgtXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhLCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9pby13cS5oPTY0PXR5cGVkZWYgYm9vbCAod29ya19jYW5jZWxfZm4pKHN0cnVjdCBpb193cV93b3JrICosIHZvaWQgKik7XFxuaW9fdXJpbmcvaW8td3EuaC02NS1cXG5pb191cmluZy9pby13cS5oOjY2OmVudW0gaW9fd3FfY2FuY2VsIGlvX3dxX2NhbmNlbF9jYihzdHJ1Y3QgaW9fd3EgKndxLCB3b3JrX2NhbmNlbF9mbiAqY2FuY2VsLFxcbmlvX3VyaW5nL2lvLXdxLmgtNjctXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSwgYm9vbCBjYW5jZWxfYWxsKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjMwOT1zdGF0aWMgX19jb2xkIHZvaWQgaW9fcmluZ19leGl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMzQ4LVxcdFxcdFxcdGlmICh0c2sgXFx1MDAyNlxcdTAwMjYgdHNrLVxcdTAwM2Vpb191cmluZyBcXHUwMDI2XFx1MDAyNiB0c2stXFx1MDAzZWlvX3VyaW5nLVxcdTAwM2Vpb193cSlcXG5pb191cmluZy9pb191cmluZy5jOjIzNDk6XFx0XFx0XFx0XFx0aW9fd3FfY2FuY2VsX2NiKHRzay1cXHUwMDNlaW9fdXJpbmctXFx1MDAzZWlvX3dxLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjM1MC1cXHRcXHRcXHRcXHRcXHRcXHRpb19jYW5jZWxfY3R4X2NiLCBjdHgsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTozNy41MzcxNjcxMDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIwMDU4MDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBpb193cV9jYW5jZWxfY2IqKlxuXG5Pa2F5LCBzbyBgaW9fd3FfY2FuY2VsX2NiYCBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCwgYW5kIGl0J3MgdHJpZ2dlcmVkIGZyb20gYSBjb3VwbGUgb2YgaW1wb3J0YW50IGxvY2F0aW9ucy4gUHJpbWFyaWx5LCBpdCdzIGNhbGxlZCB3aXRoaW4gYGlvX2FzeW5jX2NhbmNlbF9vbmVgLCB3aGljaCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgSU9SSU5HX09QX0FTWU5DX0NBTkNFTGAgb3BlcmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBtZWNoYW5pc20gZm9yIGNhbmNlbGxpbmcgYXN5bmNocm9ub3VzIEkvTyByZXF1ZXN0cy4gQnV0LCBpdCdzIGFsc28gdXNlZCBkdXJpbmcgY29udGV4dCBleGl0IGFuZCB3aGVuIHJlcXVlc3RzIGFyZSBleHBsaWNpdGx5IGNhbmNlbGxlZCB0aHJvdWdoIG90aGVyIG1lYW5zLiBUaGUgZmFjdCB0aGF0IGl0J3MgaGFuZGxpbmcgY2FuY2VsbGF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlcyBtYWtlcyBpdCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIEkvTyByaW5nIG1hbmFnZW1lbnQuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLCBsZXQncyBkaXZlIGludG8gYGlvX2FzeW5jX2NhbmNlbF9vbmVgLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGNvb3JkaW5hdGluZyB3aXRoIGBpb193cV9jYW5jZWxfY2JgIGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGJleW9uZCB0aGUgb2J2aW91cyBgQVNZTkNfQ0FOQ0VMYCBwYXRoLiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBpbXBsaWNhdGlvbnMgaGVyZSBmb3IgcmVzb3VyY2UgY2xlYW51cCBhbmQgcHJldmVudGluZyBkb3VibGUtZnJlZXMsIHNvIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjM5LjczNzc1MDM2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvY2FuY2VsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0c3RhdGljIGJvb2wgaW9fY2FuY2VsX2NiKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxcbiAgNzE6XFx0e1xcbiAgNzI6XFx0XFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlvX2tpb2NiLCB3b3JrKTtcXG4gIDczOlxcdFxcdHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QgPSBkYXRhO1xcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRyZXR1cm4gaW9fY2FuY2VsX3JlcV9tYXRjaChyZXEsIGNkKTtcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdFxcbiAgNzg6XFx0c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbiAgNzk6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRlbnVtIGlvX3dxX2NhbmNlbCBjYW5jZWxfcmV0O1xcbiAgODI6XFx0XFx0aW50IHJldCA9IDA7XFxuICA4MzpcXHRcXHRib29sIGFsbDtcXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0aWYgKCF0Y3R4IHx8ICF0Y3R4LVxcdTAwM2Vpb193cSlcXG4gIDg2OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRhbGwgPSBjZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX0FTWU5DX0NBTkNFTF9BTEx8SU9SSU5HX0FTWU5DX0NBTkNFTF9BTlkpO1xcbiAgODk6XFx0XFx0Y2FuY2VsX3JldCA9IGlvX3dxX2NhbmNlbF9jYih0Y3R4LVxcdTAwM2Vpb193cSwgaW9fY2FuY2VsX2NiLCBjZCwgYWxsKTtcXG4gIDkwOlxcdFxcdHN3aXRjaCAoY2FuY2VsX3JldCkge1xcbiAgOTE6XFx0XFx0Y2FzZSBJT19XUV9DQU5DRUxfT0s6XFxuICA5MjpcXHRcXHRcXHRyZXQgPSAwO1xcbiAgOTM6XFx0XFx0XFx0YnJlYWs7XFxuICA5NDpcXHRcXHRjYXNlIElPX1dRX0NBTkNFTF9SVU5OSU5HOlxcbiAgOTU6XFx0XFx0XFx0cmV0ID0gLUVBTFJFQURZO1xcbiAgOTY6XFx0XFx0XFx0YnJlYWs7XFxuICA5NzpcXHRcXHRjYXNlIElPX1dRX0NBTkNFTF9OT1RGT1VORDpcXG4gIDk4OlxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuICA5OTpcXHRcXHRcXHRicmVhaztcXG4gMTAwOlxcdFxcdH1cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuIDEwNjpcXHRcXHRcXHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBjZC1cXHUwMDNlY3R4O1xcbiAxMDk6XFx0XFx0aW50IHJldDtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0V0FSTl9PTl9PTkNFKCFpb193cV9jdXJyZW50X2lzX3dvcmtlcigpIFxcdTAwMjZcXHUwMDI2IHRjdHggIT0gY3VycmVudC1cXHUwMDNlaW9fdXJpbmcpO1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKHRjdHgsIGNkKTtcXG4gMTE0OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjM5LjczNzg2NTQ3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDYzNDEwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIGlvX3VyaW5nL2lvLXdxLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaW9fdXJpbmcvaW8td3EuY2AgZmlsZSBhbmQgZmlndXJlIG91dCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgZ292ZXJuaW5nIGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZWl0aGVyIHRoZSBgaW9fdXJpbmcvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseSwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgb3IgdGhlIGBpb191cmluZy9NYWtlZmlsZWAg4oCTIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIHNlZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBiYXNlZCBvbiBLY29uZmlnIHN5bWJvbHMuIExldCdzIHNlZSB3aGF0IGNsdWVzIHdlIGNhbiBmaW5kIGluIGVpdGhlciBvZiB0aG9zZSBsb2NhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gdW5jb3ZlciB0aGUgcmVsZXZhbnQgc3ltYm9scyBxdWlja2x5OyB0aGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo0NC44MDEyNzg1NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgaW9fdXJpbmdcXG4gICA0OlxcdFxcbiAgIDU6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9VUklOR1xcbiAgIDY6XFx0R0NPVl9QUk9GSUxFIDo9IHlcXG4gICA3OlxcdGVuZGlmXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19JT19VUklORylcXHRcXHQrPSBpb191cmluZy5vIG9wZGVmLm8ga2J1Zi5vIHJzcmMubyBub3RpZi5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdFxcdFxcdFxcdHRjdHgubyBmaWxldGFibGUubyBydy5vIHBvbGwubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHRcXHR0dy5vIHdhaXQubyBldmVudGZkLm8gdXJpbmdfY21kLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0XFx0b3BlbmNsb3NlLm8gc3Fwb2xsLm8geGF0dHIubyBub3AubyBcXFxcXFxuICAxMzpcXHRcXHRcXHRcXHRcXHRcXHRmcy5vIHNwbGljZS5vIHN5bmMubyBtc2dfcmluZy5vIFxcXFxcXG4gIDE0OlxcdFxcdFxcdFxcdFxcdFxcdGFkdmlzZS5vIG9wZW5jbG9zZS5vIHN0YXR4Lm8gdGltZW91dC5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdFxcdFxcdFxcdGNhbmNlbC5vIHdhaXRpZC5vIHJlZ2lzdGVyLm8gXFxcXFxcbiAgMTY6XFx0XFx0XFx0XFx0XFx0XFx0dHJ1bmNhdGUubyBtZW1tYXAubyBhbGxvY19jYWNoZS5vIFxcXFxcXG4gIDE3OlxcdFxcdFxcdFxcdFxcdFxcdHF1ZXJ5Lm8gbG9vcC5vXFxuICAxODpcXHRcXG4gIDE5OlxcdG9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVxcdCs9IHpjcngub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX0lPX1dRKVxcdFxcdCs9IGlvLXdxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6NDQuODAxNDExNjY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNTkyOTQ3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSB0YXNrIGlzIHByZXR0eSBjbGVhciwgYW5kIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIHRoZSBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpb191cmluZywgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGNvbnRyb2xsYWJsZSwgd2hhdCBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZC4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBlc3NlbnRpYWxseSBiZSB0aGUgcm9hZG1hcCBmb3IgaG93IHRoaXMgbW9kdWxlIGJlaGF2ZXMsIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQgYW5kIHNlZSB3aGF0IHdlIGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo0OC45NjA3MDk5MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzUzNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPX1dRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG5pb191cmluZy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbmlvX3VyaW5nL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19GVVRFWClcXHRcXHQrPSBmdXRleC5vXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz03OD1zdGF0aWMgaW50IGlvX2FzeW5jX2NhbmNlbF9vbmUoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy05MC1cXHRzd2l0Y2ggKGNhbmNlbF9yZXQpIHtcXG5pb191cmluZy9jYW5jZWwuYzo5MTpcXHRjYXNlIElPX1dRX0NBTkNFTF9PSzpcXG5pb191cmluZy9jYW5jZWwuYy05Mi1cXHRcXHRyZXQgPSAwO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTkzLVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjk0OlxcdGNhc2UgSU9fV1FfQ0FOQ0VMX1JVTk5JTkc6XFxuaW9fdXJpbmcvY2FuY2VsLmMtOTUtXFx0XFx0cmV0ID0gLUVBTFJFQURZO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTk2LVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjk3OlxcdGNhc2UgSU9fV1FfQ0FOQ0VMX05PVEZPVU5EOlxcbmlvX3VyaW5nL2NhbmNlbC5jLTk4LVxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz00ODk9c3RhdGljIF9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfaW93cShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTUwNi1cXHRcXHRjcmV0ID0gaW9fd3FfY2FuY2VsX2NiKHRjdHgtXFx1MDAzZWlvX3dxLCBpb19jYW5jZWxfY3R4X2NiLCBjdHgsIHRydWUpO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjUwNzpcXHRcXHRyZXQgfD0gKGNyZXQgIT0gSU9fV1FfQ0FOQ0VMX05PVEZPVU5EKTtcXG5pb191cmluZy9jYW5jZWwuYy01MDgtXFx0fVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9NTE1PV9fY29sZCBib29sIGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy01NDEtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjYW5jZWwsIHRydWUpO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjU0MjpcXHRcXHRyZXQgfD0gKGNyZXQgIT0gSU9fV1FfQ0FOQ0VMX05PVEZPVU5EKTtcXG5pb191cmluZy9jYW5jZWwuYy01NDMtXFx0fVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0zNz1lbnVtIHtcXG5pb191cmluZy9pby13cS5jOjM4OlxcdElPX1dRX0JJVF9FWElUXFx0XFx0PSAwLFxcdC8qIHdxIGV4aXRpbmcgKi9cXG5pb191cmluZy9pby13cS5jOjM5OlxcdElPX1dRX0JJVF9FWElUX09OX0lETEVcXHQ9IDEsXFx0LyogYWxsb3cgYWxsIHdvcmtlcnMgdG8gZXhpdCBvbiBpZGxlICovXFxuaW9fdXJpbmcvaW8td3EuYy00MC19O1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz00OT1zdHJ1Y3QgaW9fd29ya2VyIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzMtI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjRcXG5pb191cmluZy9pby13cS5jOjc0OiNkZWZpbmUgSU9fV1FfSEFTSF9PUkRFUlxcdDZcXG5pb191cmluZy9pby13cS5jLTc1LSNlbHNlXFxuaW9fdXJpbmcvaW8td3EuYzo3NjojZGVmaW5lIElPX1dRX0hBU0hfT1JERVJcXHQ1XFxuaW9fdXJpbmcvaW8td3EuYy03Ny0jZW5kaWZcXG5pb191cmluZy9pby13cS5jLTc4LVxcbmlvX3VyaW5nL2lvLXdxLmM6Nzk6I2RlZmluZSBJT19XUV9OUl9IQVNIX0JVQ0tFVFNcXHQoMXUgXFx1MDAzY1xcdTAwM2MgSU9fV1FfSEFTSF9PUkRFUilcXG5pb191cmluZy9pby13cS5jLTgwLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDg9ZW51bSB7XFxuaW9fdXJpbmcvaW8td3EuYzoxMDk6XFx0SU9fV1FfQUNDVF9CT1VORCxcXG5pb191cmluZy9pby13cS5jOjExMDpcXHRJT19XUV9BQ0NUX1VOQk9VTkQsXFxuaW9fdXJpbmcvaW8td3EuYzoxMTE6XFx0SU9fV1FfQUNDVF9OUixcXG5pb191cmluZy9pby13cS5jLTExMi19O1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTc9c3RydWN0IGlvX3dxIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTI4LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTI5OlxcdHN0cnVjdCBpb193cV9hY2N0IGFjY3RbSU9fV1FfQUNDVF9OUl07XFxuaW9fdXJpbmcvaW8td3EuYy0xMzAtXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEzMi1cXG5pb191cmluZy9pby13cS5jOjEzMzpcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqaGFzaF90YWlsW0lPX1dRX05SX0hBU0hfQlVDS0VUU107XFxuaW9fdXJpbmcvaW8td3EuYy0xMzQtXFxuLS1cXG5pb191cmluZy9pby13cS5jPTE1Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2lvX2dldF93b3JrX2hhc2godW5zaWduZWQgaW50IHdvcmtfZmxhZ3MpXFxuaW9fdXJpbmcvaW8td3EuYy0xNTcte1xcbmlvX3VyaW5nL2lvLXdxLmM6MTU4OlxcdHJldHVybiB3b3JrX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIElPX1dRX0hBU0hfU0hJRlQ7XFxuaW9fdXJpbmcvaW8td3EuYy0xNTktfVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xNzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fd3FfYWNjdCAqaW9fZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSwgYm9vbCBib3VuZClcXG5pb191cmluZy9pby13cS5jLTE3OC17XFxuaW9fdXJpbmcvaW8td3EuYzoxNzk6XFx0cmV0dXJuIFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtib3VuZCA/IElPX1dRX0FDQ1RfQk9VTkQgOiBJT19XUV9BQ0NUX1VOQk9VTkRdO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTgwLX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTgyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX3dxX2FjY3QgKmlvX3dvcmtfZ2V0X2FjY3Qoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTg0LXtcXG5pb191cmluZy9pby13cS5jOjE4NTpcXHRyZXR1cm4gaW9fZ2V0X2FjY3Qod3EsICEod29ya19mbGFncyBcXHUwMDI2IElPX1dRX1dPUktfVU5CT1VORCkpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTg2LX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTk5PWJvb2wgaW9fd3Ffd29ya2VyX3N0b3BwZWQodm9pZClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMjA1LVxcbmlvX3VyaW5nL2lvLXdxLmM6MjA2OlxcdHJldHVybiB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndvcmtlci1cXHUwMDNld3EtXFx1MDAzZXN0YXRlKTtcXG5pb191cmluZy9pby13cS5jLTIwNy19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTM5MT1zdGF0aWMgYm9vbCBpb19xdWV1ZV93b3JrZXJfY3JlYXRlKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzk3LVxcdC8qIHJhY2VkIHdpdGggZXhpdCwganVzdCBpZ25vcmUgY3JlYXRlIGNhbGwgKi9cXG5pb191cmluZy9pby13cS5jOjM5ODpcXHRpZiAodGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpKVxcbmlvX3VyaW5nL2lvLXdxLmMtMzk5LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNDIwLVxcdFxcdCAqL1xcbmlvX3VyaW5nL2lvLXdxLmM6NDIxOlxcdFxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpXFxuaW9fdXJpbmcvaW8td3EuYy00MjItXFx0XFx0XFx0aW9fd3FfY2FuY2VsX3R3X2NyZWF0ZSh3cSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTYwMj1zdGF0aWMgdm9pZCBpb193b3JrZXJfaGFuZGxlX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTY0My1cXHRcXHRkbyB7XFxuaW9fdXJpbmcvaW8td3EuYzo2NDQ6XFx0XFx0XFx0Ym9vbCBkb19raWxsID0gdGVzdF9iaXQoSU9fV1FfQklUX0VYSVQsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtNjQ1LVxcdFxcdFxcdHN0cnVjdCBpb193cV93b3JrICpuZXh0X2hhc2hlZCwgKmxpbmtlZDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNjU0LVxcdFxcdFxcdGlmIChkb19raWxsIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvaW8td3EuYzo2NTU6XFx0XFx0XFx0ICAgICh3b3JrX2ZsYWdzIFxcdTAwMjYgSU9fV1FfV09SS19VTkJPVU5EKSlcXG5pb191cmluZy9pby13cS5jOjY1NjpcXHRcXHRcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW8td3EuYy02NTctXFx0XFx0XFx0cmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb19raW9jYiwgd29yayk7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTY5MD1zdGF0aWMgaW50IGlvX3dxX3dvcmtlcih2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy03MDMtXFxuaW9fdXJpbmcvaW8td3EuYzo3MDQ6XFx0d2hpbGUgKCF0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpIHtcXG5pb191cmluZy9pby13cS5jLTcwNS1cXHRcXHRsb25nIHJldDtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzI0LVxcdFxcdGlmICgobGFzdF90aW1lb3V0IFxcdTAwMjZcXHUwMDI2IChleGl0X21hc2sgfHwgYWNjdC1cXHUwMDNlbnJfd29ya2VycyBcXHUwMDNlIDEpKSB8fFxcbmlvX3VyaW5nL2lvLXdxLmM6NzI1OlxcdFxcdCAgICB0ZXN0X2JpdChJT19XUV9CSVRfRVhJVF9PTl9JRExFLCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKSkge1xcbmlvX3VyaW5nL2lvLXdxLmMtNzI2LVxcdFxcdFxcdGFjY3QtXFx1MDAzZW5yX3dvcmtlcnMtLTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtNzUwLVxcbmlvX3VyaW5nL2lvLXdxLmM6NzUxOlxcdGlmICh0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkgXFx1MDAyNlxcdTAwMjYgaW9fYWNjdF9ydW5fcXVldWUoYWNjdCkpXFxuaW9fdXJpbmcvaW8td3EuYy03NTItXFx0XFx0aW9fd29ya2VyX2hhbmRsZV93b3JrKGFjY3QsIHdvcmtlcik7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTk2ND1zdGF0aWMgdm9pZCBpb193cV9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTY3LXtcXG5pb191cmluZy9pby13cS5jOjk2ODpcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcXG5pb191cmluZy9pby13cS5jLTk2OS1cXHRcXHRpZiAoaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoXFx1MDAyNndxLVxcdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9OTgwPXZvaWQgaW9fd3Ffc2V0X2V4aXRfb25faWRsZShzdHJ1Y3QgaW9fd3EgKndxLCBib29sIGVuYWJsZSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTg1LVxcdGlmICghZW5hYmxlKSB7XFxuaW9fdXJpbmcvaW8td3EuYzo5ODY6XFx0XFx0Y2xlYXJfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtOTg3LVxcdFxcdHJldHVybjtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtOTg5LVxcbmlvX3VyaW5nL2lvLXdxLmM6OTkwOlxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KElPX1dRX0JJVF9FWElUX09OX0lETEUsIFxcdTAwMjZ3cS1cXHUwMDNlc3RhdGUpKVxcbmlvX3VyaW5nL2lvLXdxLmMtOTkxLVxcdFxcdHJldHVybjtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9OTk4PXN0YXRpYyB2b2lkIGlvX3J1bl9jYW5jZWwoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHN0cnVjdCBpb193cSAqd3EpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwMDAtXFx0ZG8ge1xcbmlvX3VyaW5nL2lvLXdxLmM6MTAwMTpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW8td3EuYy0xMDAyLVxcdFxcdGlvX3dxX3N1Ym1pdF93b3JrKHdvcmspO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMDMzPXZvaWQgaW9fd3FfZW5xdWV1ZShzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA0Ny1cXHQgKi9cXG5pb191cmluZy9pby13cS5jOjEwNDg6XFx0aWYgKHRlc3RfYml0KElPX1dRX0JJVF9FWElULCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKSB8fFxcbmlvX3VyaW5nL2lvLXdxLmM6MTA0OTpcXHQgICAgKHdvcmtfZmxhZ3MgXFx1MDAyNiBJT19XUV9XT1JLX0NBTkNFTCkpIHtcXG5pb191cmluZy9pby13cS5jLTEwNTAtXFx0XFx0aW9fcnVuX2NhbmNlbCh3b3JrLCB3cSk7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEwNjItXFxuaW9fdXJpbmcvaW8td3EuYzoxMDYzOlxcdGlmIChkb19jcmVhdGUgXFx1MDAyNlxcdTAwMjYgKCh3b3JrX2ZsYWdzIFxcdTAwMjYgSU9fV1FfV09SS19DT05DVVJSRU5UKSB8fFxcbmlvX3VyaW5nL2lvLXdxLmMtMTA2NC1cXHQgICAgIWF0b21pY19yZWFkKFxcdTAwMjZhY2N0LVxcdTAwM2Vucl9ydW5uaW5nKSkpIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTA4Nz12b2lkIGlvX3dxX2hhc2hfd29yayhzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaywgdm9pZCAqdmFsKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMDkwLVxcbmlvX3VyaW5nL2lvLXdxLmM6MTA5MTpcXHRiaXQgPSBoYXNoX3B0cih2YWwsIElPX1dRX0hBU0hfT1JERVIpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTA5MjpcXHRhdG9taWNfb3IoSU9fV1FfV09SS19IQVNIRUQgfCAoYml0IFxcdTAwM2NcXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTA5My19XFxuLS1cXG5pb191cmluZy9pby13cS5jPTEwOTU9c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA5OS1cXHRpZiAod29yayBcXHUwMDI2XFx1MDAyNiBtYXRjaC1cXHUwMDNlZm4od29yaywgbWF0Y2gtXFx1MDAzZWRhdGEpKSB7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTAwOlxcdFxcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXFx1MDAyNndvcmstXFx1MDAzZWZsYWdzKTtcXG5pb191cmluZy9pby13cS5jLTExMDEtXFx0XFx0X19zZXRfbm90aWZ5X3NpZ25hbCh3b3JrZXItXFx1MDAzZXRhc2spO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTY4PXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9wZW5kaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE3Mi1yZXRyeTpcXG5pb191cmluZy9pby13cS5jOjExNzM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTE3NC1cXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMTk1PXN0YXRpYyB2b2lkIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxICp3cSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTE5OS1cXG5pb191cmluZy9pby13cS5jOjEyMDA6XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuaW9fdXJpbmcvaW8td3EuYy0xMjAxLVxcdFxcdGlmIChpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoXFx1MDAyNndxLVxcdTAwM2VhY2N0W2ldLCBtYXRjaCkpXFxuLS1cXG5pb191cmluZy9pby13cS5jPTEyMDc9ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuLS1cXG5pb191cmluZy9pby13cS5jLTEyMzAtXFx0aWYgKG1hdGNoLm5yX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjYgIW1hdGNoLmNhbmNlbF9hbGwpXFxuaW9fdXJpbmcvaW8td3EuYzoxMjMxOlxcdFxcdHJldHVybiBJT19XUV9DQU5DRUxfT0s7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjMyLVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjM0LVxcdGlmIChtYXRjaC5ucl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC5jYW5jZWxfYWxsKVxcbmlvX3VyaW5nL2lvLXdxLmM6MTIzNTpcXHRcXHRyZXR1cm4gSU9fV1FfQ0FOQ0VMX1JVTk5JTkc7XFxuaW9fdXJpbmcvaW8td3EuYy0xMjM2LVxcbmlvX3VyaW5nL2lvLXdxLmMtMTIzNy1cXHRpZiAobWF0Y2gubnJfcnVubmluZylcXG5pb191cmluZy9pby13cS5jOjEyMzg6XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9SVU5OSU5HO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTIzOS1cXHRpZiAobWF0Y2gubnJfcGVuZGluZylcXG5pb191cmluZy9pby13cS5jOjEyNDA6XFx0XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9PSztcXG5pb191cmluZy9pby13cS5jOjEyNDE6XFx0cmV0dXJuIElPX1dRX0NBTkNFTF9OT1RGT1VORDtcXG5pb191cmluZy9pby13cS5jLTEyNDItfVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xMjQ0PXN0YXRpYyBpbnQgaW9fd3FfaGFzaF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMjUyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5pb191cmluZy9pby13cS5jOjEyNTM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTI1NC1cXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTI2Mz1zdHJ1Y3QgaW9fd3EgKmlvX3dxX2NyZWF0ZSh1bnNpZ25lZCBib3VuZGVkLCBzdHJ1Y3QgaW9fd3FfZGF0YSAqZGF0YSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTI4Mi1cXHRjcHVzZXRfY3B1c19hbGxvd2VkKGRhdGEtXFx1MDAzZXRhc2ssIHdxLVxcdTAwM2VjcHVfbWFzayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMjgzOlxcdHdxLVxcdTAwM2VhY2N0W0lPX1dRX0FDQ1RfQk9VTkRdLm1heF93b3JrZXJzID0gYm91bmRlZDtcXG5pb191cmluZy9pby13cS5jOjEyODQ6XFx0d3EtXFx1MDAzZWFjY3RbSU9fV1FfQUNDVF9VTkJPVU5EXS5tYXhfd29ya2VycyA9XFxuaW9fdXJpbmcvaW8td3EuYy0xMjg1LVxcdFxcdFxcdFxcdHRhc2tfcmxpbWl0KGN1cnJlbnQsIFJMSU1JVF9OUFJPQyk7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTEyODctXFx0d3EtXFx1MDAzZXdhaXQuZnVuYyA9IGlvX3dxX2hhc2hfd2FrZTtcXG5pb191cmluZy9pby13cS5jOjEyODg6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTI4OS1cXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTMyOD12b2lkIGlvX3dxX2V4aXRfc3RhcnQoc3RydWN0IGlvX3dxICp3cSlcXG5pb191cmluZy9pby13cS5jLTEzMjkte1xcbmlvX3VyaW5nL2lvLXdxLmM6MTMzMDpcXHRzZXRfYml0KElPX1dRX0JJVF9FWElULCBcXHUwMDI2d3EtXFx1MDAzZXN0YXRlKTtcXG5pb191cmluZy9pby13cS5jLTEzMzEtfVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0xNDA3PXZvaWQgaW9fd3FfcHV0X2FuZF9leGl0KHN0cnVjdCBpb193cSAqd3EpXFxuaW9fdXJpbmcvaW8td3EuYy0xNDA4LXtcXG5pb191cmluZy9pby13cS5jOjE0MDk6XFx0V0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChJT19XUV9CSVRfRVhJVCwgXFx1MDAyNndxLVxcdTAwM2VzdGF0ZSkpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQxMC1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MTQ4OT1pbnQgaW9fd3FfbWF4X3dvcmtlcnMoc3RydWN0IGlvX3dxICp3cSwgaW50ICpuZXdfY291bnQpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0OTEtXFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3Q7XFxuaW9fdXJpbmcvaW8td3EuYzoxNDkyOlxcdGludCBwcmV2W0lPX1dRX0FDQ1RfTlJdO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5My1cXHRpbnQgaTtcXG5pb191cmluZy9pby13cS5jLTE0OTQtXFxuaW9fdXJpbmcvaW8td3EuYzoxNDk1OlxcdEJVSUxEX0JVR19PTigoaW50KSBJT19XUV9BQ0NUX0JPVU5EICAgIT0gKGludCkgSU9fV1FfQk9VTkQpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTQ5NjpcXHRCVUlMRF9CVUdfT04oKGludCkgSU9fV1FfQUNDVF9VTkJPVU5EICE9IChpbnQpIElPX1dRX1VOQk9VTkQpO1xcbmlvX3VyaW5nL2lvLXdxLmM6MTQ5NzpcXHRCVUlMRF9CVUdfT04oKGludCkgSU9fV1FfQUNDVF9OUiAgICAgICE9IDIpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMTQ5OC1cXG5pb191cmluZy9pby13cS5jOjE0OTk6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKykge1xcbmlvX3VyaW5nL2lvLXdxLmMtMTUwMC1cXHRcXHRpZiAobmV3X2NvdW50W2ldIFxcdTAwM2UgdGFza19ybGltaXQoY3VycmVudCwgUkxJTUlUX05QUk9DKSlcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTUwMy1cXG5pb191cmluZy9pby13cS5jOjE1MDQ6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcXG5pb191cmluZy9pby13cS5jLTE1MDUtXFx0XFx0cHJldltpXSA9IDA7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTE1MDgtXFxuaW9fdXJpbmcvaW8td3EuYzoxNTA5OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspIHtcXG5pb191cmluZy9pby13cS5jLTE1MTAtXFx0XFx0YWNjdCA9IFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTUxOC1cXG5pb191cmluZy9pby13cS5jOjE1MTk6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcXG5pb191cmluZy9pby13cS5jLTE1MjAtXFx0XFx0bmV3X2NvdW50W2ldID0gcHJldltpXTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmlvX3VyaW5nL2lvLXdxLmg6MjojaWZuZGVmIElOVEVSTkFMX0lPX1dRX0hcXG5pb191cmluZy9pby13cS5oOjM6I2RlZmluZSBJTlRFUk5BTF9JT19XUV9IXFxuaW9fdXJpbmcvaW8td3EuaC00LVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD0xMD1lbnVtIHtcXG5pb191cmluZy9pby13cS5oOjExOlxcdElPX1dRX1dPUktfQ0FOQ0VMXFx0PSAxLFxcbmlvX3VyaW5nL2lvLXdxLmg6MTI6XFx0SU9fV1FfV09SS19IQVNIRURcXHQ9IDIsXFxuaW9fdXJpbmcvaW8td3EuaDoxMzpcXHRJT19XUV9XT1JLX1VOQk9VTkRcXHQ9IDQsXFxuaW9fdXJpbmcvaW8td3EuaDoxNDpcXHRJT19XUV9XT1JLX0NPTkNVUlJFTlRcXHQ9IDE2LFxcbmlvX3VyaW5nL2lvLXdxLmgtMTUtXFxuaW9fdXJpbmcvaW8td3EuaDoxNjpcXHRJT19XUV9IQVNIX1NISUZUXFx0PSAyNCxcXHQvKiB1cHBlciA4IGJpdHMgYXJlIHVzZWQgZm9yIGhhc2gga2V5ICovXFxuaW9fdXJpbmcvaW8td3EuaC0xNy19O1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuaD0xOT1lbnVtIGlvX3dxX2NhbmNlbCB7XFxuaW9fdXJpbmcvaW8td3EuaDoyMDpcXHRJT19XUV9DQU5DRUxfT0ssXFx0LyogY2FuY2VsbGVkIGJlZm9yZSBzdGFydGVkICovXFxuaW9fdXJpbmcvaW8td3EuaDoyMTpcXHRJT19XUV9DQU5DRUxfUlVOTklORyxcXHQvKiBmb3VuZCwgcnVubmluZywgYW5kIGF0dGVtcHRlZCBjYW5jZWxsZWQgKi9cXG5pb191cmluZy9pby13cS5oOjIyOlxcdElPX1dRX0NBTkNFTF9OT1RGT1VORCxcXHQvKiB3b3JrIG5vdCBmb3VuZCAqL1xcbmlvX3VyaW5nL2lvLXdxLmgtMjMtfTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmg9NTQ9c3RhdGljIGlubGluZSBib29sIF9faW9fd3FfaXNfaGFzaGVkKHVuc2lnbmVkIGludCB3b3JrX2ZsYWdzKVxcbmlvX3VyaW5nL2lvLXdxLmgtNTUte1xcbmlvX3VyaW5nL2lvLXdxLmg6NTY6XFx0cmV0dXJuIHdvcmtfZmxhZ3MgXFx1MDAyNiBJT19XUV9XT1JLX0hBU0hFRDtcXG5pb191cmluZy9pby13cS5oLTU3LX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmg9NjY9ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuLS1cXG5pb191cmluZy9pby13cS5oLTY4LVxcbmlvX3VyaW5nL2lvLXdxLmg6Njk6I2lmIGRlZmluZWQoQ09ORklHX0lPX1dRKVxcbmlvX3VyaW5nL2lvLXdxLmgtNzAtZXh0ZXJuIHZvaWQgaW9fd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MzYxPXN0YXRpYyB2b2lkIGlvX3ByZXBfYXN5bmNfd29yayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMzcyLVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfRk9SQ0VfQVNZTkMpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzozNzM6XFx0XFx0YXRvbWljX29yKElPX1dRX1dPUktfQ09OQ1VSUkVOVCwgXFx1MDAyNnJlcS1cXHUwMDNld29yay5mbGFncyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0zNzQtXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTM4OC1cXHRcXHRpZiAoZGVmLVxcdTAwM2V1bmJvdW5kX25vbnJlZ19maWxlKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mzg5OlxcdFxcdFxcdGF0b21pY19vcihJT19XUV9XT1JLX1VOQk9VTkQsIFxcdTAwMjZyZXEtXFx1MDAzZXdvcmsuZmxhZ3MpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMzkwLVxcdH1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NDEwPXZvaWQgaW9fcXVldWVfaW93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMxLVxcdGlmIChXQVJOX09OX09OQ0UoIXNhbWVfdGhyZWFkX2dyb3VwKHRjdHgtXFx1MDAzZXRhc2ssIGN1cnJlbnQpKSlcXG5pb191cmluZy9pb191cmluZy5jOjQzMjpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZyZXEtXFx1MDAzZXdvcmsuZmxhZ3MpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNDMzLVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0xNDY2PXZvaWQgaW9fd3Ffc3VibWl0X3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmspXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0ODAtXFx0LyogZWl0aGVyIGNhbmNlbGxlZCBvciBpby13cSBpcyBkeWluZywgc28gZG9uJ3QgdG91Y2ggdGN0eC1cXHUwMDNlaW93cSAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ4MTpcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNndvcmstXFx1MDAzZWZsYWdzKSBcXHUwMDI2IElPX1dRX1dPUktfQ0FOQ0VMKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDgyLWZhaWw6XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTE0ODctXFx0XFx0ZXJyID0gLUVCQURGO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MTQ4ODpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19DQU5DRUwsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0xNDg5LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz0zND1zdHJ1Y3QgaW9fcG9sbF90YWJsZSB7XFxuLS1cXG5pb191cmluZy9wb2xsLmMtNTMtXFxuaW9fdXJpbmcvcG9sbC5jOjU0OiNkZWZpbmUgSU9fV1FFX0ZfRE9VQkxFXFx0XFx0MVxcbmlvX3VyaW5nL3BvbGwuYy01NS1cXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz01OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19raW9jYiAqd3FlX3RvX3JlcShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FlKVxcbi0tXFxuaW9fdXJpbmcvcG9sbC5jLTYyLVxcbmlvX3VyaW5nL3BvbGwuYzo2MzpcXHRyZXR1cm4gKHN0cnVjdCBpb19raW9jYiAqKShwcml2IFxcdTAwMjYgfklPX1dRRV9GX0RPVUJMRSk7XFxuaW9fdXJpbmcvcG9sbC5jLTY0LX1cXG4tLVxcbmlvX3VyaW5nL3BvbGwuYz02Nj1zdGF0aWMgaW5saW5lIGJvb2wgd3FlX2lzX2RvdWJsZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FlKVxcbi0tXFxuaW9fdXJpbmcvcG9sbC5jLTY5LVxcbmlvX3VyaW5nL3BvbGwuYzo3MDpcXHRyZXR1cm4gcHJpdiBcXHUwMDI2IElPX1dRRV9GX0RPVUJMRTtcXG5pb191cmluZy9wb2xsLmMtNzEtfVxcbi0tXFxuaW9fdXJpbmcvcG9sbC5jPTQ2NT1zdGF0aWMgdm9pZCBfX2lvX3F1ZXVlX3Byb2Moc3RydWN0IGlvX3BvbGwgKnBvbGwsIHN0cnVjdCBpb19wb2xsX3RhYmxlICpwdCxcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYy00OTctXFx0XFx0LyogbWFyayBhcyBkb3VibGUgd3EgZW50cnkgKi9cXG5pb191cmluZy9wb2xsLmM6NDk4OlxcdFxcdHdxZV9wcml2YXRlIHw9IElPX1dRRV9GX0RPVUJMRTtcXG5pb191cmluZy9wb2xsLmMtNDk5LVxcdFxcdGlvX2luaXRfcG9sbF9pb2NiKHBvbGwsIGZpcnN0LVxcdTAwM2VldmVudHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo0OS4wMDU0Njk1MzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAxMjk3NjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFJlbGV2YW50IEtjb25maWcgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYENPTkZJR19JT19XUWAgYW5kIGBDT05GSUdfSU9fVVJJTkdgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCBwb3RlbnRpYWxseSwgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGZlYXR1cmUgZmxhZ3Mgc3Vycm91bmRpbmcgdGhlbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgZW5hYmxlbWVudCBhcmUuIEFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgZGVwZW5kZW50IG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBvciBkbyB0aGV5IHNpbXBseSBvZmZlciBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zIG9mIHNpbWlsYXIgZnVuY3Rpb25hbGl0eT8gVGhlIHNwZWNpZmljcyBvZiB0aGVzZSBvcHRpb25zIGFyZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo1MS4wMTg0NDkxNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDI5OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo1MS4wNjM4ODY3NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njc4MzM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gQ09ORklHX0lPX1dRKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYENPTkZJR19JT19XUWAuIFRoaXMgbWVhbnMgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgY2hhbGxlbmdlLCBvZiBjb3Vyc2UsIGlzIHRoYXQgYSBzeW1ib2wgbGlrZSB0aGlzIGNvdWxkIGJlIGRlZmluZWQgKG9yIHJlZmVyZW5jZWQpIGFueXdoZXJlIHdpdGhpbiB0aGUgdmFzdCBzZWEgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIGEgcmVjdXJzaXZlIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBLY29uZmlnIGhpZXJhcmNoeS4gSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2VseSBgZ3JlcGAgb3IgYGZpbmRgIGNvbWJpbmVkIHdpdGggYGdyZXBgLCB0byBlZmZpY2llbnRseSBsb2NhdGUgYWxsIGluc3RhbmNlcy4gSSdsbCBiZSBsb29raW5nIGZvciBleGFjdCBtYXRjaGVzLCBidXQgSSdsbCBhbHNvIGJlIG1pbmRmdWwgb2YgcG9zc2libGUgaW5kaXJlY3QgZGVmaW5pdGlvbnMgKGUuZy4sIHZpYSBgc2VsZWN0YCBvciBgZGVwZW5kcyBvbmApLiBJJ2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlYXJjaCBpcyBwcm9wZXJseSBzY29wZWQgdG8gdGhlIEtjb25maWcgZmlsZXMgc3BlY2lmaWNhbGx5LCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBvdGhlciBzb3VyY2UgZmlsZXMuIE9uY2UgSSBoYXZlIHRoZSBpbml0aWFsIGhpdCBsaXN0LCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBlYWNoIGRlZmluaXRpb24gY2xvc2VseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0OiB3aGF0IGFyY2hpdGVjdHVyZSwgc3Vic3lzdGVtLCBhbmQgZGVwZW5kZW5jaWVzIGFyZSBpbnZvbHZlZD8gQW5kLCBwZXJoYXBzIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpcyB0aGlzIHN5bWJvbCAqdXNlZCogaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgSS9PIHN1YnN5c3RlbT8gVGhpcyBpcyBnb2luZyB0byBiZSBhIG11bHRpLXN0ZXAgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMDEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo0OTo1My45MjA2NzMzMjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzk5OTgwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1dRXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NDE5PXNvdXJjZSBcXFwiZnMvdW5pY29kZS9LY29uZmlnXFxcIlxcbmZzL0tjb25maWctNDIwLVxcbmZzL0tjb25maWc6NDIxOmNvbmZpZyBJT19XUVxcbmZzL0tjb25maWctNDIyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6NTYuNTYwNjc3NzM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNjI1NTA2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCByZWZsZWN0aW5nIHRoZSBhcHByb2FjaCBJJ2QgdGFrZSBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZXN5c3RlbSdzIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDIxLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIGEga2V5IHNldHRpbmcgb3IgcmVsYXRlZCBncm91cCBvZiBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbiBhcmUgbG9jYXRlZC4gSSdsbCByZWFkIHRob3NlIDIwIGxpbmVzIGNhcmVmdWxseSwgbG9va2luZyBmb3I6XG5cbiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIHNldHRpbmdzLCBmZWF0dXJlcywgb3Iga2VybmVsIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIHNlY3Rpb24gaXMgcmVsZXZhbnQ/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGZsb3cuXG4qICAgKipEZWZhdWx0IFZhbHVlczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncz8gQXJlIHRoZXkgc2Vuc2libGUgZGVmYXVsdHMgZm9yIG1vc3QgdXNlIGNhc2VzLCBvciBhcmUgdGhleSB0YWlsb3JlZCBmb3Igc3BlY2lmaWMgc2NlbmFyaW9zPyBUaGlzIHJldmVhbHMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBkZXZlbG9wZXJzLlxuKiAgICoqSGVscCBUZXh0OioqIElzIHRoZSBoZWxwIHRleHQgY2xlYXIgYW5kIGNvbmNpc2U/IERvZXMgaXQgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGNob2ljZXM/IEFtYmlndWl0eSBoZXJlIGlzIGEgcmVkIGZsYWcuXG4qICAgKipTeW1ib2xpYyBOYW1lczoqKiBBcmUgdGhleSB1c2luZyBtZWFuaW5nZnVsIHN5bWJvbGljIG5hbWVzIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIHNldHRpbmdzIGFjdHVhbGx5ICptZWFuKiwgbm90IGp1c3QgdGhlaXIgdGVjaG5pY2FsIGxhYmVscy5cbiogICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIEhvdyBpcyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbnQgb24gb3RoZXIgc2V0dGluZ3Mgb3IgYXJjaGl0ZWN0dXJlPyBJcyB0aGUgbG9naWMgc3RyYWlnaHRmb3J3YXJkIG9yIGNvbnZvbHV0ZWQ/IEknbGwgbmVlZCB0byB0cmFjZSB0aGUgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS5cbiogICAqKlJlbGF0aW9uc2hpcHMqKjogSG93IGRvZXMgdGhpcyBwYXJ0IG9mIHRoZSBjb25maWcgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHBpY3R1cmU/IEknbSBob3BpbmcgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW50ZXJhY3QgYW5kIGFmZmVjdCBlYWNoIG90aGVyLlxuXG5CeSBmb2N1c2luZyBvbiB0aGVzZSBwb2ludHMsIEkgY2FuIGdldCBhIHF1aWNrIGdyYXNwIG9mIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDQyMSwgdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBkZXZlbG9wZXJzIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCdzIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy4gSSdtIGFudGljaXBhdGluZyBzb21lIGNvbXBsZXggaW50ZXJhY3Rpb25zIGluIHRoaXMgcGFydGljdWxhciBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjQ5OjU5LjgyMzIzMDYzOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxNTpcXHRlbmRpZiAjIE5FVFdPUktfRklMRVNZU1RFTVNcXG4gNDE2OlxcdFxcbiA0MTc6XFx0c291cmNlIFxcXCJmcy9ubHMvS2NvbmZpZ1xcXCJcXG4gNDE4OlxcdHNvdXJjZSBcXFwiZnMvZGxtL0tjb25maWdcXFwiXFxuIDQxOTpcXHRzb3VyY2UgXFxcImZzL3VuaWNvZGUvS2NvbmZpZ1xcXCJcXG4gNDIwOlxcdFxcbiA0MjE6XFx0Y29uZmlnIElPX1dRXFxuIDQyMjpcXHRcXHRib29sXFxuIDQyMzpcXHRcXG4gNDI0OlxcdGVuZG1lbnVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NDk6NTkuODIzMzAyODE4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1OTk2OTg5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHF1ZXN0aW9uIFwiV2hlcmUgaXMgQ09ORklHX0lPX1dRIHNlbGVjdGVkP1wiOlxuXG4qKkRpZ2dpbmcgaW50byBDT05GSUdfSU9fV1EgU2VsZWN0aW9uKipcblxuT2theSwgc28gdGhlIGtlcm5lbCBjb25maWcgb3B0aW9uIGBDT05GSUdfSU9fV1FgLi4uIHdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMuIEknbSBhc3N1bWluZyBpdCdzIHBhcnQgb2YgdGhlIGJyb2FkZXIgSU8gc3Vic3lzdGVtLCBwcm9iYWJseSByZWxhdGVkIHRvIHdvcmtxdWV1ZXMsIHNpbmNlIHRoZSBuYW1lIGlzIHN1Z2dlc3RpdmUuIEknZCBzdGFydCBieSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBmb3IgaXQsIGxpa2VseSB1c2luZyBgZ3JlcCBcIkNPTkZJR19JT19XUVwiICovS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGxpa2VseSBLY29uZmlnIGZpbGVzLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBleGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgZGVmaW5pdGlvbi4gSSdtIGxvb2tpbmcgZm9yIGNvbmRpdGlvbnMsIG90aGVyIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCB0ZWxsIG1lICp3aGVuKiBpdCdzIHNlbGVjdGVkLlxuXG5Gcm9tIHRoZXJlIEknZCBjaGVjayByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIG1heWJlIGV2ZW4gc29tZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMsIGlmIG5lZWRlZCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBnb3RjaGFzIG9yIGhpc3RvcmljYWwgY29udGV4dCBhcm91bmQgaXRzIHVzYWdlLiBJJ2QgYmUgbG9va2luZyBmb3Igc2NlbmFyaW9zIHdoZXJlIGl0J3MgKmF1dG9tYXRpY2FsbHkqIHNlbGVjdGVkIChtYXliZSB2aWEgYW5vdGhlciBvcHRpb24pLCBvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIHVzZS1jYXNlcyB0aGF0IHdvdWxkIGJyaW5nIGl0IGluLiBJIGFsc28gd291bGQgYmUgcHJlcGFyZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMgdGhhdCB1c2UgaXQgaWYgZ3JlcCB0dXJucyB1cCBhbnl0aGluZyBsaWtlIHRoaXMuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBwYXRoIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBvciBub3QgYENPTkZJR19JT19XUWAgZ2V0cyBpbmNsdWRlZCwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHNlbGVjdGlvbiBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDM5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjAzLjQyMzAwNDQ0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MzU2MjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSU9fV1FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5NjA9Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5NjEtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxOTYyOlxcdHNlbGVjdCBJT19XUVxcbmluaXQvS2NvbmZpZy0xOTYzLVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDowNS4xMDY1NzgxMDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ5NDc0MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgc28gYENPTkZJR19JT19VUklOR2AgYXV0b21hdGljYWxseSBzZWxlY3RzIGBDT05GSUdfSU9fV1FgLCBtZWFuaW5nIHdlIHNob3VsZCBlbmFibGUgZnV6emluZyBmb3IgYElPX1VSSU5HYCwgYW5kIG9wdGlvbmFsbHkgYElPX1dRYC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoaXMgcGF0Y2ggcHJlc2VudHMgYSBwcm9taXNpbmcgZnV6emluZyB0YXJnZXQuXG5cblllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmchIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiBgaW9fd3FgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZ1bmN0aW9uIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIHdoaWNoIG5vdyBjb250YWlucyB0aGUgbWFpbiBsb2dpYy4gVGhlIG9yaWdpbmFsIHVzZWQgYSBsb29wIHRvIGNhbGwgYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2AsIGJ1dCBub3cgYnJlYWtzIHRoZSBsb29wIHVwb24gYW55IHN1Y2Nlc3NmdWwgY2FuY2VsbGF0aW9uLiBUaGlzIGVhcmx5LWV4aXQgYmVoYXZpb3IgY2hhbmdlIGR1cmluZyB0aGUgY2FuY2VsbGF0aW9uIG9mIHJ1bm5pbmcgd29yayBhY3Jvc3MgZGlmZmVyZW50IHdvcmtlciBhY2NvdW50cyB3aXRoaW4gYGlvX3dxYCBpcyBzaWduaWZpY2FudC4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUgcmVzaWRlcyB3aXRoaW4gYGlvX3VyaW5nYCBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHN5c3RlbSBjYWxscyBzdWNoIGFzIGBpb191cmluZ2AgY2FuY2VsIHJlcXVlc3RzIG9yIGV2ZW4gZHVyaW5nIGNvbnRleHQgdGVhcmRvd24sIHRoaXMgbWFrZXMgaXQgYW4gZXh0cmVtZWx5IGF0dHJhY3RpdmUgZnV6emluZyB0YXJnZXQuIEl0J3MgbW9kaWZ5aW5nIGV4ZWN1dGFibGUga2VybmVsIGxvZ2ljIHdpdGhpbiBhIGNvcmUgc3Vic3lzdGVtLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXZSBrbm93IGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgYXJlIGJvdGggc3RhdGljLCByZXNpZGluZyB3aXRoaW4gYGlvX3VyaW5nL2lvLXdxLmNgLiBCdXQgd2hhdCBhYm91dCBgaW9fd3FfY2FuY2VsX2NiYD8gSXQgYXBwZWFycyB0byBiZSBub24tc3RhdGljLCBhbmQgdGh1cywgcG90ZW50aWFsbHkgZXhwb3J0ZWQgYW5kIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIFdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiBvdXIgZm9jdXMuIExldCdzIGFsc28gY29uc2lkZXIgYGlvX2FzeW5jX2NhbmNlbF9vbmVgIGFuZCBgaW9fYXN5bmNfY2FuY2VsYCBpbiBgaW9fdXJpbmcvY2FuY2VsLmNgIHNpbmNlIHRoZXkgYXJlIGFsc28gcG90ZW50aWFsbHkgaW52b2x2ZWQuXG5cbkkganVzdCBjaGVja2VkIGFnYWluLCBhbmQgYGlvX3dxX2NhbmNlbF9jYmAgaXMgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIGdsb2JhbGx5IGF2YWlsYWJsZS4gVGhlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCBzdWNoIGFzIGBpb193cV93b3JrZXJfY2FuY2VsYCBhbmQgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCByZW1haW4gc3RhdGljLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBub24tc3RhdGljIGVudHJ5IHBvaW50IHRvIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgd2hpY2ggaXMgZXhjZWxsZW50IGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG91ciBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBpb193cV9jYW5jZWxfY2JgLCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AgKGFuZCBieSBleHRlbnNpb24gYGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya2ApLCBhbmQgYGlvX2FzeW5jX2NhbmNlbGAgc2luY2UgdGhhdCdzIHRoZSBvcCBoYW5kbGVyIGZvciBgSU9SSU5HX09QX0FTWU5DX0NBTkNFTGAuIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpb19hc3luY19jYW5jZWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoxMC42MDEzMjQ3NjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDE1MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2FzeW5jX2NhbmNlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvY2FuY2VsLmM9NzA9c3RhdGljIGJvb2wgaW9fY2FuY2VsX2NiKHN0cnVjdCBpb193cV93b3JrICp3b3JrLCB2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNzctXFxuaW9fdXJpbmcvY2FuY2VsLmM6Nzg6c3RhdGljIGludCBpb19hc3luY19jYW5jZWxfb25lKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbmlvX3VyaW5nL2NhbmNlbC5jLTc5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkKVxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmM9MTA1PWludCBpb190cnlfY2FuY2VsKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMTEyLVxcbmlvX3VyaW5nL2NhbmNlbC5jOjExMzpcXHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKHRjdHgsIGNkKTtcXG5pb191cmluZy9jYW5jZWwuYy0xMTQtXFx0LypcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTEzOS1cXG5pb191cmluZy9jYW5jZWwuYzoxNDA6aW50IGlvX2FzeW5jX2NhbmNlbF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvY2FuY2VsLmMtMTQxLXtcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTE3My1cXG5pb191cmluZy9jYW5jZWwuYzoxNzQ6c3RhdGljIGludCBfX2lvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL2NhbmNlbC5jLTE3NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMTk3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNmN0eC1cXHUwMDNldGN0eF9saXN0LCBjdHhfbm9kZSkge1xcbmlvX3VyaW5nL2NhbmNlbC5jOjE5ODpcXHRcXHRyZXQgPSBpb19hc3luY19jYW5jZWxfb25lKG5vZGUtXFx1MDAzZXRhc2stXFx1MDAzZWlvX3VyaW5nLCBjZCk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtMTk5LVxcdFxcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMjA5LVxcbmlvX3VyaW5nL2NhbmNlbC5jOjIxMDppbnQgaW9fYXN5bmNfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvY2FuY2VsLmMtMjExLXtcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTIzOC1cXG5pb191cmluZy9jYW5jZWwuYzoyMzk6XFx0cmV0ID0gX19pb19hc3luY19jYW5jZWwoXFx1MDAyNmNkLCB0Y3R4LCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtMjQwLWRvbmU6XFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz0yNDc9c3RhdGljIGludCBfX2lvX3N5bmNfY2FuY2VsKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtMjY0LVxcbmlvX3VyaW5nL2NhbmNlbC5jOjI2NTpcXHRyZXR1cm4gX19pb19hc3luY19jYW5jZWwoY2QsIHRjdHgsIDApO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTI2Ni19XFxuLS1cXG5pb191cmluZy9jYW5jZWwuaD03PXN0cnVjdCBpb19jYW5jZWxfZGF0YSB7XFxuLS1cXG5pb191cmluZy9jYW5jZWwuaC0xNS1cXG5pb191cmluZy9jYW5jZWwuaDoxNjppbnQgaW9fYXN5bmNfY2FuY2VsX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvY2FuY2VsLmg6MTc6aW50IGlvX2FzeW5jX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9jYW5jZWwuaC0xOC1cXG4tLVxcbmlvX3VyaW5nL29wZGVmLmM9NTQ9Y29uc3Qgc3RydWN0IGlvX2lzc3VlX2RlZiBpb19pc3N1ZV9kZWZzW10gPSB7XFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTE5MS1cXHRcXHQuYXVkaXRfc2tpcFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjE5MjpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fYXN5bmNfY2FuY2VsX3ByZXAsXFxuaW9fdXJpbmcvb3BkZWYuYzoxOTM6XFx0XFx0Lmlzc3VlXFx0XFx0XFx0PSBpb19hc3luY19jYW5jZWwsXFxuaW9fdXJpbmcvb3BkZWYuYy0xOTQtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MTAuNjQ2NzQ5NTc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NDk2NjM4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gaW9fdXJpbmcgQ2FuY2VsbGF0aW9uIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgZnV6emluZyBzZXR1cC4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNhbmNlbGxhdGlvbiBwYXRocyB3aXRoaW4gYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW8td3EuY2AgZmlsZS4gSSBzZWUgdGhhdCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgYnkgYGlvX2FzeW5jX2NhbmNlbF9vbmVgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgX19pb19hc3luY19jYW5jZWxgIGFuZCB1bHRpbWF0ZWx5IGJ5IHRoZSB1c2VyLWZhY2luZyBgaW9fYXN5bmNfY2FuY2VsYCAoZm9yIGBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMYCkgYW5kIGBfX2lvX3N5bmNfY2FuY2VsYCAoZm9yIGBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUxgKS4gSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYGlvX3VyaW5nX3RyeV9jYW5jZWxfaW93cWAgYW5kIGBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzYC4gU28sIHRoZXJlJ3MgcXVpdGUgYSBiaXQgb2YgaW50ZXJjb25uZWN0ZWRuZXNzIGhlcmUuXG5cbk15IHJldmlldyBvZiB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgaGlnaGxpZ2h0cyB0aGF0IHNpbmNlIEknbSB0YXJnZXRpbmcgZmVhdHVyZS1zcGVjaWZpYyBsb2dpYywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSBtb2RpZmljYXRpb24gaGVyZSBwcmltYXJpbHkgY29uY2VybnMgdGhlIGNhbmNlbGxhdGlvbiBvZiBydW5uaW5nIHdvcmsuIFdpdGhpbiBgaW8td3EuY2AsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGFuZCBgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya2AsIGJvdGggb2Ygd2hpY2ggYXJlIHN0YXRpYy4gVGhlIGd1aWRlbGluZXMgc3BlY2lmaWNhbGx5IGRpc2N1c3Mgc3RhdGljIGlubGluZXMgYW5kIHN1Z2dlc3QgdGFyZ2V0aW5nIG5vbi1zdGF0aWMgY2FsbGVycyB0aGF0IGV4ZXJjaXNlIHRob3NlIGZ1bmN0aW9ucy4gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgYGlvX3dxX2NhbmNlbF9jYmAgYXBwZWFycyB0byBiZSBhIGRpcmVjdCBjYWxsZXIgb2YgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gSSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZW50cnlwb2ludCBmdW5jdGlvbnMgYGlvX2FzeW5jX2NhbmNlbGAgYW5kIGBpb190cnlfY2FuY2VsYCwgYXMgdGhleSdyZSB0aGUgdXNlci1mYWNpbmcgcG9pbnRzLlxuXG5Hb29kIHRvIGtub3cgdGhhdCBzeXprYWxsZXIgKmNhbiogdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGNvbXBpbGVkIGFzIHN5bWJvbHMsIHdoaWNoIGlzIHRoZSBjYXNlIGhlcmUuIFNvLCBpbmNsdWRpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMgKmFuZCogdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGBpb193cV9jYW5jZWxfY2JgLCBwbHVzIHRoZSBlbnRyeXBvaW50cyBpcyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgYW5kIHRoZSByaWdodCBhcHByb2FjaC4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgYWxsIGluIHRoZSByaWdodCBwbGFjZS4gWWVwLCBgaW9fd3FfY2FuY2VsX2NiYCBpcyBpbmRlZWQgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLCBhcyBleHBlY3RlZC5cblxuVGhlcmVmb3JlLCBteSBmaW5hbCBgRm9jdXNTeW1ib2xzYCBsaXN0IHdpbGwgYmU6XG5cbiogICBcImlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya1wiXG4qICAgXCJpb193cV9jYW5jZWxfcnVubmluZ193b3JrXCJcbiogICBcImlvX3dxX2NhbmNlbF9jYlwiXG4qICAgXCJpb19hc3luY19jYW5jZWxcIlxuXG5Eb3VibGUtY2hlY2tpbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLCBgSU9fVVJJTkdgIGFuZCBgSU9fV1FgICh0aGUgbGF0dGVyIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb3JtZXIpIGFyZSBlbmFibGVkLCB3aGljaCBpcyBjcml0aWNhbC5cblxuRmluYWxseSwgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMsIEknbGwgc2V0OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoYWJzb2x1dGVseSlcbiogICBgUmVhc29uaW5nYDogQ2xlYXJseSBleHBsYWluIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHJ1bm5pbmctd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gYGlvX3VyaW5nL2lvLXdxLmNgLCBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGFjcm9zcyB3b3JrZXIgYWNjb3VudHMgb25jZSBhIHJ1bm5pbmcgd29ya2VyIGhhcyBtYXRjaGVkIGZvciBjYW5jZWxsYXRpb24gd2hlbiBub3QgY2FuY2VsbGluZyBhbGwgd29ya3MuIFRoaXMgaW1wYWN0cyBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGNhbmNlbGxhdGlvbiB3aXRoaW4gYGlvX3VyaW5nYCBhbmQgaXMgZnVsbHkgdXNlci1yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIklPX1VSSU5HXCIsIFwiSU9fV1FcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtcIiwgXCJpb193cV9jYW5jZWxfcnVubmluZ193b3JrXCIsIFwiaW9fd3FfY2FuY2VsX2NiXCIsIFwiaW9fYXN5bmNfY2FuY2VsXCJdYFxuXG5BbGwgc2V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NDIsIk91dHB1dFRva2VucyI6MjA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjE5LjE5NjQxNTIwNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDY0OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiSU9fV1FcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtcIixcbiAgICBcImlvX3dxX2NhbmNlbF9jYlwiLFxuICAgIFwiaW9fYXN5bmNfY2FuY2VsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJ1bm5pbmcgd29yayBjYW5jZWxsYXRpb24gbG9naWMgaW4gaW9fdXJpbmcgKGlvX3VyaW5nL2lvLXdxLmMpLiBTcGVjaWZpY2FsbHksIGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmsgbm93IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3Agb3ZlciB3b3JrZXIgYWNjb3VudHMgZWFybHkgd2hlbiBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsgZmluZHMgYW5kIHNpZ25hbHMgY2FuY2VsbGF0aW9uIG9uIGEgcnVubmluZyB3b3JrZXIgKHdoZW4gbm90IG1hdGNoaW5nIGFsbCB3b3JrcykuIFRoaXMgYWx0ZXJzIGNvcmUgaW9fdXJpbmcgZXhlY3V0aW9uIGFuZCBjYW5jZWxsYXRpb24gZmxvdywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBJT1JJTkdfT1BfQVNZTkNfQ0FOQ0VMLCBJT1JJTkdfUkVHSVNURVJfU1lOQ19DQU5DRUwsIGFuZCByaW5nIHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJJT19XUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29ya1wiLFxuICAgIFwiaW9fd3FfY2FuY2VsX2NiXCIsXG4gICAgXCJpb19hc3luY19jYW5jZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcnVubmluZyB3b3JrIGNhbmNlbGxhdGlvbiBsb2dpYyBpbiBpb191cmluZyAoaW9fdXJpbmcvaW8td3EuYykuIFNwZWNpZmljYWxseSwgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayBub3cgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCBvdmVyIHdvcmtlciBhY2NvdW50cyBlYXJseSB3aGVuIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayBmaW5kcyBhbmQgc2lnbmFscyBjYW5jZWxsYXRpb24gb24gYSBydW5uaW5nIHdvcmtlciAod2hlbiBub3QgbWF0Y2hpbmcgYWxsIHdvcmtzKS4gVGhpcyBhbHRlcnMgY29yZSBpb191cmluZyBleGVjdXRpb24gYW5kIGNhbmNlbGxhdGlvbiBmbG93LCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIElPUklOR19PUF9BU1lOQ19DQU5DRUwsIElPUklOR19SRUdJU1RFUl9TWU5DX0NBTkNFTCwgYW5kIHJpbmcgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjE5LjI2OTg4NzY4N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NjIzMDAxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoxOS4yNzAzNzk4NzhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTk2MTgwMzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yaygpIGFuZCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoKSB0byByZXR1cm4gZWFybHkgd2hlbiBhIG1hdGNoaW5nIHdvcmtlciBoYXMgYmVlbiBjYW5jZWxlZCBhbmQgY2FuY2VsX2FsbCBpcyBmYWxzZS4gSXQgY2hhbmdlcyBjb250cm9sIGZsb3cgYnkgcHJvcGFnYXRpbmcgdGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGZyb20gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoKSB0aHJvdWdoIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHNvIHRoZSBsb29wIG92ZXIgYWNjb3VudHMgYnJlYWtzIGVhcmx5LlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmVhZHMgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgKHRoZSBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlICdyZXQnIGlzIGRpcmVjdGx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIsIHdoaWNoIGFsd2F5cyByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYm9vbCkuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIHdpdGggaW9fd29ya2VyIG9yIGlvX3dxIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTUxMDMxMmU2YWUwYmU4N2ZmZTk2YWQ2NGQ3N2UyZWJjYzNmYWUwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjQ4OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW8td3EuYyBiL2lvX3VyaW5nL2lvLXdxLmNcbmluZGV4IDJjYTIyM2U0N2Q0MWYuLjlmOTAzOWUzZDM4ZmMgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pby13cS5jXG4rKysgYi9pb191cmluZy9pby13cS5jXG5AQCAtMTE4MSwxMiArMTE4MSwxNSBAQCBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcGVuZGluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcbitzdGF0aWMgYm9vbCBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmsoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXG4gXHRcdFx0XHRcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXG4ge1xuK1x0Ym9vbCByZXQ7XG4rXG4gXHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbi1cdGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbitcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcbiBcdHJhd19zcGluX3VubG9jayhcdTAwMjZhY2N0LVx1MDAzZXdvcmtlcnNfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cSAqd3EsXG5AQCAtMTE5NSw3ICsxMTk4LDggQEAgc3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElPX1dRX0FDQ1RfTlI7IGkrKylcbi1cdFx0aW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKFx1MDAyNndxLVx1MDAzZWFjY3RbaV0sIG1hdGNoKTtcbitcdFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcdTAwMjZ3cS1cdTAwM2VhY2N0W2ldLCBtYXRjaCkpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoxOS4yNzAzODU5NjhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM3NjM1ODI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGlvLXdxLmMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgYWdhaW5zdCBgaW9fdXJpbmcvaW8td3EuY2AuIFNlZW1zIHdlJ3JlIG1vZGlmeWluZyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgaW9fdXJpbmcgd29ya3F1ZXVlLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgZm9jdXMgb24gdGhlIGBpb19hY2N0X2NhbmNlbF9ydW5uaW5nX3dvcmtgIGZ1bmN0aW9uLlxuXG5JdCdzIGNsZWFyIHRoZXkndmUgbWFkZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBhbHRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2FzIGB2b2lkYCwgYW5kIG5vdyBpdCdzIHJldHVybmluZyBhIGBib29sYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVGhpcyBzdWdnZXN0cyB0aGUgY2FsbGluZyBjb250ZXh0IG5vdyBuZWVkcyB0byBrbm93ICppZiogYSBjYW5jZWxsYXRpb24gYWN0dWFsbHkgb2NjdXJyZWQuIFByZXZpb3VzbHksIGl0IHNpbXBseSBpdGVyYXRlZC5cblxuTG9va2luZyBhdCBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCBpdHNlbGYsIHRoZXkndmUgd3JhcHBlZCB0aGUgd29ya2VyIGl0ZXJhdGlvbiBpbiBhIHNwaW5sb2NrIHRvIHByb3RlY3QgYGFjY3QtXHUwMDNld29ya2Vyc19sb2NrYCB3aGljaCBtYWtlcyBzZW5zZSwgZ2l2ZW4gY29uY3VycmVudCBhY2Nlc3MgaXMgbGlrZWx5LiBUaGUgbG9vcCB3aXRoIGBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcmAgYWxzbyBsb29rcyB0byBiZSB0aGUgc2FtZSwgYnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCB0byBgYnJlYWtgIHRoZSBsb29wIGluIGBpb193cV9jYW5jZWxfcnVubmluZ193b3JrYC4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24uIElmIGEgY2FuY2VsbGF0aW9uIGlzIHN1Y2Nlc3NmdWxseSBmb3VuZCBvbiBvbmUgYGlvX2FjY3RgIHdpdGhpbiBhIGBpb193cWAgKG9mIHdoaWNoIHRoZXJlIGFyZSBhIGZldyksIGl0IHNob3J0LWNpcmN1aXRzIHRoZSByZXN0LiBUaGlzIGxpa2VseSBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSBvbmx5ICpvbmUqIHdvcmsgaXRlbSBuZWVkZWQgY2FuY2VsbGF0aW9uLlxuXG5UaGUgUkNVIHJlYWQgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBpdGVyYXRpb24gaW4gYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIHJlbWFpbiB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgc3RydWN0dXJlIHRoZXkncmUgcHJvdGVjdGluZyBmcm9tIG1vZGlmaWNhdGlvbiBieSB0aGUgdW5kZXJseWluZyB3b3JrZXJzLlxuXG5Fc3NlbnRpYWxseSwgdGhleSd2ZSBhZGRlZCBhIGNhbmNlbGxhdGlvbiBzdWNjZXNzIGluZGljYXRvciBhbmQgb3B0aW1pemVkIHRoZSBjYW5jZWxsYXRpb24gc2VhcmNoIGJ5IGJyZWFraW5nIHRoZSBsb29wLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYm9vbGVhbiByZXR1cm4gdmFsdWUgbW9yZSB0aG9yb3VnaGx5LiBJIGJldCB0aGV5J3JlIG5vdyB1c2luZyB0aGF0IHJldHVybiB2YWx1ZSB1cHN0cmVhbSB0byBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgc3VjY2VzcyBvZiB0aGUgY2FuY2VsbGF0aW9uLiBObyBwb2ludCBpbiBjb250aW51aW5nIHRoZSBzZWFyY2ggaWYgdGhlIHdvcmsgaXMgYWxyZWFkeSBkb25lISBUaGF0J3MgYSBnb29kIG9wdGltaXphdGlvbiBmb3IgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjI0LjY0Njc0Njc4OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcbjExNTE6XFx0XFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2YWNjdC1cXHUwMDNlbG9jayk7XFxuMTE1MjpcXHRcXHR3cV9saXN0X2Zvcl9lYWNoKG5vZGUsIHByZXYsIFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrX2xpc3QpIHtcXG4xMTUzOlxcdFxcdFxcdHdvcmsgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGlvX3dxX3dvcmssIGxpc3QpO1xcbjExNTQ6XFx0XFx0XFx0aWYgKCFtYXRjaC1cXHUwMDNlZm4od29yaywgbWF0Y2gtXFx1MDAzZWRhdGEpKVxcbjExNTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE1NjpcXHRcXHRcXHRpb193cV9yZW1vdmVfcGVuZGluZyh3cSwgYWNjdCwgd29yaywgcHJldik7XFxuMTE1NzpcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2soXFx1MDAyNmFjY3QtXFx1MDAzZWxvY2spO1xcbjExNTg6XFx0XFx0XFx0aW9fcnVuX2NhbmNlbCh3b3JrLCB3cSk7XFxuMTE1OTpcXHRcXHRcXHRtYXRjaC1cXHUwMDNlbnJfcGVuZGluZysrO1xcbjExNjA6XFx0XFx0XFx0Lyogbm90IHNhZmUgdG8gY29udGludWUgYWZ0ZXIgdW5sb2NrICovXFxuMTE2MTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTYyOlxcdFxcdH1cXG4xMTYzOlxcdFxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2YWNjdC1cXHUwMDNlbG9jayk7XFxuMTE2NDpcXHRcXG4xMTY1OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTY2OlxcdH1cXG4xMTY3OlxcdFxcbjExNjg6XFx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExNjk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG4xMTcwOlxcdHtcXG4xMTcxOlxcdFxcdGludCBpO1xcbjExNzI6XFx0cmV0cnk6XFxuMTE3MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKSB7XFxuMTE3NDpcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCA9IGlvX2dldF9hY2N0KHdxLCBpID09IDApO1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHRpZiAoaW9fYWNjdF9jYW5jZWxfcGVuZGluZ193b3JrKHdxLCBhY2N0LCBtYXRjaCkpIHtcXG4xMTc3OlxcdFxcdFxcdFxcdGlmIChtYXRjaC1cXHUwMDNlY2FuY2VsX2FsbClcXG4xMTc4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMTE3OTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTgwOlxcdFxcdFxcdH1cXG4xMTgxOlxcdFxcdH1cXG4xMTgyOlxcdH1cXG4xMTgzOlxcdFxcbjExODQ6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaClcXG4xMTg2OlxcdHtcXG4xMTg3OlxcdFxcdGJvb2wgcmV0O1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTA6XFx0XFx0cmV0ID0gaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoYWNjdCwgaW9fd3Ffd29ya2VyX2NhbmNlbCwgbWF0Y2gpO1xcbjExOTE6XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbjExOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIHZvaWQgaW9fd3FfY2FuY2VsX3J1bm5pbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExOTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSAqbWF0Y2gpXFxuMTE5NzpcXHR7XFxuMTE5ODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgSU9fV1FfQUNDVF9OUjsgaSsrKVxcbjEyMDE6XFx0XFx0XFx0aWYgKGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yayhcXHUwMDI2d3EtXFx1MDAzZWFjY3RbaV0sIG1hdGNoKSlcXG4xMjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xMjA1OlxcdH1cXG4xMjA2OlxcdFxcbjEyMDc6XFx0ZW51bSBpb193cV9jYW5jZWwgaW9fd3FfY2FuY2VsX2NiKHN0cnVjdCBpb193cSAqd3EsIHdvcmtfY2FuY2VsX2ZuICpjYW5jZWwsXFxuMTIwODpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmRhdGEsIGJvb2wgY2FuY2VsX2FsbClcXG4xMjA5OlxcdHtcXG4xMjEwOlxcdFxcdHN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSBtYXRjaCA9IHtcXG4xMjExOlxcdFxcdFxcdC5mblxcdFxcdD0gY2FuY2VsLFxcbjEyMTI6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IGRhdGEsXFxuMTIxMzpcXHRcXHRcXHQuY2FuY2VsX2FsbFxcdD0gY2FuY2VsX2FsbCxcXG4xMjE0OlxcdFxcdH07XFxuMTIxNTpcXHRcXG4xMjE2OlxcdFxcdC8qXFxuMTIxNzpcXHRcXHQgKiBGaXJzdCBjaGVjayBwZW5kaW5nIGxpc3QsIGlmIHdlJ3JlIGx1Y2t5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdFxcbjEyMTg6XFx0XFx0ICogZnJvbSB0aGVyZS4gQ0FOQ0VMX09LIG1lYW5zIHRoYXQgdGhlIHdvcmsgaXMgcmV0dXJuZWQgYXMtbmV3LFxcbjEyMTk6XFx0XFx0ICogbm8gY29tcGxldGlvbiB3aWxsIGJlIHBvc3RlZCBmb3IgaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjI0LjY0Njg5OTcxOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTQ2MTE5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgRGVlcGVyIGludG8gSS9PIEFjY291bnRpbmcgYW5kIENhbmNlbGxhdGlvbioqXG5cbkFscmlnaHQsIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGlzIHN5c3RlbSwgYnV0IG5vdyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHNvbWUgc3BlY2lmaWMgYXJlYXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgSS9PIGFjY291bnRpbmcgaXMgbWFuYWdlZCBhdCB0aGUgd29ya2VyIGxldmVsLCBhbmQgaG93IHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBmb3IgdGhlc2Ugd29ya2VycyB3b3Jrcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLiBJIHN1c3BlY3QgdGhpcyBpcyBjcnVjaWFsIGZvciB0cmFja2luZyBJL08gbWV0cmljcyByZWxhdGVkIHRvIGVhY2ggd29ya2VyLCB3aGljaCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IHZpdGFsIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLiBTbywgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBkdXJpbmcgZWFjaCB3b3JrZXIncyBJL08gcHJvY2Vzc2luZyBhbmQgaG93IGlzIHRoaXMgYWNjb3VudGVkIGZvcj8gQW5kIHRoZW4sIGVxdWFsbHkgaW1wb3J0YW50LCBob3cgZG9lcyB0aGUgY2FuY2VsbGF0aW9uIGZ1bmN0aW9uIGBpb193cV93b3JrZXJfY2FuY2VsYCBpbnRlZ3JhdGUgaW50byB0aGlzIEkvTyBhY2NvdW50aW5nIHNjaGVtZT8gSG93IGFyZSBvdXRzdGFuZGluZyBJL09zIGhhbmRsZWQgaWYgYSB3b3JrZXIgbmVlZHMgdG8gYmUgY2FuY2VsZWQ/IERvZXMgaXQgaW52b2x2ZSByZWxlYXNpbmcgcmVzb3VyY2VzLCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGUgd29yayB0aGF0ICp3YXMqIGRvbmUsIG9yIGRvZXMgaXQgcmVxdWlyZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFwcHJvYWNoPyBHZXR0aW5nIHRoZXNlIGFuc3dlcnMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHNvdW5kbmVzcyBvZiB0aGUgc3lzdGVtIHdpdGggcmVnYXJkIHRvIGVycm9yIGhhbmRsaW5nLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoyOC4xOTMwMjE4MDRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTIzMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dxX3dvcmtlcl9jYW5jZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvaW8td3EuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pby13cS5jPTEwODc9dm9pZCBpb193cV9oYXNoX3dvcmsoc3RydWN0IGlvX3dxX3dvcmsgKndvcmssIHZvaWQgKnZhbClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMTA5NC1cXG5pb191cmluZy9pby13cS5jOjEwOTU6c3RhdGljIGJvb2wgX19pb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcixcXG5pb191cmluZy9pby13cS5jLTEwOTYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTA3LVxcbmlvX3VyaW5nL2lvLXdxLmM6MTEwODpzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfY2FuY2VsKHN0cnVjdCBpb193b3JrZXIgKndvcmtlciwgdm9pZCAqZGF0YSlcXG5pb191cmluZy9pby13cS5jLTExMDkte1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTE2LVxcdHJhd19zcGluX2xvY2soXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTE3OlxcdGlmIChfX2lvX3dxX3dvcmtlcl9jYW5jZWwod29ya2VyLCBtYXRjaCwgd29ya2VyLVxcdTAwM2VjdXJfd29yaykpXFxuaW9fdXJpbmcvaW8td3EuYy0xMTE4LVxcdFxcdG1hdGNoLVxcdTAwM2Vucl9ydW5uaW5nKys7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExODQ9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg5LVxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTkwOlxcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG5pb191cmluZy9pby13cS5jLTExOTEtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDoyOC4yMzk5NTgzMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDQ2ODgyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgYW5kIGFuYWx5emluZyBsaW5lcyAxMDkwLTExNDkgaW4gYGlvX3VyaW5nL2lvLXdxLmNgOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJTy1XUSBDb2RlKipcblxuT2theSwgSSdtIHplcm9pbmcgaW4gb24gbGluZXMgMTA5MC0xMTQ5IHdpdGhpbiBgaW9fdXJpbmcvaW8td3EuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHNvbWUga2V5IElPLVdRIChJTyBXb3JrIFF1ZXVlKSBsb2dpYyByZXNpZGVzLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIGZ1bmN0aW9ucyBvciBjb2RlIGJsb2NrcyBkZWFsaW5nIHdpdGggd29yayBpdGVtIHByb2Nlc3NpbmcsIHF1ZXVlIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgZXZlbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIElPLVdRIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgbGlrZWx5IHdvcmsgcXVldWVzLCBjb21wbGV0aW9uIHF1ZXVlcywgYW5kIHRoZSByZWxhdGVkIGxvY2tzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsLlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgaG93IHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQsIGhvdyB0aGV5J3JlIGVucXVldWVkIG9udG8gdGhlIElPLVdRLCBob3cgdGhlIHdvcmtlciB0aHJlYWRzIHBpY2sgdGhlbSB1cCwgYW5kIGZpbmFsbHksIGhvdyB0aGUgcmVzdWx0cyBhcmUgaGFuZGxlZCBhbmQgcG9zc2libHkgcmV0dXJuZWQgdG8gdGhlIHN1Ym1pdHRpbmcgYXBwbGljYXRpb24gb3Iga2VybmVsIHN1YnN5c3RlbS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHNwZWNpZmljIGNvZGUgY2h1bmsgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgYGlvX3VyaW5nYCBhcmNoaXRlY3R1cmUuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBvciB2YXJpYWJsZSBuYW1lcyBpbiB0aGlzIHJhbmdlIHdpbGwgbGlrZWx5IGdpdmUgYXdheSB3aGljaCBhc3BlY3RzIG9mIHRoZSBJTy1XUSBhcmUgcmVsZXZhbnQgaGVyZS5cblxuSSdtIHJlYWR5IHRvIGxvb2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIHNlY3Rpb24uIEFueSBjbGV2ZXIgdHJpY2tzIHRoZXkgbWlnaHQgYmUgZW1wbG95aW5nIGZvciBiYXRjaGluZywgemVyby1jb3B5LCBvciBvdGhlciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgd2lsbCBjZXJ0YWlubHkgY2F0Y2ggbXkgYXR0ZW50aW9uLiBNeSBleHBlcnRpc2UgaW4gY29uY3VycmVudCBwcm9ncmFtbWluZyBhbmQgSU8gc3Vic3lzdGVtcyB3aWxsIGhlbHAgbWUgZXZhbHVhdGUgdGhlIGVmZmljaWVuY3kgYW5kIHRocmVhZCBzYWZldHkgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGNvbXBsZXggbWVtb3J5IG1hbmFnZW1lbnQgb3IgZXJyb3IgaGFuZGxpbmcgdGhhdCBjb3VsZCBiZSBhIGNhdXNlIGZvciBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MzcuMjg2ODQzNTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGJpdCA9IGhhc2hfcHRyKHZhbCwgSU9fV1FfSEFTSF9PUkRFUik7XFxuMTA5MjpcXHRcXHRhdG9taWNfb3IoSU9fV1FfV09SS19IQVNIRUQgfCAoYml0IFxcdTAwM2NcXHUwMDNjIElPX1dRX0hBU0hfU0hJRlQpLCBcXHUwMDI2d29yay1cXHUwMDNlZmxhZ3MpO1xcbjEwOTM6XFx0fVxcbjEwOTQ6XFx0XFxuMTA5NTpcXHRzdGF0aWMgYm9vbCBfX2lvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLFxcbjEwOTY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoLFxcbjEwOTc6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaylcXG4xMDk4OlxcdHtcXG4xMDk5OlxcdFxcdGlmICh3b3JrIFxcdTAwMjZcXHUwMDI2IG1hdGNoLVxcdTAwM2Vmbih3b3JrLCBtYXRjaC1cXHUwMDNlZGF0YSkpIHtcXG4xMTAwOlxcdFxcdFxcdGF0b21pY19vcihJT19XUV9XT1JLX0NBTkNFTCwgXFx1MDAyNndvcmstXFx1MDAzZWZsYWdzKTtcXG4xMTAxOlxcdFxcdFxcdF9fc2V0X25vdGlmeV9zaWduYWwod29ya2VyLVxcdTAwM2V0YXNrKTtcXG4xMTAyOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjExMDM6XFx0XFx0fVxcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTEwNjpcXHR9XFxuMTEwNzpcXHRcXG4xMTA4OlxcdHN0YXRpYyBib29sIGlvX3dxX3dvcmtlcl9jYW5jZWwoc3RydWN0IGlvX3dvcmtlciAqd29ya2VyLCB2b2lkICpkYXRhKVxcbjExMDk6XFx0e1xcbjExMTA6XFx0XFx0c3RydWN0IGlvX2NiX2NhbmNlbF9kYXRhICptYXRjaCA9IGRhdGE7XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdC8qXFxuMTExMzpcXHRcXHQgKiBIb2xkIHRoZSBsb2NrIHRvIGF2b2lkIC1cXHUwMDNlY3VyX3dvcmsgZ29pbmcgb3V0IG9mIHNjb3BlLCBjYWxsZXJcXG4xMTE0OlxcdFxcdCAqIG1heSBkZXJlZmVyZW5jZSB0aGUgcGFzc2VkIGluIHdvcmsuXFxuMTExNTpcXHRcXHQgKi9cXG4xMTE2OlxcdFxcdHJhd19zcGluX2xvY2soXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuMTExNzpcXHRcXHRpZiAoX19pb193cV93b3JrZXJfY2FuY2VsKHdvcmtlciwgbWF0Y2gsIHdvcmtlci1cXHUwMDNlY3VyX3dvcmspKVxcbjExMTg6XFx0XFx0XFx0bWF0Y2gtXFx1MDAzZW5yX3J1bm5pbmcrKztcXG4xMTE5OlxcdFxcdHJhd19zcGluX3VubG9jayhcXHUwMDI2d29ya2VyLVxcdTAwM2Vsb2NrKTtcXG4xMTIwOlxcdFxcbjExMjE6XFx0XFx0cmV0dXJuIG1hdGNoLVxcdTAwM2Vucl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2ICFtYXRjaC1cXHUwMDNlY2FuY2VsX2FsbDtcXG4xMTIyOlxcdH1cXG4xMTIzOlxcdFxcbjExMjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGlvX3dxX3JlbW92ZV9wZW5kaW5nKHN0cnVjdCBpb193cSAqd3EsXFxuMTEyNTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG4xMTI2OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fd3Ffd29yayAqd29yayxcXG4xMTI3OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fd3Ffd29ya19ub2RlICpwcmV2KVxcbjExMjg6XFx0e1xcbjExMjk6XFx0XFx0dW5zaWduZWQgaW50IGhhc2ggPSBpb19nZXRfd29ya19oYXNoKHdvcmspO1xcbjExMzA6XFx0XFx0c3RydWN0IGlvX3dxX3dvcmsgKnByZXZfd29yayA9IE5VTEw7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdGlmIChpb193cV9pc19oYXNoZWQod29yaykgXFx1MDAyNlxcdTAwMjYgd29yayA9PSB3cS1cXHUwMDNlaGFzaF90YWlsW2hhc2hdKSB7XFxuMTEzMzpcXHRcXHRcXHRpZiAocHJldilcXG4xMTM0OlxcdFxcdFxcdFxcdHByZXZfd29yayA9IGNvbnRhaW5lcl9vZihwcmV2LCBzdHJ1Y3QgaW9fd3Ffd29yaywgbGlzdCk7XFxuMTEzNTpcXHRcXHRcXHRpZiAocHJldl93b3JrIFxcdTAwMjZcXHUwMDI2IGlvX3dxX2lzX2hhc2hlZChwcmV2X3dvcmspIFxcdTAwMjZcXHUwMDI2XFxuMTEzNjpcXHRcXHRcXHQgICAgaW9fZ2V0X3dvcmtfaGFzaChwcmV2X3dvcmspID09IGhhc2gpXFxuMTEzNzpcXHRcXHRcXHRcXHR3cS1cXHUwMDNlaGFzaF90YWlsW2hhc2hdID0gcHJldl93b3JrO1xcbjExMzg6XFx0XFx0XFx0ZWxzZVxcbjExMzk6XFx0XFx0XFx0XFx0d3EtXFx1MDAzZWhhc2hfdGFpbFtoYXNoXSA9IE5VTEw7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXHR3cV9saXN0X2RlbChcXHUwMDI2YWNjdC1cXHUwMDNld29ya19saXN0LCBcXHUwMDI2d29yay1cXHUwMDNlbGlzdCwgcHJldik7XFxuMTE0MjpcXHR9XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdHN0YXRpYyBib29sIGlvX2FjY3RfY2FuY2VsX3BlbmRpbmdfd29yayhzdHJ1Y3QgaW9fd3EgKndxLFxcbjExNDU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuMTE0NjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fY2JfY2FuY2VsX2RhdGEgKm1hdGNoKVxcbjExNDc6XFx0e1xcbjExNDg6XFx0XFx0c3RydWN0IGlvX3dxX3dvcmtfbm9kZSAqbm9kZSwgKnByZXY7XFxuMTE0OTpcXHRcXHRzdHJ1Y3QgaW9fd3Ffd29yayAqd29yaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MzcuMjg2OTU4NTExWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2Njk5MDU4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkFuYWx5emluZyB0aGUgSS9PIFdvcmtxdWV1ZSBDYW5jZWxsYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBpb193cV93b3JrZXJfY2FuY2VsYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlIGJhc2VkIG9uIHR3byBmYWN0b3JzOiBgbWF0Y2gtXHUwMDNlbnJfcnVubmluZ2AgYW5kIGAhbWF0Y2gtXHUwMDNlY2FuY2VsX2FsbGAuIEJhc2ljYWxseSwgaXQncyBhIGNvbWJpbmVkIHN0YXRlIHJlcHJlc2VudGluZyBydW5uaW5nIHdvcmsgYW5kIHRoZSBkZXNpcmUgdG8gY2FuY2VsICpldmVyeXRoaW5nKi4gSW50dWl0aXZlbHksIHRoYXQgbWFrZXMgc2Vuc2UuIElmIHdvcmsgaXMgcnVubmluZyAqYW5kKiB3ZSBhcmVuJ3QgY2FuY2VsbGluZyBldmVyeXRoaW5nLCB0aGVuIGBpb193cV93b3JrZXJfY2FuY2VsYCBzaG91bGQgcmV0dXJuIHRydWUgKGFuZCBzaWduYWwgc29tZSBjb25kaXRpb24pLiBCdXQsIGxldCdzIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBpdHMgaW50ZXJuYWxzLlxuVGhlbiwgSSBzZWUgYGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyYCBpcyByZXR1cm5pbmcgYGJvb2xgIGFzIHdlbGwuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYWN0dWFsIGltcGxpY2F0aW9ucyBvZiBpdHMgYm9vbGVhbiByZXR1cm4gdmFsdWUgaXMsIGluIHRoaXMgY29udGV4dC4gSSdsbCBnbyBjaGVjayB0aGF0IGZ1bmN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTA6MzkuOTU2ODY3ODA4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU3NzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19hY2N0X2Zvcl9lYWNoX3dvcmtlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9pby13cS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9OTAxPXN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTk0Mi0gKi9cXG5pb191cmluZy9pby13cS5jOjk0MzpzdGF0aWMgYm9vbCBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG5pb191cmluZy9pby13cS5jLTk0NC1cXHRcXHRcXHRcXHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9OTY0PXN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy05NjgtXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuaW9fdXJpbmcvaW8td3EuYzo5Njk6XFx0XFx0aWYgKGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKFxcdTAwMjZ3cS1cXHUwMDNlYWNjdFtpXSwgZnVuYywgZGF0YSkpXFxuaW9fdXJpbmcvaW8td3EuYy05NzAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTExODQ9c3RhdGljIGJvb2wgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0xMTg5LVxcdHJhd19zcGluX2xvY2soXFx1MDAyNmFjY3QtXFx1MDAzZXdvcmtlcnNfbG9jayk7XFxuaW9fdXJpbmcvaW8td3EuYzoxMTkwOlxcdHJldCA9IGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKGFjY3QsIGlvX3dxX3dvcmtlcl9jYW5jZWwsIG1hdGNoKTtcXG5pb191cmluZy9pby13cS5jLTExOTEtXFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDo0MC4wMDU0NTM0MjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMxOTEyMDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyA5NDAtOTc1IG9mIGBpb191cmluZy9pby13cS5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYyB3aXRoaW4gdGhhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlLCBwcm9iYWJseSBzb21lIGNydWNpYWwgcGFydCBvZiB0aGUgaW9fd3EgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlIGZpbGUgYW5kIGZ1bmN0aW9uIG5hbWUsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCB0aGUgd29yayBxdWV1ZSdzIGludGVyYWN0aW9uIHdpdGggSS9PIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0YXNrIHNjaGVkdWxpbmcsIGNvbXBsZXRpb24gaGFuZGxpbmcsIGVycm9yIG1hbmFnZW1lbnQsIG9yIHJlc291cmNlIGFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBleGVjdXRpb24gYW5kL29yIGNvbXBsZXRpb24gb2YgSS9PIHJlcXVlc3RzLiBMZXQncyBzZWUgaG93IHRoZSB3b3JrIHF1ZXVlIGlzIG1hbmFnaW5nIEkvTyBvcGVyYXRpb25zIGF0IHRoaXMganVuY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDo1MDo0NC4zMjQ1NzY3NDhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQwOlxcdCAqIEl0ZXJhdGUgdGhlIHBhc3NlZCBpbiBsaXN0IGFuZCBjYWxsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaFxcbiA5NDE6XFx0ICogd29ya2VyIHRoYXQgaXNuJ3QgZXhpdGluZ1xcbiA5NDI6XFx0ICovXFxuIDk0MzpcXHRzdGF0aWMgYm9vbCBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdCxcXG4gOTQ0OlxcdFxcdFxcdFxcdFxcdCAgICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEpXFxuIDk0NjpcXHR7XFxuIDk0NzpcXHRcXHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XFxuIDk0ODpcXHRcXHRib29sIHJldCA9IGZhbHNlO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3b3JrZXIsIFxcdTAwMjZhY2N0LVxcdTAwM2VhbGxfbGlzdCwgYWxsX2xpc3QpIHtcXG4gOTUxOlxcdFxcdFxcdGlmIChpb193b3JrZXJfZ2V0KHdvcmtlcikpIHtcXG4gOTUyOlxcdFxcdFxcdFxcdC8qIG5vIHRhc2sgaWYgbm9kZSBpcy93YXMgb2ZmbGluZSAqL1xcbiA5NTM6XFx0XFx0XFx0XFx0aWYgKHdvcmtlci1cXHUwMDNldGFzaylcXG4gOTU0OlxcdFxcdFxcdFxcdFxcdHJldCA9IGZ1bmMod29ya2VyLCBkYXRhKTtcXG4gOTU1OlxcdFxcdFxcdFxcdGlvX3dvcmtlcl9yZWxlYXNlKHdvcmtlcik7XFxuIDk1NjpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbiA5NTc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDk1ODpcXHRcXHRcXHR9XFxuIDk1OTpcXHRcXHR9XFxuIDk2MDpcXHRcXG4gOTYxOlxcdFxcdHJldHVybiByZXQ7XFxuIDk2MjpcXHR9XFxuIDk2MzpcXHRcXG4gOTY0OlxcdHN0YXRpYyB2b2lkIGlvX3dxX2Zvcl9lYWNoX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLFxcbiA5NjU6XFx0XFx0XFx0XFx0XFx0ICBib29sICgqZnVuYykoc3RydWN0IGlvX3dvcmtlciAqLCB2b2lkICopLFxcbiA5NjY6XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhKVxcbiA5Njc6XFx0e1xcbiA5Njg6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJT19XUV9BQ0NUX05SOyBpKyspXFxuIDk2OTpcXHRcXHRcXHRpZiAoaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoXFx1MDAyNndxLVxcdTAwM2VhY2N0W2ldLCBmdW5jLCBkYXRhKSlcXG4gOTcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NzE6XFx0fVxcbiA5NzI6XFx0XFxuIDk3MzpcXHRzdGF0aWMgYm9vbCBpb193cV93b3JrZXJfd2FrZShzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIsIHZvaWQgKmRhdGEpXFxuIDk3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjUwOjQ0LjMyNDcwMDgzOFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDkwNzQ1NTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgaW8td3EgQ2FuY2VsbGF0aW9uIFBhdGNoIGFuZCBLTVNBTiBSZXF1aXJlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG9wdGltaXplcyB0aGUgYGlvX3dxX2NhbmNlbF9ydW5uaW5nX3dvcmtgIGZ1bmN0aW9uLiBCYXNpY2FsbHksIGl0J3MgYWJvdXQgbWFraW5nIHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyBtb3JlIGVmZmljaWVudC4gUHJldmlvdXNseSwgZXZlbiBpZiBhIG1hdGNoaW5nIHdvcmsgaXRlbSB3YXMgZm91bmQgYW5kIGNhbmNlbGVkIHdpdGhpbiBvbmUgYWNjb3VudCAoYHdxLVx1MDAzZWFjY3RbaV1gKSwgdGhlIGxvb3Agd291bGQgY29udGludWUgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgb3RoZXIgYWNjb3VudHMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sYCByZXR1cm4gdmFsdWUgZnJvbSBgaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrYCwgd2hpY2ggaXMsIGluIHR1cm4sIHByb3BhZ2F0ZWQgZnJvbSBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgLCB0byBhbGxvdyBlYXJseSBleGl0IGZyb20gdGhlIGxvb3AgaWYgYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCBhbmQgYGNhbmNlbF9hbGxgIGlzIGBmYWxzZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG8gd2UgbmVlZCB0byBydW4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZm9yIHRoaXM/IExldCdzIGdvIHRocm91Z2ggaXQgc3RlcCBieSBzdGVwLiBJJ20gdGhpbmtpbmcgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzIEtNU0FOJ3MgbWFpbiBjb25jZXJuLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGNvbnNpZGVyZWQ6XG5cbkZpcnN0LCBsZXQncyByZW1lbWJlciB0aGUgZ29hbC4gS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciB0b29scyBsaWtlIExPQ0tERVAgYXJlIGdvb2QgZm9yIGNhdGNoaW5nIG1lbW9yeSBlcnJvcnMsIGxvY2tpbmcgaXNzdWVzLCBhbmQgb3RoZXIgY29tbW9uIGJ1Z3MuIEtNU0FOIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgd2UncmUgd29ycmllZCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSAqc3BlY2lmaWNhbGx5Ki5cblxuTm93LCBsZXQncyBleGFtaW5lIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBmdW5jdGlvbiBgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXJgIHJldHVybnMgYSBib29sZWFuLCBhbmQgdGhpcyBib29sZWFuIGlzIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgbmFtZWQgYHJldGAuIFRoYXQgdmFyaWFibGUgaXMgKmluaXRpYWxpemVkKiBpbW1lZGlhdGVseSB3aGVuIGFzc2lnbmVkLCBzbyBpdCBjYW4ndCBiZSB1bmluaXRpYWxpemVkLiBJdCdzIHRoZW4gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxvZ2ljIGZsb3cuXG5cbkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBhbnN3ZXIgaXMgYSBjbGVhciBcIm5vXCIuIExldCdzIHRoaW5rIGFib3V0IHRoZSBydWxlczpcblxuMS4gICoqS2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzOioqIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAsIGlvY3Rscywgb3Igc29ja2V0IG9wdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBjb250cm9sIGZsb3cgZm9yIGFuIGV4aXN0aW5nIGNhbmNlbGxhdGlvbiBtZWNoYW5pc20uXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBUaGUgYHJldGAgdmFyaWFibGUgaXMgYXNzaWduZWQgZnJvbSBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYSBib29sZWFuLiBTbyBpdCdzIGluaXRpYWxpemVkIGZyb20gdGhlIHN0YXJ0LiBOb3RoaW5nIGhlcmUgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlLiBUaGUgbG9naWMgY2hhbmdlIGlzIGFib3V0IGJyZWFraW5nIG91dCBvZiB0aGUgbG9vcCBlYXJseSBpZiB3b3JrIGlzIGNhbmNlbGVkLCBub3QgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb25zIG9yIHdheXMgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjQuICAqKkJ1ZmZlciBhY2Nlc3M6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgaGVyZSB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyBvciB3cml0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIHNpbXBseSBvcHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgbG9naWMuXG5cbkluIHNob3J0LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhIGNvbnRyb2wtZmxvdyBjaGFuZ2Ugd2l0aGluIGV4aXN0aW5nIGNvZGUuIFRoZSBwYXRjaCBoYXMgKm5vdGhpbmcqIHRvIGRvIHdpdGggaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYWJvdXQgb3B0aW1pemluZyBhbiBleGlzdGluZyBjYW5jZWxsYXRpb24gcHJvY2Vzcy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmFjZSBjb25kaXRpb25zIChhbmQgSSBkb24ndCBzZWUgYW55KSwgd2lsbCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAwNiwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6NTE6MDUuMjMyMTU4ODA2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKCkgYW5kIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHRvIHJldHVybiBlYXJseSB3aGVuIGEgbWF0Y2hpbmcgd29ya2VyIGhhcyBiZWVuIGNhbmNlbGVkIGFuZCBjYW5jZWxfYWxsIGlzIGZhbHNlLiBJdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBieSBwcm9wYWdhdGluZyB0aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcigpIHRocm91Z2ggaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgc28gdGhlIGxvb3Agb3ZlciBhY2NvdW50cyBicmVha3MgZWFybHkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgaXMgZGlyZWN0bHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciwgd2hpY2ggYWx3YXlzIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXplZCBib29sKS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgd2l0aCBpb193b3JrZXIgb3IgaW9fd3EgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpb193cV9jYW5jZWxfcnVubmluZ193b3JrKCkgYW5kIGlvX2FjY3RfY2FuY2VsX3J1bm5pbmdfd29yaygpIHRvIHJldHVybiBlYXJseSB3aGVuIGEgbWF0Y2hpbmcgd29ya2VyIGhhcyBiZWVuIGNhbmNlbGVkIGFuZCBjYW5jZWxfYWxsIGlzIGZhbHNlLiBJdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyBieSBwcm9wYWdhdGluZyB0aGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlcigpIHRocm91Z2ggaW9fYWNjdF9jYW5jZWxfcnVubmluZ193b3JrKCkgc28gdGhlIGxvb3Agb3ZlciBhY2NvdW50cyBicmVha3MgZWFybHkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByZWFkcyBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgaXMgZGlyZWN0bHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBpb19hY2N0X2Zvcl9lYWNoX3dvcmtlciwgd2hpY2ggYWx3YXlzIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXplZCBib29sKS4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgd2l0aCBpb193b3JrZXIgb3IgaW9fd3EgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[1] Phase: Succeeded StartedAt: 2026-09-13 10:51:27 +0000 UTC FinishedAt: 2026-09-13 10:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 10:51:27 +0000 UTC FinishedAt: 2026-09-13 10:51:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2] Phase: Succeeded StartedAt: 2026-09-13 10:51:27 +0000 UTC FinishedAt: 2026-09-13 14:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 10:51:27 +0000 UTC FinishedAt: 2026-09-13 14:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 10:51:27 +0000 UTC FinishedAt: 2026-09-13 10:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 10:51:27 +0000 UTC FinishedAt: 2026-09-13 10:51:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbbfc2/series-workflowbbfc2-convert-artifact-3870413593/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 10:51:55 +0000 UTC FinishedAt: 2026-09-13 11:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 10:51:55 +0000 UTC FinishedAt: 2026-09-13 11:13:37 +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:*08b484be-91a1-4083-a590-945ce79620c9,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-workflowbbfc2/series-workflowbbfc2-convert-artifact-3870413593/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": "63d352cb-b221-4695-b1d4-26113c94905b", "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-workflowbbfc2/series-workflowbbfc2-build-action-3752523447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:51:55 +0000 UTC FinishedAt: 2026-09-13 11:13:27 +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:*08b484be-91a1-4083-a590-945ce79620c9,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-workflowbbfc2/series-workflowbbfc2-convert-artifact-3870413593/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": "63d352cb-b221-4695-b1d4-26113c94905b", "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-workflowbbfc2/series-workflowbbfc2-build-action-3752523447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 11:13:37 +0000 UTC FinishedAt: 2026-09-13 11:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 11:13:37 +0000 UTC FinishedAt: 2026-09-13 11:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 11:13:37 +0000 UTC FinishedAt: 2026-09-13 11:14:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 11:13:37 +0000 UTC FinishedAt: 2026-09-13 11:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbbfc2/series-workflowbbfc2-convert-artifact-3597387500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 11:14:11 +0000 UTC FinishedAt: 2026-09-13 11:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 11:14:11 +0000 UTC FinishedAt: 2026-09-13 11:15:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63d352cb-b221-4695-b1d4-26113c94905b,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-workflowbbfc2/series-workflowbbfc2-build-action-3752523447/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-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 11:16:07 +0000 UTC FinishedAt: 2026-09-13 11:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:16:07 +0000 UTC FinishedAt: 2026-09-13 11:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 11:16:07 +0000 UTC FinishedAt: 2026-09-13 11:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 11:16:07 +0000 UTC FinishedAt: 2026-09-13 11:35:37 +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:*08b484be-91a1-4083-a590-945ce79620c9,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-workflowbbfc2/series-workflowbbfc2-convert-artifact-3597387500/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": "fcf4fc08-3b3a-43a7-8cf2-f85019851732", "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-workflowbbfc2/series-workflowbbfc2-build-action-3841105288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 11:16:07 +0000 UTC FinishedAt: 2026-09-13 11:35:27 +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:*08b484be-91a1-4083-a590-945ce79620c9,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-workflowbbfc2/series-workflowbbfc2-convert-artifact-3597387500/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": "fcf4fc08-3b3a-43a7-8cf2-f85019851732", "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-workflowbbfc2/series-workflowbbfc2-build-action-3841105288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 11:35:37 +0000 UTC FinishedAt: 2026-09-13 11:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 11:35:37 +0000 UTC FinishedAt: 2026-09-13 11:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 11:35:37 +0000 UTC FinishedAt: 2026-09-13 11:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 11:35:37 +0000 UTC FinishedAt: 2026-09-13 11:37:20 +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:*fcf4fc08-3b3a-43a7-8cf2-f85019851732,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-workflowbbfc2/series-workflowbbfc2-build-action-3841105288/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-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 14:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 14:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"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:*63d352cb-b221-4695-b1d4-26113c94905b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fcf4fc08-3b3a-43a7-8cf2-f85019851732,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-workflowbbfc2/series-workflowbbfc2-build-action-3752523447/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-workflowbbfc2/series-workflowbbfc2-build-action-3841105288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 11:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 11:37:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"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-workflowbbfc2/series-workflowbbfc2-convert-artifact-3107025621/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 11:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 11:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:37:30 +0000 UTC FinishedAt: 2026-09-13 11:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 11:37:40 +0000 UTC FinishedAt: 2026-09-13 14:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_acct_cancel_running_work","io_wq_cancel_running_work","io_wq_cancel_cb","io_async_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11773ae6da9c9d92f5d1def78f7e70a9f1fa7b1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","IO_WQ"],"series_id":"886ff704-6e85-4a82-8f0a-aa56434dbdd9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 11:37:40 +0000 UTC FinishedAt: 2026-09-13 14:41:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63d352cb-b221-4695-b1d4-26113c94905b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fcf4fc08-3b3a-43a7-8cf2-f85019851732,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-workflowbbfc2/series-workflowbbfc2-build-action-3752523447/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-workflowbbfc2/series-workflowbbfc2-build-action-3841105288/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-workflowbbfc2/series-workflowbbfc2-convert-artifact-3107025621/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,}