Name: series-workfloww79gh Phase: Succeeded StartedAt: 2026-09-05 23:46:13 +0000 UTC FinishedAt: 2026-09-06 03:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[0] Phase: Succeeded StartedAt: 2026-09-05 23:46:13 +0000 UTC FinishedAt: 2026-09-05 23:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 23:46:13 +0000 UTC FinishedAt: 2026-09-05 23:48:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "20cab322c95cea0327215bb81a05df69336032dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "20cab322c95cea0327215bb81a05df69336032dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "fc5ba4c7-72f9-4d7a-990a-bacc388b368b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_load", "zswap_invalidate", "zswap_writeback_entry", "zswap_compressor_param_set", "zswap_total_pages", "zswap_entry_free", "zswap_decompress", "zswap_store_page", "__zswap_pool_empty", "__zswap_pool_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDssCiAgICAmIzM0O3pzd2FwX2VudHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBwb29sIG1hbmFnZW1lbnQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rZWQgbGlzdCBvZiBwb29scyBhbmQgOC1ieXRlIHBvb2wgcG9pbnRlciBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCB3aXRoIGFuIFhBcnJheSBsb29rdXAgdGFibGUgYW5kIGEgMS1ieXRlIHBvb2wgaW5kZXggKGBwb29sX2lkeGApLCBhbG9uZ3NpZGUgdHJhbnNpdGlvbmluZyBwb29sIGNsZWFudXAgdG8gYHJjdV93b3JrYC5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBmaWVsZHMgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgYW5kIGBzdHJ1Y3QgenN3YXBfcG9vbGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgcHVibGlzaGVkIG9yIGFjY2Vzc2VkLiBgcG9vbF9pZHhgIGlzIHNldCB1cG9uIGNvbXByZXNzaW9uIHN1Y2Nlc3MgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5IGludG8gdGhlIHN3YXAgWEFycmF5LlxuMi4gVXNlci1zcGFjZSBJbmZvIExlYWtzOiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIHN5c2NhbGwgcmV0dXJuLCBldGMuKS5cbjMuIFJlbGV2YW50IEJ1ZyBDbGFzc2VzOiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCBSQ1UgbGlmZXRpbWUvZ3JhY2UtcGVyaW9kIHRyYWNraW5nLCBYQXJyYXkgaW5kZXhpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDA0MWZlZGZhMmVjYWU2MDI2NTVjZGQxZmJiYmVlNDk3NTg0ZWM5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMjM6NDc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjMxY2YwZWY0M2QyMzYgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdF9scnUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcdTAwM2VcbiBcbkBAIC0xNTQsMTIgJiM0MzsxNTUsMjQgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4mIzQzO1x0dTggaWR4O1xuIFx0Y2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHNcbiYjNDM7ICogdGhlIHJlc2VydmVkIGlkIDAgdW5hbGxvY2F0ZWQsIHNvIGxvb2tpbmcgaXQgdXAgbmV2ZXIgYWxpYXNlcyBhIGxpdmVcbiYjNDM7ICogcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlblxuJiM0MzsgKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2VcbiYjNDM7ICogY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDFcbiYjNDM7I2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcbiYjNDM7c3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDtcbiYjNDM7XG4gLyogR2xvYmFsIExSVSBsaXN0cyBzaGFyZWQgYnkgYWxsIHpzd2FwIHBvb2xzLiAqL1xuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XG4gXG5AQCAtMTgyLDcgJiM0MzsxOTUsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFja1xuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXG4tICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluXG4mIzQzOyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbi5cbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXG5AQCAtMTkxLDE5ICYjNDM7MjA0LDMwIEBAIHN0cnVjdCB6c3dhcF9lbnRyeSB7XG4gXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbiBcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gXHRib29sIHJlZmVyZW5jZWQ7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiYjNDM7XHR1OCBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIHBvb2wgc3RheXMgYWxpdmUgYWZ0ZXIgdGhpcyByZXR1cm5zIGJlY2F1c2UgYSBzdG9yZWQgZW50cnkgaG9sZHMgYVxuJiM0MzsgKiByZWZlcmVuY2UgdG8gaXRzIHBvb2wgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0cG9vbCA9IHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBvb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gXG4tLyogUkNVLXByb3RlY3RlZCBpdGVyYXRpb24gKi9cbi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTtcbi0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqL1xuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfcG9vbHNfbG9jayk7XG4gLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovXG4gc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbiYjNDM7XHR1MzIgaWQ7XG4gXG4gXHRpZiAoIXpzd2FwX2hhc19wb29sIFx1MDAyNlx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMzIwLDEyICYjNDM7MzQ1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geGFfYWxsb2NfYmgoXHUwMDI2enN3YXBfcG9vbHMsIFx1MDAyNmlkLCBwb29sLFxuJiM0MztcdFx0XHQgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSxcbiYjNDM7XHRcdFx0ICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgJiM0MzsgMSk7XG4mIzQzO1x0XHRnb3RvIHhhX2ZhaWw7XG4mIzQzO1x0fVxuJiM0MztcdHBvb2wtXHUwMDNlaWR4ID0gaWQ7XG4gXG4gXHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2NyZWF0ZWRcJiMzNDssIHBvb2wpO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gXG4mIzQzO3hhX2ZhaWw6XG4mIzQzO1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiByZWZfZmFpbDpcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbkBAIC0zNzksMTYgJiM0Mzs0MTYsMTQgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLFxuLVx0XHRcdFx0XHRcdHJlbGVhc2Vfd29yayk7XG4tXG4tXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcbiBcbiBcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXG4gXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXHUwMDI2cG9vbC1cdTAwM2VyZWYpKTtcbiBcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gXG4tXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4mIzQzO1x0LyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cbiBcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcbiB9XG4gXG5AQCAtNDAwLDE2ICYjNDM7NDM1LDE2IEBAIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIFxuIFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4mIzQzO1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuIFxuLVx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4mIzQzO1x0X194YV9lcmFzZShcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cdTAwM2VpZHgpO1xuIFxuLVx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrKTtcbiYjNDM7XHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuJiM0MztcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yayk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbiYjNDM7XHR4YV91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbkBAIC00MzUsNyAmIzQzOzQ3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbiYjNDM7XHRwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCxcbiYjNDM7XHRcdFx0XHQgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKSk7XG4gXHRXQVJOX09OQ0UoIXBvb2wgXHUwMDI2XHUwMDI2IHpzd2FwX2hhc19wb29sLFxuIFx0XHQgIFwmIzM0OyVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbkBAIC00NDQsNyAmIzQzOzQ4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiBcbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuIHtcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spO1xuIFxuIFx0cmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7XG4gfVxuQEAgLTQ2NCwxNCAmIzQzOzUwMCwxNSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4mIzQzOy8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcilcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jayk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcdTAwMjZ6c3dhcF9wb29scywgbGlzdCkge1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbCkge1xuIFx0XHRpZiAoc3RyY21wKHBvb2wtXHUwMDNldGZtX25hbWUsIGNvbXByZXNzb3IpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHQvKiBpZiB3ZSBjYW4mIzM5O3QgZ2V0IGl0LCBpdCYjMzk7cyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbkBAIC00OTcsOSAmIzQzOzUzNCwxNSBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogcmN1X3JlYWRfbG9jaygpIGlzIHJlcXVpcmVkIGhlcmUsIG5vdCBqdXN0IGZvciB4YV9mb3JfZWFjaCgpOiBpdCBhbHNvXG4mIzQzO1x0ICoga2VlcHMgZWFjaCBwb29sIGFsaXZlIHdoaWxlIGl0IGlzIGRlcmVmZXJlbmNlZCwgc2luY2UgYSBjb25jdXJyZW50bHlcbiYjNDM7XHQgKiByZXRpcmVkIHBvb2wgaXMgZnJlZWQgdmlhIHF1ZXVlX3JjdV93b3JrKCkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXG4mIzQzO1x0ICovXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcdTAwMjZ6c3dhcF9wb29scywgbGlzdClcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpXG4gXHRcdHRvdGFsICYjNDM7PSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cdTAwM2V6c19wb29sKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTU1NiwyMCAmIzQzOzU5OSwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdH1cbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbiYjNDM7XHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdHBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDt1c2luZyBleGlzdGluZ1wmIzM0OywgcG9vbCk7XG4gXHRcdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XG4tXHRcdGxpc3RfZGVsX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuIFx0fVxuJiM0MztcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbiYjNDM7XHRpZiAoIXBvb2wpIHtcbiBcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKVxuIFx0XHQgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluXG5AQCAtNTg2LDIzICYjNDM7NjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4mIzQzO1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRpZiAoIXJldCkge1xuIFx0XHRwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpO1xuLVx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0fSBlbHNlIGlmIChwb29sKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHNcbi1cdFx0ICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbiYjNDM7XHR4YV91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xuIFxuIFx0LypcbiBcdCAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCxcbkBAIC03NTEsOSAmIzQzOzc4NSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuJiM0MztcbiBcdHpzd2FwX2xydV9kZWwoZW50cnkpO1xuLVx0enNfZnJlZShlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4tXHR6c3dhcF9wb29sX3B1dChlbnRyeS1cdTAwM2Vwb29sKTtcbiYjNDM7XHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcbiYjNDM7XHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuJiM0MztcdFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XG4mIzQzO1x0fVxuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKSB7XG4gXHRcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXHUwMDNlb2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHRcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVx1MDAzZW9iamNnKTtcbkBAIC05MTAsMTIgJiM0Mzs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4O1xuIFx0aW50IHJldCA9IDAsIGRsZW47XG4gXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cdTAwM2VhY29tcF9jdHgpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZhY29tcF9jdHgtXHUwMDNlbXV0ZXgpO1xuIFx0enNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUsIGlucHV0LCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuQEAgLTk1MSw3ICYjNDM7OTkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCYjMzQ7RGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdHN3cF90eXBlKGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbiBcdFx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbi1cdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXRmbV9uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0MDksNiAmIzQzOzE0NTAsMTYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuIFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnk6IGNvbXByZXNzaW9uIGhhc1xuJiM0MztcdCAqIHN1Y2NlZWRlZCBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBwaW5uZWQgYnkgdGhpcyBzdG9yZSwgc28gdGhlIGlkIGlzXG4mIzQzO1x0ICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnlcbiYjNDM7XHQgKiBpcyBuZXZlciBicmllZmx5IHZpc2libGUgd2l0aCBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgb3ZlciBmcm9tIHNsYWJcbiYjNDM7XHQgKiByZXVzZSwgd2hpY2ggenN3YXBfZW50cnlfcG9vbCgpIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIHRvIGFuXG4mIzQzO1x0ICogdW5yZWxhdGVkIGxpdmUgcG9vbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlbnRyeS1cdTAwM2Vwb29sX2lkeCA9IHBvb2wtXHUwMDNlaWR4O1xuJiM0MztcbiBcdG9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSxcbiBcdFx0ICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTQ1NCw3ICYjNDM7MTUwNSw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXG4gXHQgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LlxuIFx0ICovXG4tXHRlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbkBAIC0xNzkwLDcgJiM0MzsxODQwLDcgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxuIFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbiBcdGlmIChwb29sKSB7XG4gXHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cJiMzNDssIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG4gXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDssCiAgICAmIzM0O3pzd2FwX2VudHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDA0MWZlZGZhMmVjYWU2MDI2NTVjZGQxZmJiYmVlNDk3NTg0ZWM5YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMjM6NDc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBmM2FlM2M4MWU0OGVhLi4zMWNmMGVmNDNkMjM2IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTM0LDYgJiM0MzszNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvd3JpdGViYWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3pzbWFsbG9jLmgmZ3Q7CiAKQEAgLTE1NCwxMiAmIzQzOzE1NSwyNCBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7CiAJc3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7CiAJc3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDsKIAlzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7CiYjNDM7CXN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiYjNDM7CXU4IGlkeDsKIAljaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogfTsKIAomIzQzOy8qCiYjNDM7ICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzCiYjNDM7ICogdGhlIHJlc2VydmVkIGlkIDAgdW5hbGxvY2F0ZWQsIHNvIGxvb2tpbmcgaXQgdXAgbmV2ZXIgYWxpYXNlcyBhIGxpdmUKJiM0MzsgKiBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUgeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuCiYjNDM7ICogZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tIGEgcGVyY3B1X3JlZiByZWxlYXNlCiYjNDM7ICogY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxCiYjNDM7I2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVgKJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7CiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7CiYjNDM7CiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovCiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1OwogCkBAIC0xODIsNyAmIzQzOzE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyOwogICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2sKICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyCiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC4KLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbgomIzQzOyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbi4KICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YQogICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvCiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuCkBAIC0xOTEsMTkgJiM0MzsyMDQsMzAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHsKIAlzd3BfZW50cnlfdCBzd3BlbnRyeTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWJvb2wgcmVmZXJlbmNlZDsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdTggcG9vbF9pZHg7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIHBvb2wgc3RheXMgYWxpdmUgYWZ0ZXIgdGhpcyByZXR1cm5zIGJlY2F1c2UgYSBzdG9yZWQgZW50cnkgaG9sZHMgYQomIzQzOyAqIHJlZmVyZW5jZSB0byBpdHMgcG9vbCAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXBvb2wgPSB4YV9sb2FkKCZhbXA7enN3YXBfcG9vbHMsIGVudHJ5LSZndDtwb29sX2lkeCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcG9vbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdOwogCi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqLwotc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7Ci0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTsKIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqLwogc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiAKQEAgLTI3NSw2ICYjNDM7Mjk5LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCWNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcMCAqLwogCWludCByZXQsIGNwdTsKJiM0MzsJdTMyIGlkOwogCiAJaWYgKCF6c3dhcF9oYXNfcG9vbCAmYW1wOyZhbXA7ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTMyMCwxMiAmIzQzOzM0NSwyNCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJCQkgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCkKIAkJZ290byByZWZfZmFpbDsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3Bvb2wtJmd0O2xpc3QpOwomIzQzOwomIzQzOwlyZXQgPSB4YV9hbGxvY19iaCgmYW1wO3pzd2FwX3Bvb2xzLCAmYW1wO2lkLCBwb29sLAomIzQzOwkJCSAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLAomIzQzOwkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChyZXQgPT0gLUVCVVNZKQomIzQzOwkJCXByX2VycigmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgJiM0MzsgMSk7CiYjNDM7CQlnb3RvIHhhX2ZhaWw7CiYjNDM7CX0KJiM0MzsJcG9vbC0mZ3Q7aWR4ID0gaWQ7CiAKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAogCXJldHVybiBwb29sOwogCiYjNDM7eGFfZmFpbDoKJiM0MzsJcGVyY3B1X3JlZl9leGl0KCZhbXA7cG9vbC0mZ3Q7cmVmKTsKIHJlZl9mYWlsOgogCWNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgJmFtcDtwb29sLSZndDtub2RlKTsKIApAQCAtMzc5LDE2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCkKIAogc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksCi0JCQkJCQlyZWxlYXNlX3dvcmspOwotCi0Jc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLAomIzQzOwkJCQkJICAgICAgIHR5cGVvZigqcG9vbCksIHJlbGVhc2VfcndvcmspOwogCiAJLyogbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBnZXQgYSByZWYuLi4gKi8KIAlXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oJmFtcDtwb29sLSZndDtyZWYpKTsKIAlwZXJjcHVfcmVmX2V4aXQoJmFtcDtwb29sLSZndDtyZWYpOwogCi0JLyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwomIzQzOwkvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwogCXpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTsKIH0KIApAQCAtNDAwLDE2ICYjNDM7NDM1LDE2IEBAIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQogCiAJcG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJeGFfbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzKTsKIAogCVdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7CiAKLQlsaXN0X2RlbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0KTsKJiM0MzsJX194YV9lcmFzZSgmYW1wO3pzd2FwX3Bvb2xzLCBwb29sLSZndDtpZHgpOwogCi0JSU5JVF9XT1JLKCZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7Ci0Jc2NoZWR1bGVfd29yaygmYW1wO3Bvb2wtJmd0O3JlbGVhc2Vfd29yayk7CiYjNDM7CUlOSVRfUkNVX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7CiYjNDM7CXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsICZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV9yd29yayk7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiB9CiAKIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQpAQCAtNDM1LDcgJiM0Mzs0NzAsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAKLQlwb29sID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdSgmYW1wO3pzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTsKJiM0MzsJcG9vbCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh6c3dhcF9jdXJyZW50X3Bvb2wsCiYjNDM7CQkJCSAgICAgbG9ja2RlcF9pc19oZWxkKCZhbXA7enN3YXBfcG9vbHMueGFfbG9jaykpOwogCVdBUk5fT05DRSghcG9vbCAmYW1wOyZhbXA7IHpzd2FwX2hhc19wb29sLAogCQkgICYjMzQ7JXM6IG5vIHBhZ2Ugc3RvcmFnZSBwb29sIVxuJiMzNDssIF9fZnVuY19fKTsKIApAQCAtNDQ0LDcgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCiAKIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCiB7Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt6c3dhcF9wb29scy54YV9sb2NrKTsKIAogCXJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpOwogfQpAQCAtNDY0LDE0ICYjNDM7NTAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKQogCXJldHVybiBwb29sOwogfQogCi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovCiYjNDM7LyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqLwogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWQ7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3pzd2FwX3Bvb2xzLnhhX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkgewomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3pzd2FwX3Bvb2xzLCBpZCwgcG9vbCkgewogCQlpZiAoc3RyY21wKHBvb2wtJmd0O3RmbV9uYW1lLCBjb21wcmVzc29yKSkKIAkJCWNvbnRpbnVlOwogCQkvKiBpZiB3ZSBjYW4mIzM5O3QgZ2V0IGl0LCBpdCYjMzk7cyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi8KQEAgLTQ5Nyw5ICYjNDM7NTM0LDE1IEBAIHVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZDsKIAomIzQzOwkvKgomIzQzOwkgKiByY3VfcmVhZF9sb2NrKCkgaXMgcmVxdWlyZWQgaGVyZSwgbm90IGp1c3QgZm9yIHhhX2Zvcl9lYWNoKCk6IGl0IGFsc28KJiM0MzsJICoga2VlcHMgZWFjaCBwb29sIGFsaXZlIHdoaWxlIGl0IGlzIGRlcmVmZXJlbmNlZCwgc2luY2UgYSBjb25jdXJyZW50bHkKJiM0MzsJICogcmV0aXJlZCBwb29sIGlzIGZyZWVkIHZpYSBxdWV1ZV9yY3Vfd29yaygpIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgomIzQzOwkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDt6c3dhcF9wb29scywgaWQsIHBvb2wpCiAJCXRvdGFsICYjNDM7PSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC0mZ3Q7enNfcG9vbCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTU1NiwyMCAmIzQzOzU5OSwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbQogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQomIzQzOwl4YV9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCXBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpOwogCWlmIChwb29sKSB7CiAJCXpzd2FwX3Bvb2xfZGVidWcoJiMzNDt1c2luZyBleGlzdGluZyYjMzQ7LCBwb29sKTsKIAkJV0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTsKLQkJbGlzdF9kZWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiAJfQomIzQzOwl4YV91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCi0JaWYgKCFwb29sKQomIzQzOwlpZiAoIXBvb2wpIHsKIAkJcG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpOwotCWVsc2UgewomIzQzOwl9IGVsc2UgewogCQkvKgogCQkgKiBSZXN0b3JlIHRoZSBpbml0aWFsIHJlZiBkcm9wcGVkIGJ5IHBlcmNwdV9yZWZfa2lsbCgpCiAJCSAqIHdoZW4gdGhlIHBvb2wgd2FzIGRlY29tbWlzc2lvbmVkIGFuZCBzd2l0Y2ggaXQgYWdhaW4KQEAgLTU4NiwyMyAmIzQzOzYyNiwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbQogCWVsc2UKIAkJcmV0ID0gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCiAJaWYgKCFyZXQpIHsKIAkJcHV0X3Bvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnQoKTsKLQkJbGlzdF9hZGRfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTsKIAkJenN3YXBfaGFzX3Bvb2wgPSB0cnVlOwogCX0gZWxzZSBpZiAocG9vbCkgewotCQkvKgotCQkgKiBBZGQgdGhlIHBvc3NpYmx5IHByZS1leGlzdGluZyBwb29sIHRvIHRoZSBlbmQgb2YgdGhlIHBvb2xzCi0JCSAqIGxpc3Q7IGlmIGl0JiMzOTtzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0JiMzOTtsbCBiZSByZW1vdmVkIGFuZAotCQkgKiBkZXN0cm95ZWQgYnkgdGhlIHB1dCBhZnRlciB3ZSBkcm9wIHRoZSBsb2NrCi0JCSAqLwotCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwogCQlwdXRfcG9vbCA9IHBvb2w7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJeGFfdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCiAJLyoKIAkgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsCkBAIC03NTEsOSAmIzQzOzc4NSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiAgKi8KIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKIHsKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTsKJiM0MzsKIAl6c3dhcF9scnVfZGVsKGVudHJ5KTsKLQl6c19mcmVlKGVudHJ5LSZndDtwb29sLSZndDt6c19wb29sLCBlbnRyeS0mZ3Q7aGFuZGxlKTsKLQl6c3dhcF9wb29sX3B1dChlbnRyeS0mZ3Q7cG9vbCk7CiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKCFwb29sKSkgewomIzQzOwkJenNfZnJlZShwb29sLSZndDt6c19wb29sLCBlbnRyeS0mZ3Q7aGFuZGxlKTsKJiM0MzsJCXpzd2FwX3Bvb2xfcHV0KHBvb2wpOwomIzQzOwl9CiAJaWYgKGVudHJ5LSZndDtvYmpjZykgewogCQlvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LSZndDtvYmpjZywgZW50cnktJmd0O2xlbmd0aCk7CiAJCW9ial9jZ3JvdXBfcHV0KGVudHJ5LSZndDtvYmpjZyk7CkBAIC05MTAsMTIgJiM0Mzs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGVudHJ5LSZndDtwb29sOwomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwogCXN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDsKIAlzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4OwogCWludCByZXQgPSAwLCBkbGVuOwogCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXBvb2wpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtJmd0O2Fjb21wX2N0eCk7CiAJbXV0ZXhfbG9jaygmYW1wO2Fjb21wX2N0eC0mZ3Q7bXV0ZXgpOwogCXpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUsIGlucHV0LCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKQEAgLTk1MSw3ICYjNDM7OTkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXByX2FsZXJ0X3JhdGVsaW1pdGVkKCYjMzQ7RGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtJmd0OyVkKVxuJiMzNDssCiAJCQkJCQlzd3BfdHlwZShlbnRyeS0mZ3Q7c3dwZW50cnkpLAogCQkJCQkJc3dwX29mZnNldChlbnRyeS0mZ3Q7c3dwZW50cnkpLAotCQkJCQkJZW50cnktJmd0O3Bvb2wtJmd0O3RmbV9uYW1lLAomIzQzOwkJCQkJCXBvb2wtJmd0O3RmbV9uYW1lLAogCQkJCQkJZW50cnktJmd0O2xlbmd0aCwgZGxlbik7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTQwOSw2ICYjNDM7MTQ1MCwxNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAogCWlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKQogCQlnb3RvIGNvbXByZXNzX2ZhaWxlZDsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5OiBjb21wcmVzc2lvbiBoYXMKJiM0MzsJICogc3VjY2VlZGVkIGFuZCB0aGUgcG9vbCBpcyBhbHJlYWR5IHBpbm5lZCBieSB0aGlzIHN0b3JlLCBzbyB0aGUgaWQgaXMKJiM0MzsJICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnkKJiM0MzsJICogaXMgbmV2ZXIgYnJpZWZseSB2aXNpYmxlIHdpdGggYSBzdGFsZSBwb29sX2lkeCBsZWZ0IG92ZXIgZnJvbSBzbGFiCiYjNDM7CSAqIHJldXNlLCB3aGljaCB6c3dhcF9lbnRyeV9wb29sKCkgd291bGQgb3RoZXJ3aXNlIHJlc29sdmUgdG8gYW4KJiM0MzsJICogdW5yZWxhdGVkIGxpdmUgcG9vbC4KJiM0MzsJICovCiYjNDM7CWVudHJ5LSZndDtwb29sX2lkeCA9IHBvb2wtJmd0O2lkeDsKJiM0MzsKIAlvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksCiAJCSAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLAogCQkgICAgICAgZW50cnksIEdGUF9LRVJORUwpOwpAQCAtMTQ1NCw3ICYjNDM7MTUwNSw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZwogCSAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuCiAJICovCi0JZW50cnktJmd0O3Bvb2wgPSBwb29sOwogCWVudHJ5LSZndDtzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7CiAJZW50cnktJmd0O29iamNnID0gb2JqY2c7CiAJZW50cnktJmd0O3JlZmVyZW5jZWQgPSB0cnVlOwpAQCAtMTc5MCw3ICYjNDM7MTg0MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCkKIAlwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpOwogCWlmIChwb29sKSB7CiAJCXByX2luZm8oJiMzNDtsb2FkZWQgdXNpbmcgcG9vbCAlc1xuJiMzNDssIHBvb2wtJmd0O3RmbV9uYW1lKTsKLQkJbGlzdF9hZGQoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTsKIAl9IGVsc2Ugewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBrZXJuZWwmIzM5O3MgY29tcHJlc3NlZCBzd2FwIGFyZWEgaW1wbGVtZW50YXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgYHpzd2FwX3Bvb2xgIGlzIGhhbmRsZWQuIEl0JiMzOTtzIG1vdmluZyBmcm9tIGEgZGlyZWN0IHBvaW50ZXIgd2l0aGluIGB6c3dhcF9lbnRyeWAgKGBzdHJ1Y3QgenN3YXBfZW50cnlgKSB0byBhbiBpbmRleCAoYHU4IHBvb2xfaWR4YCkgcmVmZXJlbmNpbmcgYW4geGFycmF5IChgenN3YXBfcG9vbHNgKS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHNoaWZ0ISBTbyBub3csIGluc3RlYWQgb2YgYSBkaXJlY3QgcG9pbnRlciwgd2UgaGF2ZSBhbiBJRCBsb29rdXAuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGNoYW5nZXMgaW4gaG93IG1lbW9yeSBpcyBhY2Nlc3NlZCwgYWxsb2NhdGVkLCBhbmQgZnJlZWQgd2l0aGluIHRoZSB6c3dhcCBzdWJzeXN0ZW0uIEkgc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYHhhX2FsbG9jX2JoYCwgYF9feGFfZXJhc2VgLCBgeGFfZm9yX2VhY2hgLCBhbmQgYHhhX2xvYWRgLCBhbGwgdW5kZXIgUkNVIHByb3RlY3Rpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHJjdV93b3JrYCBhbmQgYHJjdV9hc3NpZ25fcG9pbnRlcmAgaXMgYW5vdGhlciBrZXkgZGV0YWlsLiBUaGlzIGhpbnRzIGF0IGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IHdlIGNhbiBleHBsb2l0IGR1cmluZyBmdXp6aW5nLiBUaGUgZnVuY3Rpb24gcmVwbGFjZW1lbnRzIGFsc28gZGVtYW5kIGNhcmVmdWwgZXhhbWluYXRpb24uIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGB6c3dhcF9wb29sX2NyZWF0ZWAsIGFsbCBvZiB0aGVzZSBhbHRlcmVkIGZ1bmN0aW9ucywgaWYgbWlzaGFuZGxlZCwgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWZhY3RvcmluZyBpcyBwcm9iYWJseSBkb25lIGZvciBhIHJlYXNvbiwgcGVyaGFwcyB0byBzdXBwb3J0IG11bHRpcGxlIHBvb2xzIG9yIGltcHJvdmUgc2NhbGFiaWxpdHkuIFRoZSBzd2l0Y2ggdG8gYW4geGFycmF5IGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYmVjYXVzZSBpdCBpcyBhbiBpbnRyaWNhdGUgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG9vbCBtYW5hZ2VtZW50IGNvZGUsIGVzcGVjaWFsbHkgdGhlIG5ldyBoZWxwZXIgYHpzd2FwX2VudHJ5X3Bvb2xgLCB3aGljaCBpcyBsaWtlbHkgYSBrZXkgcG9pbnQgb2YgaW50ZXJhY3Rpb24uCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIHpzd2FwLiBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBiZSB1c2VkLiBJIHdpbGwgcHJvYmFibHkgcnVuIGBncmVwcGVyYCBvciBjaGVjayBgbW0vS2NvbmZpZ2AgZGlyZWN0bHkgdG8gZ2F0aGVyIHRoZSByZXF1aXJlZCBpbmZvLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IHByZWNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgZm9yIHRoZSB6c3dhcCBmdW5jdGlvbmFsaXR5IHRvIGV2ZW4gYmUgYWN0aXZlLiBXaXRoIHRoYXQsIEkmIzM5O2xsIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hhdCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBhcmVhIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBgRm9jdXNTeW1ib2xzYCBhbmQgdGhlIGNvbmZpZ3MgSSBuZWVkIGZvciB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgWlNXQVAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIFpTV0FQJiMzOTtzIGRlcGVuZGVuY2llcy4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBwdWxsIHVwIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMjAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucyBhbmQgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIFpTV0FQLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcXVpY2sgYW5kIGRpcmVjdCBoaXQsIG5vdGhpbmcgZmFuY3ksIGp1c3QgdGhlIGJ1aWxkaW5nIGJsb2Nrcy4gVGltZSB0byBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xuICA1MTpcdFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcbiAgNTI6XHRcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBvZiB6c3dhcC5vKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgenN3YXAub2AgaXMgYmVpbmcgY29tcGlsZWQuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgZGVmaW5lZCBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZHVsZXMsIGFuZCB1bmRvdWJ0ZWRseSB3aGVyZSB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgYHpzd2FwLm9gIHJlc2lkZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29tcGlsYXRpb24gZmxhZ3MsIGluY2x1ZGUgcGF0aHMsIGFuZCBhbnkgbGluayBkZXBlbmRlbmNpZXMgbGFpZCBvdXQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgSSBjYW4gbGVhcm4uIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29tcGlsZXIgY2hvaWNlcyBtYWRlIGZvciB0aGlzIGNydWNpYWwgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Nzk9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo4MDpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODEtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWnN3YXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1NXQVBgIOKAkyBlc3NlbnRpYWxseSwgYFpTV0FQYCDigJMgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUga2V5IG1vZGlmaWNhdGlvbnMgd2l0aGluIGBtbS96c3dhcC5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgd2hvbGUgc2xldyBvZiBmdW5jdGlvbnMsIG1vc3RseSBzdGF0aWMsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcG9vbCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHkgSSBzZWUgdGhlIGZvbGxvd2luZzogYHpzd2FwX2VudHJ5X3Bvb2xgLCBgenN3YXBfcG9vbF9jcmVhdGVgLCBgX196c3dhcF9wb29sX3JlbGVhc2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYF9fenN3YXBfcG9vbF9jdXJyZW50YCwgYHpzd2FwX3Bvb2xfY3VycmVudGAsIGB6c3dhcF9wb29sX2N1cnJlbnRfZ2V0YCwgYHpzd2FwX3Bvb2xfZmluZF9nZXRgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgLiBUaGVzZSBhcmUgbGlrZWx5IGFsbCBwYXJ0IG9mIHRoZSB6c3dhcCBkYXRhIHN0cnVjdHVyZSBvciBjb3JlIHpzd2FwIG9wZXJhdGlvbiwgbGlrZWx5IHRvIGluY2x1ZGUgYW4gaW50ZXJuYWwgcG9vbC4gSSYjMzk7bSBhbHNvIHNlZWluZyBgenN3YXBfdG90YWxfcGFnZXNgLgoKSSYjMzk7bSBtb3JlIGludGVyZXN0ZWQgaW4gdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgenN3YXAgcHJvY2VzcyBpdHNlbGYsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEkgYWxzbyBzZWUgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGFuZCBgenN3YXBfc2V0dXBgLiBJIHNlZSBhIGNvdXBsZSBvZiBvdGhlcnMgYXMgd2VsbCwgYnV0IGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgIGFuZCBgenN3YXBfZW50cnlfZnJlZWAgYXJlIGxpa2VseSBrZXkgdG8gdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYW5kIHN0b3JhZ2UgbGlmZWN5Y2xlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgc2VlICpob3cqIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGhzIGFyb3VuZCBgenN3YXBfc3RvcmVfcGFnZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYW5kIGB6c3dhcF9lbnRyeV9mcmVlYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9zdG9yZXx6c3dhcF9sb2FkfHpzd2FwX2ludmFsaWRhdGV8enN3YXBfcG9vbF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMtNDctLyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjQ4OmF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL3pzd2FwLmMtNDktLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTUxLVxuLS1cbm1tL3pzd2FwLmMtNTktLyogUG9vbCBsaW1pdCB3YXMgaGl0IChzZWUgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCkgKi9cbm1tL3pzd2FwLmM6NjA6c3RhdGljIHU2NCB6c3dhcF9wb29sX2xpbWl0X2hpdDtcbm1tL3pzd2FwLmMtNjEtLyogUGFnZXMgd3JpdHRlbiBiYWNrIHdoZW4gcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xuLS1cbm1tL3pzd2FwLmM9Nzc9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHJpbmtfd3E7XG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cbm1tL3pzd2FwLmM6Nzk6c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XG5tbS96c3dhcC5jLTgwLVxuLS1cbm1tL3pzd2FwLmM9MTU0PXN0cnVjdCB6c3dhcF9wb29sIHtcbi0tXG5tbS96c3dhcC5jLTE2Ny0gKiBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUgeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuXG5tbS96c3dhcC5jOjE2ODogKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2Vcbm1tL3pzd2FwLmMtMTY5LSAqIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cbi0tXG5tbS96c3dhcC5jPTIwMz1zdHJ1Y3QgenN3YXBfZW50cnkge1xuLS1cbm1tL3pzd2FwLmMtMjE0LSAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcbm1tL3pzd2FwLmM6MjE1OiAqIHJlZmVyZW5jZSB0byBpdHMgcG9vbCAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKS5cbm1tL3pzd2FwLmMtMjE2LSAqL1xuLS1cbm1tL3pzd2FwLmM9MjU1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqc3dhcF96c3dhcF90cmVlKHN3cF9lbnRyeV90IHN3cClcbi0tXG5tbS96c3dhcC5jLTI2MC1cbm1tL3pzd2FwLmM6MjYxOiNkZWZpbmUgenN3YXBfcG9vbF9kZWJ1Zyhtc2csIHApXHRcdFx0XFxcbm1tL3pzd2FwLmMtMjYyLVx0cHJfZGVidWcoXCYjMzQ7JXMgcG9vbCAlc1xcblwmIzM0OywgbXNnLCAocCktXHUwMDNldGZtX25hbWUpXG4tLVxubW0venN3YXAuYy0yNjYtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MjY3OnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKTtcbm1tL3pzd2FwLmMtMjY4LVxubW0venN3YXAuYz0yNjk9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcbi0tXG5tbS96c3dhcC5jLTI5Ni1cbm1tL3pzd2FwLmM6Mjk3OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3Nvcilcbm1tL3pzd2FwLmMtMjk4LXtcbi0tXG5tbS96c3dhcC5jLTM0My1cdCAqL1xubW0venN3YXAuYzozNDQ6XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYsIF9fenN3YXBfcG9vbF9lbXB0eSxcbm1tL3pzd2FwLmMtMzQ1LVx0XHRcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcbi0tXG5tbS96c3dhcC5jLTM1OS1cbm1tL3pzd2FwLmM6MzYwOlx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDtjcmVhdGVkXCYjMzQ7LCBwb29sKTtcbm1tL3pzd2FwLmMtMzYxLVxuLS1cbm1tL3pzd2FwLmMtMzgwLVxubW0venN3YXAuYzozODE6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG5tbS96c3dhcC5jLTM4Mi17XG4tLVxubW0venN3YXAuYy0zOTYtXG5tbS96c3dhcC5jOjM5NzpcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcbm1tL3pzd2FwLmMtMzk4LX1cbm1tL3pzd2FwLmMtMzk5LVxubW0venN3YXAuYzo0MDA6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00MDEte1xuLS1cbm1tL3pzd2FwLmMtNDAzLVxubW0venN3YXAuYzo0MDQ6XHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2Rlc3Ryb3lpbmdcJiMzNDssIHBvb2wpO1xubW0venN3YXAuYy00MDUtXG4tLVxubW0venN3YXAuYy00MTYtXG5tbS96c3dhcC5jOjQxNzpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5tbS96c3dhcC5jLTQxOC17XG4tLVxubW0venN3YXAuYy00MjYtXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xubW0venN3YXAuYzo0Mjc6XHR6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7XG5tbS96c3dhcC5jLTQyOC19XG5tbS96c3dhcC5jLTQyOS1cbm1tL3pzd2FwLmM6NDMwOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpO1xubW0venN3YXAuYy00MzEtXG5tbS96c3dhcC5jOjQzMjpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbm1tL3pzd2FwLmMtNDMzLXtcbi0tXG5tbS96c3dhcC5jLTQzOS1cbm1tL3pzd2FwLmM6NDQwOlx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbm1tL3pzd2FwLmMtNDQxLVxuLS1cbm1tL3pzd2FwLmMtNDQzLVxubW0venN3YXAuYzo0NDQ6XHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xubW0venN3YXAuYy00NDUtXHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCBcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2VfcndvcmspO1xuLS1cbm1tL3pzd2FwLmMtNDQ5LVxubW0venN3YXAuYzo0NTA6c3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ1MS17XG4tLVxubW0venN3YXAuYy00NTgtLyogVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZS4gKi9cbm1tL3pzd2FwLmM6NDU5OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZ2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00NjAte1xuLS1cbm1tL3pzd2FwLmMtNDYzLVxubW0venN3YXAuYzo0NjQ6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9wdXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ2NS17XG4tLVxubW0venN3YXAuYy00NjgtXG5tbS96c3dhcC5jOjQ2OTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG5tbS96c3dhcC5jLTQ3MC17XG4tLVxubW0venN3YXAuYy00ODAtXG5tbS96c3dhcC5jOjQ4MTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxubW0venN3YXAuYy00ODIte1xuLS1cbm1tL3pzd2FwLmMtNDg0LVxubW0venN3YXAuYzo0ODU6XHRyZXR1cm4gX196c3dhcF9wb29sX2N1cnJlbnQoKTtcbm1tL3pzd2FwLmMtNDg2LX1cbm1tL3pzd2FwLmMtNDg3LVxubW0venN3YXAuYzo0ODg6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpXG5tbS96c3dhcC5jLTQ4OS17XG4tLVxubW0venN3YXAuYy00OTMtXG5tbS96c3dhcC5jOjQ5NDpcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xubW0venN3YXAuYzo0OTU6XHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxubW0venN3YXAuYy00OTYtXHRcdHBvb2wgPSBOVUxMO1xuLS1cbm1tL3pzd2FwLmMtNTAzLS8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbm1tL3pzd2FwLmM6NTA0OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxubW0venN3YXAuYy01MDUte1xuLS1cbm1tL3pzd2FwLmMtNTE0LVx0XHQvKiBpZiB3ZSBjYW4mIzM5O3QgZ2V0IGl0LCBpdCYjMzk7cyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbm1tL3pzd2FwLmM6NTE1Olx0XHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxubW0venN3YXAuYy01MTYtXHRcdFx0Y29udGludWU7XG4tLVxubW0venN3YXAuYz01NTI9c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXG4tLVxubW0venN3YXAuYy01NTctXHRpZiAoY3VyX3BhZ2VzIFx1MDAzZT0gbWF4X3BhZ2VzKSB7XG5tbS96c3dhcC5jOjU1ODpcdFx0enN3YXBfcG9vbF9saW1pdF9oaXQmIzQzOyYjNDM7O1xubW0venN3YXAuYzo1NTk6XHRcdHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsID0gdHJ1ZTtcbm1tL3pzd2FwLmM6NTYwOlx0fSBlbHNlIGlmICh6c3dhcF9wb29sX3JlYWNoZWRfZnVsbCBcdTAwMjZcdTAwMjZcbm1tL3pzd2FwLmMtNTYxLVx0XHQgICBjdXJfcGFnZXMgXHUwMDNjPSB6c3dhcF9hY2NlcHRfdGhyX3BhZ2VzKCkpIHtcbm1tL3pzd2FwLmM6NTYyOlx0XHRcdHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsID0gZmFsc2U7XG5tbS96c3dhcC5jLTU2My1cdH1cbm1tL3pzd2FwLmM6NTY0Olx0cmV0dXJuIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xubW0venN3YXAuYy01NjUtfVxuLS1cbm1tL3pzd2FwLmM9NTcxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTYwMi1cdHhhX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xubW0venN3YXAuYzo2MDM6XHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcbm1tL3pzd2FwLmMtNjA0LVx0aWYgKHBvb2wpIHtcbm1tL3pzd2FwLmM6NjA1Olx0XHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O3VzaW5nIGV4aXN0aW5nXCYjMzQ7LCBwb29sKTtcbm1tL3pzd2FwLmM6NjA2Olx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xubW0venN3YXAuYy02MDctXHR9XG4tLVxubW0venN3YXAuYy02MTAtXHRpZiAoIXBvb2wpIHtcbm1tL3pzd2FwLmM6NjExOlx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTYxMi1cdH0gZWxzZSB7XG4tLVxubW0venN3YXAuYy02MTktXG5tbS96c3dhcC5jOjYyMDpcdFx0LyogRHJvcCB0aGUgcmVmIGZyb20genN3YXBfcG9vbF9maW5kX2dldCgpLiAqL1xubW0venN3YXAuYzo2MjE6XHRcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xubW0venN3YXAuYy02MjItXHR9XG4tLVxubW0venN3YXAuYy02MzEtXHRpZiAoIXJldCkge1xubW0venN3YXAuYzo2MzI6XHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG5tbS96c3dhcC5jLTYzMy1cdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4tLVxubW0venN3YXAuYz03ODY9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtNzkyLVx0XHR6c19mcmVlKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbm1tL3pzd2FwLmM6NzkzOlx0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbm1tL3pzd2FwLmMtNzk0LVx0fVxuLS1cbm1tL3pzd2FwLmMtNzk5LVx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXG5tbS96c3dhcC5jOjgwMDpcdFx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG5tbS96c3dhcC5jLTgwMS1cdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xubW0venN3YXAuYzo4MDI6XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtODAzLX1cbi0tXG5tbS96c3dhcC5jPTk0OT1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xMDA5LSAqIHRvIHRoZSBzd2FwIGRldmljZS4gIFdlIGFyZSBiYXNpY2FsbHkgcmVzdW1pbmcgdGhlIHNhbWUgc3dhcFxubW0venN3YXAuYzoxMDEwOiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtMTAxMS0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cbi0tXG5tbS96c3dhcC5jPTEyMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTEyNTQtXHRcdG5yX2JhY2tpbmcgPSB6c3dhcF90b3RhbF9wYWdlcygpO1xubW0venN3YXAuYzoxMjU1Olx0XHRucl9zdG9yZWQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTEyNTYtXHR9XG4tLVxubW0venN3YXAuYz0xMzQ1PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3pzd2FwLmMtMTQzNS1cbm1tL3pzd2FwLmM6MTQzNjpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0venN3YXAuYy0xNDM3LVx0XHRcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL3pzd2FwLmMtMTQ4NC1cdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcbm1tL3pzd2FwLmM6MTQ4NTpcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxubW0venN3YXAuYy0xNDg2LVx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXG4tLVxubW0venN3YXAuYy0xNDg4LVx0ICovXG5tbS96c3dhcC5jOjE0ODk6XHR6c3dhcF9wb29sX2dldChwb29sKTtcbm1tL3pzd2FwLmMtMTQ5MC1cdGlmIChvYmpjZykge1xuLS1cbm1tL3pzd2FwLmMtMTQ5My1cdH1cbm1tL3pzd2FwLmM6MTQ5NDpcdGF0b21pY19sb25nX2luYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy0xNDk1LVx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXG5tbS96c3dhcC5jOjE0OTY6XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNDk3LVxuLS1cbm1tL3pzd2FwLmMtMTUyNC1cbm1tL3pzd2FwLmM6MTUyNTpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTE1MjYte1xuLS1cbm1tL3pzd2FwLmMtMTU1My1cbm1tL3pzd2FwLmM6MTU1NDpcdHBvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KCk7XG5tbS96c3dhcC5jLTE1NTUtXHRpZiAoIXBvb2wpXG4tLVxubW0venN3YXAuYy0xNTY5LVxubW0venN3YXAuYzoxNTcwOlx0XHRpZiAoIXpzd2FwX3N0b3JlX3BhZ2UocGFnZSwgb2JqY2csIHBvb2wpKVxubW0venN3YXAuYy0xNTcxLVx0XHRcdGdvdG8gcHV0X3Bvb2w7XG4tLVxubW0venN3YXAuYy0xNTgxLXB1dF9wb29sOlxubW0venN3YXAuYzoxNTgyOlx0enN3YXBfcG9vbF9wdXQocG9vbCk7XG5tbS96c3dhcC5jLTE1ODMtcHV0X29iamNnOlxubW0venN3YXAuYy0xNTg0LVx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xubW0venN3YXAuYzoxNTg1Olx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsKVxubW0venN3YXAuYy0xNTg2LVx0XHRxdWV1ZV93b3JrKHNocmlua193cSwgXHUwMDI2enN3YXBfc2hyaW5rX3dvcmspO1xuLS1cbm1tL3pzd2FwLmMtMTYxMS0vKipcbm1tL3pzd2FwLmM6MTYxMjogKiB6c3dhcF9sb2FkKCkgLSBsb2FkIGEgZm9saW8gZnJvbSB6c3dhcFxubW0venN3YXAuYy0xNjEzLSAqIEBmb2xpbzogZm9saW8gdG8gbG9hZFxuLS1cbm1tL3pzd2FwLmMtMTYzMC0gKi9cbm1tL3pzd2FwLmM6MTYzMTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNjMyLXtcbi0tXG5tbS96c3dhcC5jLTE2ODMtXG5tbS96c3dhcC5jOjE2ODQ6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbm1tL3pzd2FwLmMtMTY4NS17XG4tLVxubW0venN3YXAuYz0xNzUwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxubW0venN3YXAuYy0xNzUxLXtcbm1tL3pzd2FwLmM6MTc1MjpcdCp2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTE3NTMtXHRyZXR1cm4gMDtcbi0tXG5tbS96c3dhcC5jPTE3NTc9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3NTgte1xubW0venN3YXAuYzoxNzU5Olx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTc2MC1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTc2NT1zdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTc3Mi1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtwb29sX2xpbWl0X2hpdFwmIzM0OywgMDQ0NCxcbm1tL3pzd2FwLmM6MTc3MzpcdFx0XHQgICB6c3dhcF9kZWJ1Z2ZzX3Jvb3QsIFx1MDAyNnpzd2FwX3Bvb2xfbGltaXRfaGl0KTtcbm1tL3pzd2FwLmMtMTc3NC1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtyZWplY3RfcmVjbGFpbV9mYWlsXCYjMzQ7LCAwNDQ0LFxuLS1cbm1tL3pzd2FwLmM9MTgwOD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODM5LVxubW0venN3YXAuYzoxODQwOlx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbm1tL3pzd2FwLmMtMTg0MS1cdGlmIChwb29sKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGNoYW5nZSBpbiBjb2RlIHdlIGNhbiBhY3R1YWxseSBnZXQgYXQgdGhyb3VnaCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB3aXRoaW4gYG1tL3pzd2FwLmNgIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0JiMzOTtzIHVzZWQgd2hlbiBzd2FwIG9yIHpzd2FwIGlzIGFjdGl2ZSwgd2hpY2ggaXMgY29tbW9uIGluIGJvdGggUUVNVSBhbmQgc3RhbmRhcmQgZW52aXJvbm1lbnRzLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCkZ1cnRoZXJtb3JlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBkYXRhIHN0cnVjdHVyZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlcGxhY2luZyBhIHBvaW50ZXIgaW4gYHpzd2FwX2VudHJ5YCAoc3BlY2lmaWNhbGx5LCBhIHBvaW50ZXIgdG8gYHpzd2FwX3Bvb2xgKSB3aXRoIGEgYHBvb2xfaWR4YCwgc3RvcmluZyBwb29scyBpbiBhbiB4YXJyYXkgY2FsbGVkIGB6c3dhcF9wb29sc2AsIHVzaW5nIGByY3Vfd29ya2AgZm9yIGFzeW5jaHJvbm91cyBwb29sIHJlbGVhc2UsIGFuZCBtb3N0IHNpZ25pZmljYW50bHksIGNoYW5naW5nIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wgd2l0aCBgeGFfbG9ja19iaGAsIGByY3VfZGVyZWZlcmVuY2VfY2hlY2tgLCBhbmQgYHJjdV9hc3NpZ25fcG9pbnRlcmAuICBXZSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGVycm9yIHBhdGhzIGFuZCBuZXcgYFdBUk5fT05fT05DRWAgY2hlY2tzLiBUaGlzIGxldmVsIG9mIHJlc3RydWN0dXJpbmcgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYWxvbmcgd2l0aCBjb25jdXJyZW5jeSBjaGFuZ2VzLCAqc2NyZWFtcyogJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJ1Z3MhJiMzNDsgVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB3ZSBuZWVkIHRvIGlkZW50aWZ5IEZvY3VzU3ltYm9scyDigJMgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCBvdXIgZnV6emluZyBlZmZvcnRzLiAgSSB3YW50IHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyAqZGlyZWN0bHkqIGltcGxlbWVudGluZyBvciBleGVyY2lzaW5nIHRoZSBhbHRlcmVkIGxvZ2ljLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmU6CgoqICAgYHpzd2FwX3N0b3JlYCAob3IgYHpzd2FwX3N0b3JlX3BhZ2VgKQoqICAgYHpzd2FwX2xvYWRgIChjcnVjaWFsbHksIHRoaXMgY2FsbHMgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgKQoqICAgYHpzd2FwX2ludmFsaWRhdGVgICh3aGljaCBhbHNvIGNhbGxzIGB6c3dhcF9lbnRyeV9mcmVlYCkKKiAgIGB6c3dhcF90b3RhbF9wYWdlc2AKKiAgIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAKKiAgIGB6c3dhcF9wb29sX2NyZWF0ZWAKKiAgIGBfX3pzd2FwX3Bvb2xfZW1wdHlgCiogICBgX196c3dhcF9wb29sX3JlbGVhc2VgCiogICBgenN3YXBfZW50cnlfZnJlZWAKKiAgIGB6c3dhcF9kZWNvbXByZXNzYAoqICAgYHpzd2FwX2VudHJ5X3Bvb2xgCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNhbGxhYmxlIGFuZCBmaW5kYWJsZS4gIExvb2tpbmcgYXQgdGhlIHN5bWJvbHM6CgoqICAgVGhlICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCwgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHVzIHRvIGNhbGwsIGFyZSBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGB6c3dhcF90b3RhbF9wYWdlc2AuICBUaGVzZSBhcmUgZ29vZCBjYW5kaWRhdGVzLgoqICAgVGhlICpzdGF0aWMqIGZ1bmN0aW9ucyBhcmUgYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9lbnRyeV9wb29sYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYW5kIGB6c3dhcF9wb29sX2NyZWF0ZWAuIFdoaWxlIHRoZXkgbWF5IGJlIG1vcmUgZGlmZmljdWx0IHRvIGNhbGwgZGlyZWN0bHksIHdlIHN0aWxsIG5lZWQgdG8gdGFrZSB0aGVtIGludG8gY29uc2lkZXJhdGlvbiwgYXMgdGhleSBtYXkgYmUgY2FsbGVkIGZyb20gZnVuY3Rpb25zIHRoYXQgKmFyZSogZXhwb3NlZC4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgY2FsbHMgdG8gYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBzbyBvbiwgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgenN3YXAgc3lzdGVtLiBMZXQmIzM5O3MgZXhhbWluZSBpZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBoYXMgYW55IGJlYXJpbmcgb24gdGhlIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05NDk9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTAxNC0gKi9cbm1tL3pzd2FwLmM6MTAxNTpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy0xMDE2LVx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTExOD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL3pzd2FwLmMtMTE0MS1cdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcbm1tL3pzd2FwLmM6MTE0MjpcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcbm1tL3pzd2FwLmMtMTE0My1cdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5JiMzOTtzXG4tLVxubW0venN3YXAuYy0xMTc2LVxubW0venN3YXAuYzoxMTc3Olx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xubW0venN3YXAuYy0xMTc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Kipac3dhcCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIHJlYWxseSBkaWcgaW50byB0aGlzIFpzd2FwIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBleGFtaW5lIGEgZmV3IGtleSBtZXRyaWNzOiBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgenN3YXBfbG9hZGAsIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGFuZCBgenN3YXBfdG90YWxfcGFnZXNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb25hbCBzdGF0dXMuCgpOZXh0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBFbmFibGVDb25maWdzYCBhbmQgdGhlbiBkcmlsbCBkb3duIGludG8gYG1tL0tjb25maWdgIHRvIGdldCB0aGUgY29yZSBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYENPTkZJR19aU1dBUGAgaXMgdGhlIHByaW1hcnkgb3B0aW9uLCBhbmQgdGhhdCBpdCBkZXBlbmRzIG9uIGBDT05GSUdfU1dBUGAuIEl0IGFsc28gKnNlbGVjdHMqIGBDT05GSUdfQ1JZUFRPYCBhbmQgYENPTkZJR19aU01BTExPQ2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19aU1dBUGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMgb24gYENPTkZJR19TV0FQYCwgYENPTkZJR19DUllQVE9gIGFuZCBgQ09ORklHX1pTTUFMTE9DYCBhcmUgKmFsbCogdGhhdCYjMzk7cyByZXF1aXJlZCwgb3IgaWYgdGhlcmUgYXJlIG90aGVyLCBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCBtYWtlcyBzZW5zZSwgb2YgY291cnNlLCB0aGF0IGBaU1dBUGAgZGVwZW5kcyBvbiBgU1dBUGAsIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBjZXJ0YWluLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBvdGhlciBwb3NzaWJsZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywganVzdCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIHRocm91Z2ggYG1tL3pzd2FwLmNgIGFuZCBzZWFyY2ggZm9yIGFueSBvdGhlciBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgdHJpZ2dlciBvdGhlciBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBteSBhbmFseXNpcyBvciBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZnwjaWYgSVNfRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xNzE4PXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcbi0tXG5tbS96c3dhcC5jLTE3MzctKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MTczODojaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5tbS96c3dhcC5jLTE3MzktI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTM3CgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmlhZ2UgUmV2aWV3OiBaU1dBUCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFllcCwgJiMzNDtTV0FQJiMzNDsgYW5kICYjMzQ7WlNXQVAmIzM0OyBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGNvbmZpZ3MgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgdHJpYWdlIGluc3RydWN0aW9ucyB0byB0aGUgbGV0dGVyLgoKQWxyaWdodCwgdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMuLi4gV29ydGhGdXp6aW5nIGlzIHNldCB0byB0cnVlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY2hhbmdlcy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogaXTigJlzIHRvdWNoaW5nIGBtbS96c3dhcC5jYCBhbmQgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgenN3YXAgcG9vbHMgYXJlIG1hbmFnZWQuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgbW92aW5nIGZyb20gZGlyZWN0IHBvaW50ZXJzIHdpdGhpbiBgenN3YXBfZW50cnlgIHRvIHBvb2wgaW5kaWNlcyB2aWEgYW4gWEFycmF5LiBUaGF0IGFsc28gaW5jbHVkZXMgYWx0ZXJpbmcgUkNVLXByb3RlY3RlZCBsb29rdXAgYW5kIHRlYXJkb3duIHdpdGggYHJjdV93b3JrYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHBhdGhzLiBTb3VuZHMgbGlrZSBhIGdvb2QgdGFyZ2V0LgoKRW5hYmxlQ29uZmlncyBjb25maXJtcyB3aGF0IEkgYWxyZWFkeSBzdXNwZWN0ZWQsIGFuZCB0aGUgRm9jdXNTeW1ib2xzIGxpc3QgaGl0cyBhbGwgdGhlIGNyaXRpY2FsIHpzd2FwIGZ1bmN0aW9uczogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfdG90YWxfcGFnZXNgLCBgenN3YXBfZW50cnlfZnJlZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYW5kIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAuIFRoaXMgaXMgYSBjb21wcmVoZW5zaXZlIGxpc3QsIGNvdmVyaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHpzd2FwIHBvb2wgbWFuYWdlbWVudC4KClJpZ2h0LCBhbGwgY2xlYXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQmIzM0OywKICAgICYjMzQ7enN3YXBfdG90YWxfcGFnZXMmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlX3BhZ2UmIzM0OywKICAgICYjMzQ7X196c3dhcF9wb29sX2VtcHR5JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGRpcmVjdCBwb29sIHBvaW50ZXJzIGluIHN0cnVjdCB6c3dhcF9lbnRyeSB3aXRoIHBvb2wgaW5kaWNlcyB0cmFja2VkIGluIGFuIFhBcnJheS4gSXQgdXBkYXRlcyBSQ1UtcHJvdGVjdGVkIHBvb2wgbG9va3VwcywgY2hhbmdlcyB0ZWFyZG93biB0byB1c2UgcmN1X3dvcmssIGFkanVzdHMgY29uY3VycmVuY3kgbG9ja2luZyB3aXRoIFhBcnJheSBsb2NrcywgYW5kIG1vZGlmaWVzIHRoZSBzdG9yZS9kZWNvbXByZXNzL2ZyZWUvd3JpdGViYWNrIGxpZmVjeWNsZSBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDssCiAgICAmIzM0O3pzd2FwX2VudHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHpzd2FwIHBvb2wgbWFuYWdlbWVudCBieSByZXBsYWNpbmcgdGhlIGxpbmtlZCBsaXN0IG9mIHBvb2xzIGFuZCA4LWJ5dGUgcG9vbCBwb2ludGVyIGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIHdpdGggYW4gWEFycmF5IGxvb2t1cCB0YWJsZSBhbmQgYSAxLWJ5dGUgcG9vbCBpbmRleCAoYHBvb2xfaWR4YCksIGFsb25nc2lkZSB0cmFuc2l0aW9uaW5nIHBvb2wgY2xlYW51cCB0byBgcmN1X3dvcmtgLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXG4yLiBVc2VyLXNwYWNlIEluZm8gTGVha3M6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgc3lzY2FsbCByZXR1cm4sIGV0Yy4pLlxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDQxZmVkZmEyZWNhZTYwMjY1NWNkZDFmYmJiZWU0OTc1ODRlYzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAyMzo0Nzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjMxY2YwZWY0M2QyMzYgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzQsNiAmIzQzOzM0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC93cml0ZWJhY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3RfbHJ1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvenNtYWxsb2MuaCZndDsKIApAQCAtMTU0LDEyICYjNDM7MTU1LDI0IEBAIHN0cnVjdCB6c3dhcF9wb29sIHsKIAlzdHJ1Y3QgenNfcG9vbCAqenNfcG9vbDsKIAlzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4OwogCXN0cnVjdCBwZXJjcHVfcmVmIHJlZjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yazsKJiM0MzsJc3RydWN0IHJjdV93b3JrIHJlbGVhc2Vfcndvcms7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKJiM0MzsJdTggaWR4OwogCWNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHMKJiM0MzsgKiB0aGUgcmVzZXJ2ZWQgaWQgMCB1bmFsbG9jYXRlZCwgc28gbG9va2luZyBpdCB1cCBuZXZlciBhbGlhc2VzIGEgbGl2ZQomIzQzOyAqIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZSB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW4KJiM0MzsgKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2UKJiM0MzsgKiBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDEKJiM0MzsjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWAomIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTsKJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDsKJiM0MzsKIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7CiAKQEAgLTE4Miw3ICYjNDM7MTk1LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7CiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFjawogICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXIKICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LgotICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluCiYjNDM7ICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluLgogICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhCiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG8KICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy4KQEAgLTE5MSwxOSAmIzQzOzIwNCwzMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkgewogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJYm9vbCByZWZlcmVuY2VkOwotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1OCBwb29sX2lkeDsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IGxpc3RfaGVhZCBscnU7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgcG9vbCBzdGF5cyBhbGl2ZSBhZnRlciB0aGlzIHJldHVybnMgYmVjYXVzZSBhIHN0b3JlZCBlbnRyeSBob2xkcyBhCiYjNDM7ICogcmVmZXJlbmNlIHRvIGl0cyBwb29sICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcG9vbCA9IHhhX2xvYWQoJmFtcDt6c3dhcF9wb29scywgZW50cnktJmd0O3Bvb2xfaWR4KTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBwb29sOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiAKLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovCi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTsKLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spOwogLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovCiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIApAQCAtMjc1LDYgJiM0MzsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAJY2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFwwICovCiAJaW50IHJldCwgY3B1OwomIzQzOwl1MzIgaWQ7CiAKIAlpZiAoIXpzd2FwX2hhc19wb29sICZhbXA7JmFtcDsgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMzIwLDEyICYjNDM7MzQ1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcikKIAkJCSAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0KQogCQlnb3RvIHJlZl9mYWlsOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiYjNDM7CiYjNDM7CXJldCA9IHhhX2FsbG9jX2JoKCZhbXA7enN3YXBfcG9vbHMsICZhbXA7aWQsIHBvb2wsCiYjNDM7CQkJICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksCiYjNDM7CQkJICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJaWYgKHJldCA9PSAtRUJVU1kpCiYjNDM7CQkJcHJfZXJyKCYjMzQ7Y2Fubm90IGFsbG9jYXRlIHBvb2wgaWQgKG1heCAlZCBsaXZlIHBvb2xzKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCAmIzQzOyAxKTsKJiM0MzsJCWdvdG8geGFfZmFpbDsKJiM0MzsJfQomIzQzOwlwb29sLSZndDtpZHggPSBpZDsKIAogCXpzd2FwX3Bvb2xfZGVidWcoJiMzNDtjcmVhdGVkJiMzNDssIHBvb2wpOwogCiAJcmV0dXJuIHBvb2w7CiAKJiM0Mzt4YV9mYWlsOgomIzQzOwlwZXJjcHVfcmVmX2V4aXQoJmFtcDtwb29sLSZndDtyZWYpOwogcmVmX2ZhaWw6CiAJY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCAmYW1wO3Bvb2wtJmd0O25vZGUpOwogCkBAIC0zNzksMTYgJiM0Mzs0MTYsMTQgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQogCiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpwb29sKSwKLQkJCQkJCXJlbGVhc2Vfd29yayk7Ci0KLQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksCiYjNDM7CQkJCQkgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7CiAKIAkvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqLwogCVdBUk5fT04oIXBlcmNwdV9yZWZfaXNfemVybygmYW1wO3Bvb2wtJmd0O3JlZikpOwogCXBlcmNwdV9yZWZfZXhpdCgmYW1wO3Bvb2wtJmd0O3JlZik7CiAKLQkvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovCiYjNDM7CS8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovCiAJenN3YXBfcG9vbF9kZXN0cm95KHBvb2wpOwogfQogCkBAIC00MDAsMTYgJiM0Mzs0MzUsMTYgQEAgc3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpCiAKIAlwb29sID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpwb29sKSwgcmVmKTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCiAJV0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTsKIAotCWxpc3RfZGVsX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QpOwomIzQzOwlfX3hhX2VyYXNlKCZhbXA7enN3YXBfcG9vbHMsIHBvb2wtJmd0O2lkeCk7CiAKLQlJTklUX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKLQlzY2hlZHVsZV93b3JrKCZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV93b3JrKTsKJiM0MzsJSU5JVF9SQ1VfV09SSygmYW1wO3Bvb2wtJmd0O3JlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKJiM0MzsJcXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CXhhX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzKTsKIH0KIAogc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpCkBAIC00MzUsNyAmIzQzOzQ3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAotCXBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpOwomIzQzOwlwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCwKJiM0MzsJCQkJICAgICBsb2NrZGVwX2lzX2hlbGQoJmFtcDt6c3dhcF9wb29scy54YV9sb2NrKSk7CiAJV0FSTl9PTkNFKCFwb29sICZhbXA7JmFtcDsgenN3YXBfaGFzX3Bvb2wsCiAJCSAgJiMzNDslczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXG4mIzM0OywgX19mdW5jX18pOwogCkBAIC00NDQsNyAmIzQzOzQ4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIAogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIHsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3pzd2FwX3Bvb2xzLnhhX2xvY2spOwogCiAJcmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7CiB9CkBAIC00NjQsMTQgJiM0Mzs1MDAsMTUgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpCiAJcmV0dXJuIHBvb2w7CiB9CiAKLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KJiM0MzsvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovCiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcikKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZDsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7enN3YXBfcG9vbHMueGFfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KSB7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7CiAJCWlmIChzdHJjbXAocG9vbC0mZ3Q7dGZtX25hbWUsIGNvbXByZXNzb3IpKQogCQkJY29udGludWU7CiAJCS8qIGlmIHdlIGNhbiYjMzk7dCBnZXQgaXQsIGl0JiMzOTtzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqLwpAQCAtNDk3LDkgJiM0Mzs1MzQsMTUgQEAgdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGlkOwogCiYjNDM7CS8qCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSBpcyByZXF1aXJlZCBoZXJlLCBub3QganVzdCBmb3IgeGFfZm9yX2VhY2goKTogaXQgYWxzbwomIzQzOwkgKiBrZWVwcyBlYWNoIHBvb2wgYWxpdmUgd2hpbGUgaXQgaXMgZGVyZWZlcmVuY2VkLCBzaW5jZSBhIGNvbmN1cnJlbnRseQomIzQzOwkgKiByZXRpcmVkIHBvb2wgaXMgZnJlZWQgdmlhIHF1ZXVlX3JjdV93b3JrKCkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCiYjNDM7CSAqLwogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3pzd2FwX3Bvb2xzLCBpZCwgcG9vbCkKIAkJdG90YWwgJiM0Mzs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLSZndDt6c19wb29sKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNTU2LDIwICYjNDM7NTk5LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCiYjNDM7CXhhX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAJcG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7CiAJaWYgKHBvb2wpIHsKIAkJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O3VzaW5nIGV4aXN0aW5nJiMzNDssIHBvb2wpOwogCQlXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpOwotCQlsaXN0X2RlbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0KTsKIAl9CiYjNDM7CXhhX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlpZiAoIXBvb2wpCiYjNDM7CWlmICghcG9vbCkgewogCQlwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7Ci0JZWxzZSB7CiYjNDM7CX0gZWxzZSB7CiAJCS8qCiAJCSAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKCkKIAkJICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpbgpAQCAtNTg2LDIzICYjNDM7NjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CXhhX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAKIAlpZiAoIXJldCkgewogCQlwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpOwotCQlsaXN0X2FkZF9yY3UoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJfSBlbHNlIGlmIChwb29sKSB7Ci0JCS8qCi0JCSAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHMKLQkJICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kCi0JCSAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2sKLQkJICovCi0JCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiAJCXB1dF9wb29sID0gcG9vbDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAKIAkvKgogCSAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCwKQEAgLTc1MSw5ICYjNDM7Nzg1LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKICAqLwogc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogewomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwomIzQzOwogCXpzd2FwX2xydV9kZWwoZW50cnkpOwotCXpzX2ZyZWUoZW50cnktJmd0O3Bvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwotCXpzd2FwX3Bvb2xfcHV0KGVudHJ5LSZndDtwb29sKTsKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7CiYjNDM7CQl6c19mcmVlKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwomIzQzOwkJenN3YXBfcG9vbF9wdXQocG9vbCk7CiYjNDM7CX0KIAlpZiAoZW50cnktJmd0O29iamNnKSB7CiAJCW9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktJmd0O29iamNnLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKIAkJb2JqX2Nncm91cF9wdXQoZW50cnktJmd0O29iamNnKTsKQEAgLTkxMCwxMiAmIzQzOzk0OCwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktJmd0O3Bvb2w7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0OwogCXN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7CiAJaW50IHJldCA9IDAsIGRsZW47CiAKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcG9vbCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJYWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC0mZ3Q7YWNvbXBfY3R4KTsKIAltdXRleF9sb2NrKCZhbXA7YWNvbXBfY3R4LSZndDttdXRleCk7CiAJenNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSwgaW5wdXQsIGVudHJ5LSZndDtsZW5ndGgpOwpAQCAtOTUxLDcgJiM0Mzs5OTIsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcHJfYWxlcnRfcmF0ZWxpbWl0ZWQoJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS0mZ3Q7JWQpXG4mIzM0OywKIAkJCQkJCXN3cF90eXBlKGVudHJ5LSZndDtzd3BlbnRyeSksCiAJCQkJCQlzd3Bfb2Zmc2V0KGVudHJ5LSZndDtzd3BlbnRyeSksCi0JCQkJCQllbnRyeS0mZ3Q7cG9vbC0mZ3Q7dGZtX25hbWUsCiYjNDM7CQkJCQkJcG9vbC0mZ3Q7dGZtX25hbWUsCiAJCQkJCQllbnRyeS0mZ3Q7bGVuZ3RoLCBkbGVuKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDA5LDYgJiM0MzsxNDUwLDE2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJaWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpCiAJCWdvdG8gY29tcHJlc3NfZmFpbGVkOwogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCBwb29sX2lkeCBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnk6IGNvbXByZXNzaW9uIGhhcwomIzQzOwkgKiBzdWNjZWVkZWQgYW5kIHRoZSBwb29sIGlzIGFscmVhZHkgcGlubmVkIGJ5IHRoaXMgc3RvcmUsIHNvIHRoZSBpZCBpcwomIzQzOwkgKiBmaW5hbC4gIERvaW5nIGl0IGhlcmUgKHJhdGhlciB0aGFuIGFmdGVyIHhhX3N0b3JlKCkpIG1lYW5zIHRoZSBlbnRyeQomIzQzOwkgKiBpcyBuZXZlciBicmllZmx5IHZpc2libGUgd2l0aCBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgb3ZlciBmcm9tIHNsYWIKJiM0MzsJICogcmV1c2UsIHdoaWNoIHpzd2FwX2VudHJ5X3Bvb2woKSB3b3VsZCBvdGhlcndpc2UgcmVzb2x2ZSB0byBhbgomIzQzOwkgKiB1bnJlbGF0ZWQgbGl2ZSBwb29sLgomIzQzOwkgKi8KJiM0MzsJZW50cnktJmd0O3Bvb2xfaWR4ID0gcG9vbC0mZ3Q7aWR4OwomIzQzOwogCW9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSwKIAkJICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksCiAJCSAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7CkBAIC0xNDU0LDcgJiM0MzsxNTA1LDYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nCiAJICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS4KIAkgKi8KLQllbnRyeS0mZ3Q7cG9vbCA9IHBvb2w7CiAJZW50cnktJmd0O3N3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTsKIAllbnRyeS0mZ3Q7b2JqY2cgPSBvYmpjZzsKIAllbnRyeS0mZ3Q7cmVmZXJlbmNlZCA9IHRydWU7CkBAIC0xNzkwLDcgJiM0MzsxODQwLDcgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKQogCXBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7CiAJaWYgKHBvb2wpIHsKIAkJcHJfaW5mbygmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXG4mIzM0OywgcG9vbC0mZ3Q7dGZtX25hbWUpOwotCQlsaXN0X2FkZCgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7CiAJCXpzd2FwX2hhc19wb29sID0gdHJ1ZTsKIAkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDt6c3dhcF9ldmVyX2VuYWJsZWQpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHpzd2FwIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGUgdXN1YWwgS0FTQU4vTE9DS0RFUCBidWlsZHMuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogY2hhbmdpbmcuCgpBbHJpZ2h0LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgaW4gYG1tL3pzd2FwLmNgLiBGcm9tIGEgcXVpY2sgb3ZlcnZpZXcsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVzdHJ1Y3R1cmluZyBob3cgenN3YXAgcG9vbHMgYXJlIG1hbmFnZWQuIEluc3RlYWQgb2YgdGhlIG9sZCBsaW5rZWQgbGlzdCBhbmQgcG9pbnRlciBzeXN0ZW0sIHdlJiMzOTtyZSBub3cgaW5kZXhpbmcgdGhlIHBvb2xzIHdpdGggYW4geGFycmF5IChgenN3YXBfcG9vbHNgKSBhbmQgdXNpbmcgYW4gaW5kZXggKGB1OCBpZHhgKSB3aXRoaW4gdGhlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlLiBTbywgdGhhdCBgc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7YCBpbiBgenN3YXBfZW50cnlgIGlzIGdvbmUsIHJlcGxhY2VkIGJ5IGB1OCBwb29sX2lkeDtgLiBUaGUgb2xkIGxpc3QgYW5kIHdvcmsgc3RydWN0IGluIHRoZSBgenN3YXBfcG9vbGAgaGF2ZSBhbHNvIGJlZW4gc3RyZWFtbGluZWQsIHN3aXRjaGluZyB0byBhbiBgcmN1X3dvcmtgIGFuZCB0aGUgaW5kZXgsIGB1OCBpZHhgLiBOYXR1cmFsbHksIGFsbCB0aGUgbGlzdCBpdGVyYXRpb24gYW5kIGxvY2tpbmcgYXJlIGdvaW5nIHRoZSB3YXkgb2YgdGhlIGRvZG8sIGJlaW5nIHJlcGxhY2VkIHdpdGggdGhlIHVzdWFsIHhhcnJheSBpZGlvbXM6IGB4YV9hbGxvY19iaGAsIGB4YV9mb3JfZWFjaGAsIGFuZCBgeGFfZXJhc2VgLgoKTm93LCBkaWdnaW5nIGludG8gdGhlIGB6c3dhcF9zdG9yZV9wYWdlYCBjaGFuZ2VzLCBJIHNlZSB0aGF0IGBlbnRyeS0mZ3Q7cG9vbF9pZHggPSBwb29sLSZndDtpZHg7YCBpcyBzZXQgKmJlZm9yZSogdGhlIGB4YV9zdG9yZWAgY2FsbCBpbnRvIGBzd2FwX3pzd2FwX3RyZWVgLCBhbmQgdGhhdCBgZW50cnktJmd0O3Bvb2wgPSBwb29sO2AgaGFzIGJlZW4gcmVtb3ZlZC4gRnVydGhlciwgYHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpYCBpcyBub3cgZG9pbmcgYSByZWFkIGxvY2sgYW5kIGxvYWRzIGEgcG9vbCBmcm9tIHRoZSBgenN3YXBfcG9vbHNgIGFycmF5IHVzaW5nIHRoZSBzdG9yZWQgaW5kZXguCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiBob3cgYHpzd2FwX2VudHJ5YCBpcyBhbGxvY2F0ZWQgYW5kIHVzZWQgdG8gYXNzZXNzIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGFsbG9jYXRpb24gYW5kIHVzYWdlIG9mIHRoZXNlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlcy4gTGV0IG1lIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvY2AgYW5kIGhvdyBgenN3YXBfc3RvcmVfcGFnZWAgaW50ZXJhY3RzIHdpdGggdGhhdC4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgSSYjMzk7bGwgYmUgYWJsZSB0byBkZWNpZGUgd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29kZSBjaGFuZ2UgdGhhdCYjMzk7cyBiZW5pZ24gZW5vdWdoIGZvciByZWd1bGFyIHRlc3Rpbmcgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgbW9yZSByaWdvcm91cyBLTVNBTi1mb2N1c2VkIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX2VudHJ5X2NhY2hlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTc1MT12b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0venN3YXAuYy03NjUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6NzY2OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqenN3YXBfZW50cnlfY2FjaGU7XG5tbS96c3dhcC5jLTc2Ny1cbm1tL3pzd2FwLmM6NzY4OnN0YXRpYyBzdHJ1Y3QgenN3YXBfZW50cnkgKnpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKGdmcF90IGdmcCwgaW50IG5pZClcbm1tL3pzd2FwLmMtNzY5LXtcbm1tL3pzd2FwLmMtNzcwLVx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbm1tL3pzd2FwLmM6NzcxOlx0ZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoenN3YXBfZW50cnlfY2FjaGUsIGdmcCwgbmlkKTtcbm1tL3pzd2FwLmMtNzcyLVx0aWYgKCFlbnRyeSlcbi0tXG5tbS96c3dhcC5jLTc3Ni1cbm1tL3pzd2FwLmM6Nzc3OnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNzc4LXtcbm1tL3pzd2FwLmM6Nzc5Olx0a21lbV9jYWNoZV9mcmVlKHpzd2FwX2VudHJ5X2NhY2hlLCBlbnRyeSk7XG5tbS96c3dhcC5jLTc4MC19XG4tLVxubW0venN3YXAuYz03ODY9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtODAwLVx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmM6ODAxOlx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTgwMi1cdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xuLS1cbm1tL3pzd2FwLmM9MTQzNj1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQ0My1cdC8qIGFsbG9jYXRlIGVudHJ5ICovXG5tbS96c3dhcC5jOjE0NDQ6XHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbm1tL3pzd2FwLmMtMTQ0NS1cdGlmICghZW50cnkpIHtcbi0tXG5tbS96c3dhcC5jLTE1MjAtY29tcHJlc3NfZmFpbGVkOlxubW0venN3YXAuYzoxNTIxOlx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTE1MjItXHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xODA4PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbi0tXG5tbS96c3dhcC5jLTE4MTItXG5tbS96c3dhcC5jOjE4MTM6XHR6c3dhcF9lbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUoenN3YXBfZW50cnksIDApO1xubW0venN3YXAuYzoxODE0Olx0aWYgKCF6c3dhcF9lbnRyeV9jYWNoZSkge1xubW0venN3YXAuYy0xODE1LVx0XHRwcl9lcnIoXCYjMzQ7ZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS96c3dhcC5jLTE4NjItaHBfZmFpbDpcbm1tL3pzd2FwLmM6MTg2MzpcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XG5tbS96c3dhcC5jLTE4NjQtY2FjaGVfZmFpbDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIERlZXAgaW50byBgenN3YXBfc3RvcmVfcGFnZWAqKgoKT2theSwgdGltZSB0byByZWFsbHkgZGlnIGludG8gYHpzd2FwX3N0b3JlX3BhZ2VgLiBJJiMzOTttIGdvaW5nIHRvIGxhc2VyIGluIG9uIHRoYXQgc2VjdGlvbiBhcm91bmQgbGluZSAxNDM2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpyZWFsbHkqIGhhcHBlbmluZyB0aGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSB6c3dhcCBwcm9jZXNzLCBhbmQgSSB3YW50IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBncmFzcCBvZiB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgYmVmb3JlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDM1Olx0XG4xNDM2Olx0c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbjE0Mzc6XHRcdFx0XHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjE0Mzg6XHRcdFx0XHQgICAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuMTQzOTpcdHtcbjE0NDA6XHRcdHN3cF9lbnRyeV90IHBhZ2Vfc3dwZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XG4xNDQxOlx0XHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCAqb2xkO1xuMTQ0MjpcdFxuMTQ0MzpcdFx0LyogYWxsb2NhdGUgZW50cnkgKi9cbjE0NDQ6XHRcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xuMTQ0NTpcdFx0aWYgKCFlbnRyeSkge1xuMTQ0NjpcdFx0XHR6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWwmIzQzOyYjNDM7O1xuMTQ0NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNDQ4Olx0XHR9XG4xNDQ5Olx0XG4xNDUwOlx0XHRpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSlcbjE0NTE6XHRcdFx0Z290byBjb21wcmVzc19mYWlsZWQ7XG4xNDUyOlx0XG4xNDUzOlx0XHQvKlxuMTQ1NDpcdFx0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeTogY29tcHJlc3Npb24gaGFzXG4xNDU1Olx0XHQgKiBzdWNjZWVkZWQgYW5kIHRoZSBwb29sIGlzIGFscmVhZHkgcGlubmVkIGJ5IHRoaXMgc3RvcmUsIHNvIHRoZSBpZCBpc1xuMTQ1NjpcdFx0ICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnlcbjE0NTc6XHRcdCAqIGlzIG5ldmVyIGJyaWVmbHkgdmlzaWJsZSB3aXRoIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBvdmVyIGZyb20gc2xhYlxuMTQ1ODpcdFx0ICogcmV1c2UsIHdoaWNoIHpzd2FwX2VudHJ5X3Bvb2woKSB3b3VsZCBvdGhlcndpc2UgcmVzb2x2ZSB0byBhblxuMTQ1OTpcdFx0ICogdW5yZWxhdGVkIGxpdmUgcG9vbC5cbjE0NjA6XHRcdCAqL1xuMTQ2MTpcdFx0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbjE0NjI6XHRcbjE0NjM6XHRcdG9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSxcbjE0NjQ6XHRcdFx0ICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksXG4xNDY1Olx0XHRcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XG4xNDY2Olx0XHRpZiAoeGFfaXNfZXJyKG9sZCkpIHtcbjE0Njc6XHRcdFx0aW50IGVyciA9IHhhX2VycihvbGQpO1xuMTQ2ODpcdFxuMTQ2OTpcdFx0XHRXQVJOX09OQ0UoZXJyICE9IC1FTk9NRU0sIFwmIzM0O3VuZXhwZWN0ZWQgeGFycmF5IGVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbjE0NzA6XHRcdFx0enN3YXBfcmVqZWN0X2FsbG9jX2ZhaWwmIzQzOyYjNDM7O1xuMTQ3MTpcdFx0XHRnb3RvIHN0b3JlX2ZhaWxlZDtcbjE0NzI6XHRcdH1cbjE0NzM6XHRcbjE0NzQ6XHRcdC8qXG4xNDc1Olx0XHQgKiBXZSBtYXkgaGF2ZSBoYWQgYW4gZXhpc3RpbmcgZW50cnkgdGhhdCBiZWNhbWUgc3RhbGUgd2hlblxuMTQ3NjpcdFx0ICogdGhlIGZvbGlvIHdhcyByZWRpcnRpZWQgYW5kIG5vdyB0aGUgbmV3IHZlcnNpb24gaXMgYmVpbmdcbjE0Nzc6XHRcdCAqIHN3YXBwZWQgb3V0LiBHZXQgcmlkIG9mIHRoZSBvbGQuXG4xNDc4Olx0XHQgKi9cbjE0Nzk6XHRcdGlmIChvbGQpXG4xNDgwOlx0XHRcdHpzd2FwX2VudHJ5X2ZyZWUob2xkKTtcbjE0ODE6XHRcbjE0ODI6XHRcdC8qXG4xNDgzOlx0XHQgKiBUaGUgZW50cnkgaXMgc3VjY2Vzc2Z1bGx5IGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiB0aGUgdHJlZSwgdGhlcmUgaXNcbjE0ODQ6XHRcdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcbjE0ODU6XHRcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxuMTQ4NjpcdFx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXG4xNDg3Olx0XHQgKiB3aGVuIHRoZSBlbnRyeSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuXG4xNDg4Olx0XHQgKi9cbjE0ODk6XHRcdHpzd2FwX3Bvb2xfZ2V0KHBvb2wpO1xuMTQ5MDpcdFx0aWYgKG9iamNnKSB7XG4xNDkxOlx0XHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbjE0OTI6XHRcdFx0b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAob2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xNDkzOlx0XHR9XG4xNDk0Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbjE0OTU6XHRcdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxuMTQ5NjpcdFx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbjE0OTc6XHRcbjE0OTg6XHRcdC8qXG4xNDk5Olx0XHQgKiBXZSBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBlbnRyeSB3aGlsZSBpdCYjMzk7cyBhbHJlYWR5IGluIHhhcnJheS5cbjE1MDA6XHRcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlOlxuMTUwMTpcdFx0ICpcbjE1MDI6XHRcdCAqIDEuIENvbmN1cnJlbnQgc3RvcmVzIGFuZCBpbnZhbGlkYXRpb25zIGFyZSBleGNsdWRlZCBieSBmb2xpbyBsb2NrLlxuMTUwMzpcdFx0ICpcbjE1MDQ6XHRcdCAqIDIuIFdyaXRlYmFjayBpcyBleGNsdWRlZCBieSB0aGUgZW50cnkgbm90IGJlaW5nIG9uIHRoZSBMUlUgeWV0LlxuMTUwNTpcdFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuMTUwNjpcdFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbjE1MDc6XHRcdCAqL1xuMTUwODpcdFx0ZW50cnktXHUwMDNlc3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5O1xuMTUwOTpcdFx0ZW50cnktXHUwMDNlb2JqY2cgPSBvYmpjZztcbjE1MTA6XHRcdGVudHJ5LVx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xuMTUxMTpcdFx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCkge1xuMTUxMjpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZlbnRyeS1cdTAwM2VscnUpO1xuMTUxMzpcdFx0XHR6c3dhcF9scnVfYWRkKGVudHJ5KTtcbjE1MTQ6XHRcdH1cbjE1MTU6XHRcbjE1MTY6XHRcdHJldHVybiB0cnVlO1xuMTUxNzpcdFxuMTUxODpcdHN0b3JlX2ZhaWxlZDpcbjE1MTk6XHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuMTUyMDpcdGNvbXByZXNzX2ZhaWxlZDpcbjE1MjE6XHRcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xuMTUyMjpcdFx0cmV0dXJuIGZhbHNlO1xuMTUyMzpcdH1cbjE1MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgenN3YXBfY29tcHJlc3NgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtZW50YWwgY2hlY2tsaXN0IGhhcyBsZWQgbWUgdG8gYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHpzd2FwX2NvbXByZXNzYC4gVGhpcyBpcyBhIGNydWNpYWwgc2V0dGluZyB3aGVuIGNvbnNpZGVyaW5nIHpzd2FwIGJlaGF2aW9yLCByaWdodD8gSXQmIzM5O3Mgb25lIG9mIHRob3NlIHRoaW5ncyB5b3UgY2FuJiMzOTt0IGp1c3QgZ2xvc3Mgb3Zlci4gSXQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgZWZmaWNpZW5jeSBvZiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgYnkgenN3YXAsIGFuZCB0aHVzLCBpdHMgZWZmZWN0aXZlbmVzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgY2hvc2VuIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBvbiBtZW1vcnkgdXNhZ2UuIEZyb20gaGVyZSBJIG5lZWQgdG8gY29uc2lkZXIgcGVyZm9ybWFuY2UgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB3b3JrbG9hZC4gVGhlIGltcGxpY2F0aW9ucyBvbiBDUFUgb3ZlcmhlYWQgYXJlIGFsc28gaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9jb21wcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFx1MDAyNnpzd2FwX2VuYWJsZWQsIDA2NDQpO1xuLS1cbm1tL3pzd2FwLmMtMTAwLS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xubW0venN3YXAuYzoxMDE6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYzoxMDI6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTEwMy1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XG5tbS96c3dhcC5jOjEwNDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMgPSB7XG5tbS96c3dhcC5jOjEwNTpcdC5zZXQgPVx0XHR6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCxcbm1tL3pzd2FwLmMtMTA2LVx0LmdldCA9XHRcdHBhcmFtX2dldF9jaGFycCxcbi0tXG5tbS96c3dhcC5jLTEwOC19O1xubW0venN3YXAuYzoxMDk6bW9kdWxlX3BhcmFtX2NiKGNvbXByZXNzb3IsIFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxubW0venN3YXAuYzoxMTA6XHRcdFx1MDAyNnpzd2FwX2NvbXByZXNzb3IsIDA2NDQpO1xubW0venN3YXAuYy0xMTEtXG4tLVxubW0venN3YXAuYz0zODE9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG5tbS96c3dhcC5jLTM4Mi17XG5tbS96c3dhcC5jOjM4MzpcdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcdTAwMjZcdTAwMjZcbm1tL3pzd2FwLmM6Mzg0Olx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xubW0venN3YXAuYy0zODUtXHRcdHByX2VycihcJiMzNDtjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXG5cJiMzNDssXG5tbS96c3dhcC5jOjM4NjpcdFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xubW0venN3YXAuYzozODc6XHRcdHBhcmFtX2ZyZWVfY2hhcnAoXHUwMDI2enN3YXBfY29tcHJlc3Nvcik7XG5tbS96c3dhcC5jOjM4ODpcdFx0enN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jLTM4OS1cdH1cbi0tXG5tbS96c3dhcC5jLTM5MS1cdC8qIERlZmF1bHQgY29tcHJlc3NvciBzaG91bGQgYmUgYXZhaWxhYmxlLiBLY29uZmlnIGJ1Zz8gKi9cbm1tL3pzd2FwLmM6MzkyOlx0aWYgKFdBUk5fT05fT05DRSghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSkpIHtcbm1tL3pzd2FwLmM6MzkzOlx0XHR6c3dhcF9jb21wcmVzc29yID0gWlNXQVBfUEFSQU1fVU5TRVQ7XG5tbS96c3dhcC5jLTM5NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0venN3YXAuYy0zOTYtXG5tbS96c3dhcC5jOjM5NzpcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcbm1tL3pzd2FwLmMtMzk4LX1cbi0tXG5tbS96c3dhcC5jPTU1Mj1zdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcbi0tXG5tbS96c3dhcC5jLTU3MC1cbm1tL3pzd2FwLmM6NTcxOnN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbm1tL3pzd2FwLmMtNTcyLXtcbi0tXG5tbS96c3dhcC5jPTgwOD1zdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG4tLVxubW0venN3YXAuYy04NjQtXG5tbS96c3dhcC5jOjg2NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtODY2LVx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuLS1cbm1tL3pzd2FwLmM9MTQzNj1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQ0OS1cbm1tL3pzd2FwLmM6MTQ1MDpcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxubW0venN3YXAuYy0xNDUxLVx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHpzd2FwX2NvbXByZXNzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYHpzd2FwX2NvbXByZXNzYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBjb21wcmVzc2lvbiBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBob3cgaXQmIzM5O3Mgb3B0aW1pemVkIGZvciB0aGUgc3BlY2lmaWMgY29uc3RyYWludHMgb2YgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGZvciBzd2FwLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkIHRvIGVmZmljaWVudGx5IG1hbmFnZSB0aGUgY29tcHJlc3Npb24gY29udGV4dCwgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYW5kIHRoZWlyIHNwZWNpZmljIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZXJyb3JzIG9yIGNvcm5lciBjYXNlcy4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBzcGVjaWZpYyBudWFuY2VzIGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHdpdGggbXkgd29yayBvbi4uLiBbY29udGludWUgd2l0aCB5b3VyIHJlbGV2YW50IHdvcmtdLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2NTpcdHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIDg2NjpcdFx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIDg2NzpcdHtcbiA4Njg6XHRcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gODY5Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXQsIG91dHB1dDtcbiA4NzA6XHRcdGludCBjb21wX3JldCA9IDAsIGFsbG9jX3JldCA9IDA7XG4gODcxOlx0XHR1bnNpZ25lZCBpbnQgZGxlbiA9IFBBR0VfU0laRTtcbiA4NzI6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIDg3MzpcdFx0Z2ZwX3QgZ2ZwO1xuIDg3NDpcdFx0dTggKmRzdDtcbiA4NzU6XHRcdGJvb2wgbWFwcGVkID0gZmFsc2U7XG4gODc2Olx0XG4gODc3Olx0XHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gODc4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gODc5Olx0XG4gODgwOlx0XHRkc3QgPSBhY29tcF9jdHgtXHUwMDNlYnVmZmVyO1xuIDg4MTpcdFx0c2dfaW5pdF90YWJsZShcdTAwMjZpbnB1dCwgMSk7XG4gODgyOlx0XHRzZ19zZXRfcGFnZShcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcbiA4ODM6XHRcbiA4ODQ6XHRcdHNnX2luaXRfb25lKFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xuIDg4NTpcdFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cdTAwM2VyZXEsIFx1MDAyNmlucHV0LCBcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XG4gODg2Olx0XG4gODg3Olx0XHQvKlxuIDg4ODpcdFx0ICogaXQgbWF5YmUgbG9va3MgYSBsaXR0bGUgYml0IHNpbGx5IHRoYXQgd2Ugc2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCxcbiA4ODk6XHRcdCAqIHRoZW4gd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24gc3luY2hyb25vdXNseS4gVGhpcyBtYWtlcyB0aGUgcHJvY2VzcyBsb29rXG4gODkwOlx0XHQgKiBzeW5jaHJvbm91cyBpbiBmYWN0LlxuIDg5MTpcdFx0ICogVGhlb3JldGljYWxseSwgYWNvbXAgc3VwcG9ydHMgdXNlcnMgc2VuZCBtdWx0aXBsZSBhY29tcCByZXF1ZXN0cyBpbiBvbmVcbiA4OTI6XHRcdCAqIGFjb21wIGluc3RhbmNlLCB0aGVuIGdldCB0aG9zZSByZXF1ZXN0cyBkb25lIHNpbXVsdGFuZW91c2x5LiBidXQgaW4gdGhpc1xuIDg5MzpcdFx0ICogY2FzZSwgenN3YXAgYWN0dWFsbHkgZG9lcyBzdG9yZSBhbmQgbG9hZCBwYWdlIGJ5IHBhZ2UsIHRoZXJlIGlzIG5vXG4gODk0Olx0XHQgKiBleGlzdGluZyBtZXRob2QgdG8gc2VuZCB0aGUgc2Vjb25kIHBhZ2UgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGRvbmVcbiA4OTU6XHRcdCAqIGluIG9uZSB0aHJlYWQgZG9pbmcgenN3YXAuXG4gODk2Olx0XHQgKiBidXQgaW4gZGlmZmVyZW50IHRocmVhZHMgcnVubmluZyBvbiBkaWZmZXJlbnQgY3B1LCB3ZSBoYXZlIGRpZmZlcmVudFxuIDg5NzpcdFx0ICogYWNvbXAgaW5zdGFuY2UsIHNvIG11bHRpcGxlIHRocmVhZHMgY2FuIGRvIChkZSljb21wcmVzc2lvbiBpbiBwYXJhbGxlbC5cbiA4OTg6XHRcdCAqL1xuIDg5OTpcdFx0Y29tcF9yZXQgPSBjcnlwdG9fd2FpdF9yZXEoY3J5cHRvX2Fjb21wX2NvbXByZXNzKGFjb21wX2N0eC1cdTAwM2VyZXEpLCBcdTAwMjZhY29tcF9jdHgtXHUwMDNld2FpdCk7XG4gOTAwOlx0XHRkbGVuID0gYWNvbXBfY3R4LVx1MDAzZXJlcS1cdTAwM2VkbGVuO1xuIDkwMTpcdFxuIDkwMjpcdFx0LypcbiA5MDM6XHRcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxuIDkwNDpcdFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxuIDkwNTpcdFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XG4gOTA2Olx0XHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xuIDkwNzpcdFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXHUwMDNlPSBQQUdFX1NJWkUpIHtcbiA5MTA6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDkxMTpcdFx0XHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXG4gOTEyOlx0XHRcdFx0XHRcdGZvbGlvX21lbWNnKHBhZ2VfZm9saW8ocGFnZSkpKSkge1xuIDkxMzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDkxNDpcdFx0XHRcdGNvbXBfcmV0ID0gY29tcF9yZXQgPyBjb21wX3JldCA6IC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgenN3YXBfY29tcHJlc3NgIGZ1bmN0aW9uLiBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCB6c3dhcCBjb25jZXB0LCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjb21wcmVzc2lvbiBhbGdvcml0aG0gZGV0YWlscyBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgenN3YXAgZnJhbWV3b3JrLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbXByZXNzaW9uIG9wZXJhdGlvbiBpdHNlbGYgLSB0aGUgZGF0YSBoYW5kbGluZywgZXJyb3IgY2hlY2tpbmcsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB6c3dhcC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGNvbW1vbiBjb21wcmVzc2lvbiBsaWJyYXJpZXMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCBhbnkgenN3YXAtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBjb25maWd1cmF0aW9ucyB1c2VkLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNTpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuIDkxNjpcdFx0XHR9XG4gOTE3Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDkxODpcdFx0XHRjb21wX3JldCA9IDA7XG4gOTE5Olx0XHRcdGRsZW4gPSBQQUdFX1NJWkU7XG4gOTIwOlx0XHRcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiA5MjE6XHRcdFx0bWFwcGVkID0gdHJ1ZTtcbiA5MjI6XHRcdH1cbiA5MjM6XHRcbiA5MjQ6XHRcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XG4gOTI1Olx0XHRoYW5kbGUgPSB6c19tYWxsb2MocG9vbC1cdTAwM2V6c19wb29sLCBkbGVuLCBnZnAsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiA5MjY6XHRcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSkge1xuIDkyNzpcdFx0XHRhbGxvY19yZXQgPSBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcbiA5Mjg6XHRcdFx0Z290byB1bmxvY2s7XG4gOTI5Olx0XHR9XG4gOTMwOlx0XG4gOTMxOlx0XHR6c19vYmpfd3JpdGUocG9vbC1cdTAwM2V6c19wb29sLCBoYW5kbGUsIGRzdCwgZGxlbik7XG4gOTMyOlx0XHRlbnRyeS1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4gOTMzOlx0XHRlbnRyeS1cdTAwM2VsZW5ndGggPSBkbGVuO1xuIDkzNDpcdFxuIDkzNTpcdHVubG9jazpcbiA5MzY6XHRcdGlmIChtYXBwZWQpXG4gOTM3Olx0XHRcdGt1bm1hcF9sb2NhbChkc3QpO1xuIDkzODpcdFx0aWYgKGNvbXBfcmV0ID09IC1FTk9TUEMgfHwgYWxsb2NfcmV0ID09IC1FTk9TUEMpXG4gOTM5Olx0XHRcdHpzd2FwX3JlamVjdF9jb21wcmVzc19wb29yJiM0MzsmIzQzOztcbiA5NDA6XHRcdGVsc2UgaWYgKGNvbXBfcmV0KVxuIDk0MTpcdFx0XHR6c3dhcF9yZWplY3RfY29tcHJlc3NfZmFpbCYjNDM7JiM0Mzs7XG4gOTQyOlx0XHRlbHNlIGlmIChhbGxvY19yZXQpXG4gOTQzOlx0XHRcdHpzd2FwX3JlamVjdF9hbGxvY19mYWlsJiM0MzsmIzQzOztcbiA5NDQ6XHRcbiA5NDU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhY29tcF9jdHgtXHUwMDNlbXV0ZXgpO1xuIDk0NjpcdFx0cmV0dXJuIGNvbXBfcmV0ID09IDAgXHUwMDI2XHUwMDI2IGFsbG9jX3JldCA9PSAwO1xuIDk0NzpcdH1cbiA5NDg6XHRcbiA5NDk6XHRzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gOTUwOlx0e1xuIDk1MTpcdFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbiA5NTI6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXG4gOTUzOlx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xuIDk1NDpcdFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDkKCQkJCQkJCW91dHB1dDogMjU4CgkJCQkJCQl0aG91Z2h0czogOTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUG9vbCBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhvdyB6c3dhcCBtYW5hZ2VzIGl0cyBwb29scyBhbmQgYXNzb2NpYXRlcyB0aGVtIHdpdGggZW50cmllcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIHNvbGlkIHJlZmFjdG9yIHdpdGggYSBjbGVhciBtZW1vcnkgb3B0aW1pemF0aW9uIGZvY3VzLgoKSSBzZWUgdGhhdCB0aGUgY29yZSBjaGFuZ2UgaXMgbW92aW5nIGZyb20gYSBsaW5rZWQgbGlzdCBvZiBgenN3YXBfcG9vbGAgc3RydWN0dXJlcyB3aXRoIGRpcmVjdCBwb2ludGVycyBpbiBgenN3YXBfZW50cnlgIHRvIGFuIFhBcnJheS1iYXNlZCBzeXN0ZW0gdXNpbmcgYSBgdTggcG9vbF9pZHhgLiBUaGUgaW1tZWRpYXRlIHdpbiBpcyBhIDctYnl0ZSBzYXZpbmcgcGVyIGB6c3dhcF9lbnRyeWAgZW50cnkgb24gNjQtYml0IHN5c3RlbXMsIHdoaWNoLCBtdWx0aXBsaWVkIGFjcm9zcyBtaWxsaW9ucyBvZiBlbnRyaWVzLCB3aWxsIG1ha2UgYSB0YW5naWJsZSBkaWZmZXJlbmNlLiBUaGUgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBYQXJyYXkgbG9va3VwIHdpdGggYHpzd2FwX2VudHJ5X3Bvb2woKWAgaXMgYSBzb3VuZCBkZXNpZ24gY2hvaWNlLCBhbmQgdGhlIHNoaWZ0IHRvIFJDVSB3b3JrIHF1ZXVlcyBmb3IgcG9vbCBkZXN0cnVjdGlvbiBpcyBjbGVhbmVyIHRoYW4gYHNjaGVkdWxlX3dvcmtgIGFuZCBgc3luY2hyb25pemVfcmN1KClgLiBUaGUgYFdBUk5fT05gIGNoZWNrcyBhcmUgYSBnb29kIHNhZmV0eSBuZXQgZm9yIGFueSBsb29rdXAgZmFpbHVyZXMuCgpMb29raW5nIGNsb3NlbHkgYXQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBpdCBhbGwgY2hlY2tzIG91dC4gVGhlIGBlbnRyeS0mZ3Q7cG9vbF9pZHggPSBwb29sLSZndDtpZHg7YCBhc3NpZ25tZW50IGhhcHBlbnMgKmJlZm9yZSogdGhlIGVudHJ5IGlzIHN0b3JlZCBpbiB0aGUgWEFycmF5LCBhbmQgdGhlIHBvb2wmIzM5O3MgaW5kZXggaXMgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhbmQgbm8gY29waWVzIHRvIHVzZXJzcGFjZSBvY2N1ciwgYXZvaWRpbmcgaW5mb2xlYWtzLiBUaGUgc2VxdWVuY2UgaW4gYHpzd2FwX3N0b3JlX3BhZ2UoKWAgbG9va3MgZmluZSB0b287IGV2ZXJ5IGZpZWxkIGluIGB6c3dhcF9lbnRyeWAgZ2V0cyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIFhBcnJheSB3cml0ZS4KCkkgd2VudCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLTVNBTiBjcml0ZXJpYSwgYW5kIGZyb20gd2hhdCBJIGNhbiBzZWUsIG5vbmUgb2YgdGhlIHR5cGljYWwgJiMzNDtOZWVkc0tNU0FOPXRydWUmIzM0OyBjb25kaXRpb25zIGFwcGx5IGhlcmUuIFRoZXJlJiMzOTtzIG5vIHBhc3Npbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgY3JpdGVyaWEgZm9yICYjMzQ7TmVlZHNLTVNBTj1mYWxzZSYjMzQ7IGFsbCBmaXQgYXMgd2VsbDsgdGhlIHByaW1hcnkgcmlza3MgaGVyZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIG9mIGFueSBjb25jdXJyZW50IGNvZGU6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGlzc3VlcywgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZ2VuZXJhbCBkZWJ1Z2dpbmcgdG9vbHMgd2lsbCBoYW5kbGUgdGhvc2UuCgpUaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgc291bmQuIE5vIEtNU0FOIGZsYWdzIGFyZSBuZWVkZWQuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHpzd2FwIHBvb2wgbWFuYWdlbWVudCBieSByZXBsYWNpbmcgdGhlIGxpbmtlZCBsaXN0IG9mIHBvb2xzIGFuZCA4LWJ5dGUgcG9vbCBwb2ludGVyIGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIHdpdGggYW4gWEFycmF5IGxvb2t1cCB0YWJsZSBhbmQgYSAxLWJ5dGUgcG9vbCBpbmRleCAoYHBvb2xfaWR4YCksIGFsb25nc2lkZSB0cmFuc2l0aW9uaW5nIHBvb2wgY2xlYW51cCB0byBgcmN1X3dvcmtgLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXG4yLiBVc2VyLXNwYWNlIEluZm8gTGVha3M6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgc3lzY2FsbCByZXR1cm4sIGV0Yy4pLlxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgcG9vbCBtYW5hZ2VtZW50IGJ5IHJlcGxhY2luZyB0aGUgbGlua2VkIGxpc3Qgb2YgcG9vbHMgYW5kIDgtYnl0ZSBwb29sIHBvaW50ZXIgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgd2l0aCBhbiBYQXJyYXkgbG9va3VwIHRhYmxlIGFuZCBhIDEtYnl0ZSBwb29sIGluZGV4IChgcG9vbF9pZHhgKSwgYWxvbmdzaWRlIHRyYW5zaXRpb25pbmcgcG9vbCBjbGVhbnVwIHRvIGByY3Vfd29ya2AuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgZmllbGRzIGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIGFuZCBgc3RydWN0IHpzd2FwX3Bvb2xgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIHB1Ymxpc2hlZCBvciBhY2Nlc3NlZC4gYHBvb2xfaWR4YCBpcyBzZXQgdXBvbiBjb21wcmVzc2lvbiBzdWNjZXNzIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeSBpbnRvIHRoZSBzd2FwIFhBcnJheS5cbjIuIFVzZXItc3BhY2UgSW5mbyBMZWFrczogTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBzeXNjYWxsIHJldHVybiwgZXRjLikuXG4zLiBSZWxldmFudCBCdWcgQ2xhc3NlczogQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGxpZmV0aW1lL2dyYWNlLXBlcmlvZCB0cmFja2luZywgWEFycmF5IGluZGV4aW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NDcuMzEwNDE1MjU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzMzk2NTU0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfdG90YWxfcGFnZXNcIixcbiAgICBcInpzd2FwX2VudHJ5X2ZyZWVcIixcbiAgICBcInpzd2FwX2RlY29tcHJlc3NcIixcbiAgICBcInpzd2FwX3N0b3JlX3BhZ2VcIixcbiAgICBcIl9fenN3YXBfcG9vbF9lbXB0eVwiLFxuICAgIFwiX196c3dhcF9wb29sX3JlbGVhc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBwb29sIG1hbmFnZW1lbnQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rZWQgbGlzdCBvZiBwb29scyBhbmQgOC1ieXRlIHBvb2wgcG9pbnRlciBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCB3aXRoIGFuIFhBcnJheSBsb29rdXAgdGFibGUgYW5kIGEgMS1ieXRlIHBvb2wgaW5kZXggKGBwb29sX2lkeGApLCBhbG9uZ3NpZGUgdHJhbnNpdGlvbmluZyBwb29sIGNsZWFudXAgdG8gYHJjdV93b3JrYC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXFxuMi4gVXNlci1zcGFjZSBJbmZvIExlYWtzOiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIHN5c2NhbGwgcmV0dXJuLCBldGMuKS5cXG4zLiBSZWxldmFudCBCdWcgQ2xhc3NlczogQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGxpZmV0aW1lL2dyYWNlLXBlcmlvZCB0cmFja2luZywgWEFycmF5IGluZGV4aW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGRpcmVjdCBwb29sIHBvaW50ZXJzIGluIHN0cnVjdCB6c3dhcF9lbnRyeSB3aXRoIHBvb2wgaW5kaWNlcyB0cmFja2VkIGluIGFuIFhBcnJheS4gSXQgdXBkYXRlcyBSQ1UtcHJvdGVjdGVkIHBvb2wgbG9va3VwcywgY2hhbmdlcyB0ZWFyZG93biB0byB1c2UgcmN1X3dvcmssIGFkanVzdHMgY29uY3VycmVuY3kgbG9ja2luZyB3aXRoIFhBcnJheSBsb2NrcywgYW5kIG1vZGlmaWVzIHRoZSBzdG9yZS9kZWNvbXByZXNzL2ZyZWUvd3JpdGViYWNrIGxpZmVjeWNsZSBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjQ3LjMxMDQyMDU1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMjE1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDA0MWZlZGZhMmVjYWU2MDI2NTVjZGQxZmJiYmVlNDk3NTg0ZWM5YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDIzOjQ3OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggZjNhZTNjODFlNDhlYS4uMzFjZjBlZjQzZDIzNiAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0zNCw2ICszNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93cml0ZWJhY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvenNtYWxsb2MuaFxcdTAwM2VcXG4gXFxuQEAgLTE1NCwxMiArMTU1LDI0IEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcXG4gXFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XFxuIFxcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7XFxuIFxcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xcbitcXHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcXG4gXFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcXG4rXFx0dTggaWR4O1xcbiBcXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xcbiB9O1xcbiBcXG4rLypcXG4rICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzXFxuKyAqIHRoZSByZXNlcnZlZCBpZCAwIHVuYWxsb2NhdGVkLCBzbyBsb29raW5nIGl0IHVwIG5ldmVyIGFsaWFzZXMgYSBsaXZlXFxuKyAqIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZSB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW5cXG4rICogZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tIGEgcGVyY3B1X3JlZiByZWxlYXNlXFxuKyAqIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cXG4rICovXFxuKyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxXFxuKyNkZWZpbmUgWlNXQVBfTUFYX1BPT0xfSUQgVThfTUFYXFxuK3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTtcXG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XFxuK1xcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXFxuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XFxuIFxcbkBAIC0xODIsNyArMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XFxuICAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXFxuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXFxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0Llxcbi0gKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5J3MgZGF0YSBpcyBpblxcbisgKiBwb29sX2lkeCAtIGlkIG9mIHRoZSB6c3dhcF9wb29sIHRoYXQgdGhlIGVudHJ5J3MgZGF0YSBpcyBpbi5cXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXFxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xcbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cXG5AQCAtMTkxLDE5ICsyMDQsMzAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcXG4gXFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuIFxcdGJvb2wgcmVmZXJlbmNlZDtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuK1xcdHU4IHBvb2xfaWR4O1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcXG4rICogcmVmZXJlbmNlIHRvIGl0cyBwb29sICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuK3tcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHBvb2wgPSB4YV9sb2FkKFxcdTAwMjZ6c3dhcF9wb29scywgZW50cnktXFx1MDAzZXBvb2xfaWR4KTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcG9vbDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xcbiBcXG4tLyogUkNVLXByb3RlY3RlZCBpdGVyYXRpb24gKi9cXG4tc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7XFxuLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovXFxuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfcG9vbHNfbG9jayk7XFxuIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqL1xcbiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcXG4gXFxuQEAgLTI3NSw2ICsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiBcXHRjaGFyIG5hbWVbMzhdOyAvKiAnenN3YXAnICsgMzIgY2hhciAobWF4KSBudW0gKyBcXFxcMCAqL1xcbiBcXHRpbnQgcmV0LCBjcHU7XFxuK1xcdHUzMiBpZDtcXG4gXFxuIFxcdGlmICghenN3YXBfaGFzX3Bvb2wgXFx1MDAyNlxcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0zMjAsMTIgKzM0NSwyNCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxuIFxcdFxcdFxcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byByZWZfZmFpbDtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbitcXG4rXFx0cmV0ID0geGFfYWxsb2NfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzLCBcXHUwMDI2aWQsIHBvb2wsXFxuK1xcdFxcdFxcdCAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLFxcbitcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVCVVNZKVxcbitcXHRcXHRcXHRwcl9lcnIoXFxcImNhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgKyAxKTtcXG4rXFx0XFx0Z290byB4YV9mYWlsO1xcbitcXHR9XFxuK1xcdHBvb2wtXFx1MDAzZWlkeCA9IGlkO1xcbiBcXG4gXFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiY3JlYXRlZFxcXCIsIHBvb2wpO1xcbiBcXG4gXFx0cmV0dXJuIHBvb2w7XFxuIFxcbit4YV9mYWlsOlxcbitcXHRwZXJjcHVfcmVmX2V4aXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZik7XFxuIHJlZl9mYWlsOlxcbiBcXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFxcdTAwMjZwb29sLVxcdTAwM2Vub2RlKTtcXG4gXFxuQEAgLTM3OSwxNiArNDE2LDE0IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4gXFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRyZWxlYXNlX3dvcmspO1xcbi1cXG4tXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7XFxuIFxcbiBcXHQvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqL1xcbiBcXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXFx1MDAyNnBvb2wtXFx1MDAzZXJlZikpO1xcbiBcXHRwZXJjcHVfcmVmX2V4aXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZik7XFxuIFxcbi1cXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXFxuK1xcdC8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXFxuIFxcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcXG4gfVxcbiBcXG5AQCAtNDAwLDE2ICs0MzUsMTYgQEAgc3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXFxuIFxcbiBcXHRwb29sID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpwb29sKSwgcmVmKTtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdHhhX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFxuIFxcdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XFxuIFxcbi1cXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbitcXHRfX3hhX2VyYXNlKFxcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cXHUwMDNlaWR4KTtcXG4gXFxuLVxcdElOSVRfV09SSyhcXHUwMDI2cG9vbC1cXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XFxuLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2Vfd29yayk7XFxuK1xcdElOSVRfUkNVX1dPUksoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcXG4rXFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmspO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbitcXHR4YV91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxuQEAgLTQzNSw3ICs0NzAsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuIFxcbi1cXHRwb29sID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcXHUwMDI2enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpO1xcbitcXHRwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCxcXG4rXFx0XFx0XFx0XFx0ICAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spKTtcXG4gXFx0V0FSTl9PTkNFKCFwb29sIFxcdTAwMjZcXHUwMDI2IHpzd2FwX2hhc19wb29sLFxcbiBcXHRcXHQgIFxcXCIlczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbkBAIC00NDQsNyArNDgwLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbiBcXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZClcXG4ge1xcbi1cXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xcbiB9XFxuQEAgLTQ2NCwxNCArNTAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxcbiBcXHRyZXR1cm4gcG9vbDtcXG4gfVxcbiBcXG4tLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xcbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXFxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4tXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jayk7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbCkge1xcbiBcXHRcXHRpZiAoc3RyY21wKHBvb2wtXFx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cXG5AQCAtNDk3LDkgKzUzNCwxNSBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogcmN1X3JlYWRfbG9jaygpIGlzIHJlcXVpcmVkIGhlcmUsIG5vdCBqdXN0IGZvciB4YV9mb3JfZWFjaCgpOiBpdCBhbHNvXFxuK1xcdCAqIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSB3aGlsZSBpdCBpcyBkZXJlZmVyZW5jZWQsIHNpbmNlIGEgY29uY3VycmVudGx5XFxuK1xcdCAqIHJldGlyZWQgcG9vbCBpcyBmcmVlZCB2aWEgcXVldWVfcmN1X3dvcmsoKSBhZnRlciBhIGdyYWNlIHBlcmlvZC5cXG4rXFx0ICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxcbiBcXHRcXHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cXHUwMDNlenNfcG9vbCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNTU2LDIwICs1OTksMTcgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuLVxcbitcXHR4YV9sb2NrX2JoKFxcdTAwMjZ6c3dhcF9wb29scyk7XFxuIFxcdHBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpO1xcbiBcXHRpZiAocG9vbCkge1xcbiBcXHRcXHR6c3dhcF9wb29sX2RlYnVnKFxcXCJ1c2luZyBleGlzdGluZ1xcXCIsIHBvb2wpO1xcbiBcXHRcXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xcbi1cXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbiBcXHR9XFxuK1xcdHhhX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHMpO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbi1cXG4tXFx0aWYgKCFwb29sKVxcbitcXHRpZiAoIXBvb2wpIHtcXG4gXFx0XFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xcbi1cXHRlbHNlIHtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKVxcbiBcXHRcXHQgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluXFxuQEAgLTU4NiwyMyArNjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdHhhX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XFxuLVxcdFxcdGxpc3RfYWRkX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XFxuIFxcdFxcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcXG4gXFx0fSBlbHNlIGlmIChwb29sKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHNcXG4tXFx0XFx0ICogbGlzdDsgaWYgaXQncyBuZXcgKGFuZCBlbXB0eSkgdGhlbiBpdCdsbCBiZSByZW1vdmVkIGFuZFxcbi1cXHRcXHQgKiBkZXN0cm95ZWQgYnkgdGhlIHB1dCBhZnRlciB3ZSBkcm9wIHRoZSBsb2NrXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFx0XFx0cHV0X3Bvb2wgPSBwb29sO1xcbiBcXHR9XFxuIFxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdHhhX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHMpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRHJvcCB0aGUgcmVmIGZyb20gZWl0aGVyIHRoZSBvbGQgY3VycmVudCBwb29sLFxcbkBAIC03NTEsOSArNzg1LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4gICovXFxuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4ge1xcbitcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xcbitcXG4gXFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XFxuLVxcdHpzX2ZyZWUoZW50cnktXFx1MDAzZXBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbi1cXHR6c3dhcF9wb29sX3B1dChlbnRyeS1cXHUwMDNlcG9vbCk7XFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKCFwb29sKSkge1xcbitcXHRcXHR6c19mcmVlKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbitcXHRcXHR6c3dhcF9wb29sX3B1dChwb29sKTtcXG4rXFx0fVxcbiBcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKSB7XFxuIFxcdFxcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXFx1MDAzZW9iamNnLCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG4gXFx0XFx0b2JqX2Nncm91cF9wdXQoZW50cnktXFx1MDAzZW9iamNnKTtcXG5AQCAtOTEwLDEyICs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cXHUwMDNlcG9vbDtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcXG4gXFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG4gXFx0aW50IHJldCA9IDAsIGRsZW47XFxuIFxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwb29sKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2VtdXRleCk7XFxuIFxcdHpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUsIGlucHV0LCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG5AQCAtOTUxLDcgKzk5Miw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXFxcIkRlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LVxcdTAwM2UlZClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF90eXBlKGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF9vZmZzZXQoZW50cnktXFx1MDAzZXN3cGVudHJ5KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZXBvb2wtXFx1MDAzZXRmbV9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwb29sLVxcdTAwM2V0Zm1fbmFtZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZWxlbmd0aCwgZGxlbik7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xNDA5LDYgKzE0NTAsMTYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXFxuIFxcdFxcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeTogY29tcHJlc3Npb24gaGFzXFxuK1xcdCAqIHN1Y2NlZWRlZCBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBwaW5uZWQgYnkgdGhpcyBzdG9yZSwgc28gdGhlIGlkIGlzXFxuK1xcdCAqIGZpbmFsLiAgRG9pbmcgaXQgaGVyZSAocmF0aGVyIHRoYW4gYWZ0ZXIgeGFfc3RvcmUoKSkgbWVhbnMgdGhlIGVudHJ5XFxuK1xcdCAqIGlzIG5ldmVyIGJyaWVmbHkgdmlzaWJsZSB3aXRoIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBvdmVyIGZyb20gc2xhYlxcbitcXHQgKiByZXVzZSwgd2hpY2ggenN3YXBfZW50cnlfcG9vbCgpIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIHRvIGFuXFxuK1xcdCAqIHVucmVsYXRlZCBsaXZlIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRlbnRyeS1cXHUwMDNlcG9vbF9pZHggPSBwb29sLVxcdTAwM2VpZHg7XFxuK1xcbiBcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuIFxcdFxcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxcbiBcXHRcXHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xcbkBAIC0xNDU0LDcgKzE1MDUsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXFxuIFxcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXFxuIFxcdCAqL1xcbi1cXHRlbnRyeS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuIFxcdGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XFxuIFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbiBcXHRlbnRyeS1cXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XFxuQEAgLTE3OTAsNyArMTg0MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4gXFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcXG4gXFx0aWYgKHBvb2wpIHtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXFxcblxcXCIsIHBvb2wtXFx1MDAzZXRmbV9uYW1lKTtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QsIFxcdTAwMjZ6c3dhcF9wb29scyk7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xcbiBcXHRcXHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XFxuIFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbiBcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0Nzo0Ny42OTE0MDQxMjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNTk0NjAxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2xvYWRcIixcbiAgICBcInpzd2FwX2ludmFsaWRhdGVcIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX3RvdGFsX3BhZ2VzXCIsXG4gICAgXCJ6c3dhcF9lbnRyeV9mcmVlXCIsXG4gICAgXCJ6c3dhcF9kZWNvbXByZXNzXCIsXG4gICAgXCJ6c3dhcF9zdG9yZV9wYWdlXCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfZW1wdHlcIixcbiAgICBcIl9fenN3YXBfcG9vbF9yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0venN3YXAuYyBieSByZXBsYWNpbmcgZGlyZWN0IHBvb2wgcG9pbnRlcnMgaW4gc3RydWN0IHpzd2FwX2VudHJ5IHdpdGggcG9vbCBpbmRpY2VzIHRyYWNrZWQgaW4gYW4gWEFycmF5LiBJdCB1cGRhdGVzIFJDVS1wcm90ZWN0ZWQgcG9vbCBsb29rdXBzLCBjaGFuZ2VzIHRlYXJkb3duIHRvIHVzZSByY3Vfd29yaywgYWRqdXN0cyBjb25jdXJyZW5jeSBsb2NraW5nIHdpdGggWEFycmF5IGxvY2tzLCBhbmQgbW9kaWZpZXMgdGhlIHN0b3JlL2RlY29tcHJlc3MvZnJlZS93cml0ZWJhY2sgbGlmZWN5Y2xlIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDQxZmVkZmEyZWNhZTYwMjY1NWNkZDFmYmJiZWU0OTc1ODRlYzliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMzo0Nzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmM2FlM2M4MWU0OGVhLi4zMWNmMGVmNDNkMjM2IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTM0LDYgKzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTE1NCwxMiArMTU1LDI0IEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDtcbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4rXHR1OCBpZHg7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4rLypcbisgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHNcbisgKiB0aGUgcmVzZXJ2ZWQgaWQgMCB1bmFsbG9jYXRlZCwgc28gbG9va2luZyBpdCB1cCBuZXZlciBhbGlhc2VzIGEgbGl2ZVxuKyAqIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZSB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW5cbisgKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2VcbisgKiBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuXG4rICovXG4rI2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDFcbisjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWFxuK3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTtcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDtcbitcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xODIsNyArMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcbiAgKiAgICAgICAgICAgICAgbG9naWMgaWYgcmVmZXJlbmNlZCBpcyB1bnNldC4gU2VlIGNvbW1lbnRzIGluIHRoZSBzaHJpbmtlclxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LlxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXG4rICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSdzIGRhdGEgaXMgaW4uXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXG4gICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvXG4gICogbHJ1IC0gaGFuZGxlIHRvIHRoZSBwb29sJ3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXG5AQCAtMTkxLDE5ICsyMDQsMzAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcbiBcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuIFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGJvb2wgcmVmZXJlbmNlZDtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1x0dTggcG9vbF9pZHg7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbHJ1O1xuIH07XG4gXG4rLypcbisgKiBUaGUgcG9vbCBzdGF5cyBhbGl2ZSBhZnRlciB0aGlzIHJldHVybnMgYmVjYXVzZSBhIHN0b3JlZCBlbnRyeSBob2xkcyBhXG4rICogcmVmZXJlbmNlIHRvIGl0cyBwb29sICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuK3tcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cG9vbCA9IHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHBvb2w7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIFxuLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovXG4tc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7XG4tLyogcHJvdGVjdHMgenN3YXBfcG9vbHMgbGlzdCBtb2RpZmljYXRpb24gKi9cbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spO1xuIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqL1xuIHN0YXRpYyBhdG9taWNfdCB6c3dhcF9wb29sc19jb3VudCA9IEFUT01JQ19JTklUKDApO1xuIFxuQEAgLTI3NSw2ICsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICd6c3dhcCcgKyAzMiBjaGFyIChtYXgpIG51bSArIFxcMCAqL1xuIFx0aW50IHJldCwgY3B1O1xuK1x0dTMyIGlkO1xuIFxuIFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTMyMCwxMiArMzQ1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcbitcdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcbitcdFx0XHQgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSxcbitcdFx0XHQgIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbitcdFx0XHRwcl9lcnIoXCJjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXFxuXCIsXG4rXHRcdFx0ICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCArIDEpO1xuK1x0XHRnb3RvIHhhX2ZhaWw7XG4rXHR9XG4rXHRwb29sLVx1MDAzZWlkeCA9IGlkO1xuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcImNyZWF0ZWRcIiwgcG9vbCk7XG4gXG4gXHRyZXR1cm4gcG9vbDtcbiBcbit4YV9mYWlsOlxuK1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiByZWZfZmFpbDpcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbkBAIC0zNzksMTYgKzQxNiwxNCBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4gXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksXG4tXHRcdFx0XHRcdFx0cmVsZWFzZV93b3JrKTtcbi1cbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcbiBcbiBcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXG4gXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXHUwMDI2cG9vbC1cdTAwM2VyZWYpKTtcbiBcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gXG4tXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4rXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuIFx0enN3YXBfcG9vbF9kZXN0cm95KHBvb2wpO1xuIH1cbiBcbkBAIC00MDAsMTYgKzQzNSwxNiBAQCBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbiBcbiBcdHBvb2wgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnBvb2wpLCByZWYpO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuIFxuLVx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4rXHRfX3hhX2VyYXNlKFx1MDAyNnpzd2FwX3Bvb2xzLCBwb29sLVx1MDAzZWlkeCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbitcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yayk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbitcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuQEAgLTQzNSw3ICs0NzAsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXG4tXHRwb29sID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcdTAwMjZ6c3dhcF9wb29scywgdHlwZW9mKCpwb29sKSwgbGlzdCk7XG4rXHRwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCxcbitcdFx0XHRcdCAgICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spKTtcbiBcdFdBUk5fT05DRSghcG9vbCBcdTAwMjZcdTAwMjYgenN3YXBfaGFzX3Bvb2wsXG4gXHRcdCAgXCIlczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXFxuXCIsIF9fZnVuY19fKTtcbiBcbkBAIC00NDQsNyArNDgwLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuIFxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4ge1xuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKTtcbiBcbiBcdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xuIH1cbkBAIC00NjQsMTQgKzUwMCwxNSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4rLyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jayk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcdTAwMjZ6c3dhcF9wb29scywgbGlzdCkge1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7XG4gXHRcdGlmIChzdHJjbXAocG9vbC1cdTAwM2V0Zm1fbmFtZSwgY29tcHJlc3NvcikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbkBAIC00OTcsOSArNTM0LDE1IEBAIHVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbitcdC8qXG4rXHQgKiByY3VfcmVhZF9sb2NrKCkgaXMgcmVxdWlyZWQgaGVyZSwgbm90IGp1c3QgZm9yIHhhX2Zvcl9lYWNoKCk6IGl0IGFsc29cbitcdCAqIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSB3aGlsZSBpdCBpcyBkZXJlZmVyZW5jZWQsIHNpbmNlIGEgY29uY3VycmVudGx5XG4rXHQgKiByZXRpcmVkIHBvb2wgaXMgZnJlZWQgdmlhIHF1ZXVlX3JjdV93b3JrKCkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXG4rXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxuIFx0XHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cdTAwM2V6c19wb29sKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTU1NiwyMCArNTk5LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuK1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcbiBcdGlmIChwb29sKSB7XG4gXHRcdHpzd2FwX3Bvb2xfZGVidWcoXCJ1c2luZyBleGlzdGluZ1wiLCBwb29sKTtcbiBcdFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbi1cdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4gXHR9XG4rXHR4YV91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xuIFxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4tXHRpZiAoIXBvb2wpXG4rXHRpZiAoIXBvb2wpIHtcbiBcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4rXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBSZXN0b3JlIHRoZSBpbml0aWFsIHJlZiBkcm9wcGVkIGJ5IHBlcmNwdV9yZWZfa2lsbCgpXG4gXHRcdCAqIHdoZW4gdGhlIHBvb2wgd2FzIGRlY29tbWlzc2lvbmVkIGFuZCBzd2l0Y2ggaXQgYWdhaW5cbkBAIC01ODYsMjMgKzYyNiwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbVxuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRpZiAoIXJldCkge1xuIFx0XHRwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpO1xuLVx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKHBvb2wpIHtcbi1cdFx0Lypcbi1cdFx0ICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29sc1xuLVx0XHQgKiBsaXN0OyBpZiBpdCdzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0J2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbitcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHQvKlxuIFx0ICogRHJvcCB0aGUgcmVmIGZyb20gZWl0aGVyIHRoZSBvbGQgY3VycmVudCBwb29sLFxuQEAgLTc1MSw5ICs3ODUsMTMgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuICAqL1xuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiB7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuK1xuIFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuK1x0aWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7XG4rXHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuK1x0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbitcdH1cbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZykge1xuIFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVx1MDAzZW9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuIFx0XHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cdTAwM2VvYmpjZyk7XG5AQCAtOTEwLDEyICs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcbiBcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gXHRpbnQgcmV0ID0gMCwgZGxlbjtcbiBcbitcdGlmIChXQVJOX09OX09OQ0UoIXBvb2wpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5AQCAtOTUxLDcgKzk5Miw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHByX2FsZXJ0X3JhdGVsaW1pdGVkKFwiRGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCIsXG4gXHRcdFx0XHRcdFx0c3dwX3R5cGUoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuIFx0XHRcdFx0XHRcdHN3cF9vZmZzZXQoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuLVx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNldGZtX25hbWUsXG4rXHRcdFx0XHRcdFx0cG9vbC1cdTAwM2V0Zm1fbmFtZSxcbiBcdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2VsZW5ndGgsIGRsZW4pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xNDA5LDYgKzE0NTAsMTYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuIFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiBcbitcdC8qXG4rXHQgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5OiBjb21wcmVzc2lvbiBoYXNcbitcdCAqIHN1Y2NlZWRlZCBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBwaW5uZWQgYnkgdGhpcyBzdG9yZSwgc28gdGhlIGlkIGlzXG4rXHQgKiBmaW5hbC4gIERvaW5nIGl0IGhlcmUgKHJhdGhlciB0aGFuIGFmdGVyIHhhX3N0b3JlKCkpIG1lYW5zIHRoZSBlbnRyeVxuK1x0ICogaXMgbmV2ZXIgYnJpZWZseSB2aXNpYmxlIHdpdGggYSBzdGFsZSBwb29sX2lkeCBsZWZ0IG92ZXIgZnJvbSBzbGFiXG4rXHQgKiByZXVzZSwgd2hpY2ggenN3YXBfZW50cnlfcG9vbCgpIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIHRvIGFuXG4rXHQgKiB1bnJlbGF0ZWQgbGl2ZSBwb29sLlxuK1x0ICovXG4rXHRlbnRyeS1cdTAwM2Vwb29sX2lkeCA9IHBvb2wtXHUwMDNlaWR4O1xuK1xuIFx0b2xkID0geGFfc3RvcmUoc3dhcF96c3dhcF90cmVlKHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSxcbiBcdFx0ICAgICAgIGVudHJ5LCBHRlBfS0VSTkVMKTtcbkBAIC0xNDU0LDcgKzE1MDUsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuIFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbiBcdCAqL1xuLVx0ZW50cnktXHUwMDNlcG9vbCA9IHBvb2w7XG4gXHRlbnRyeS1cdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XG4gXHRlbnRyeS1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0ZW50cnktXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XG5AQCAtMTc5MCw3ICsxODQwLDcgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxuIFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbiBcdGlmIChwb29sKSB7XG4gXHRcdHByX2luZm8oXCJsb2FkZWQgdXNpbmcgcG9vbCAlc1xcblwiLCBwb29sLVx1MDAzZXRmbV9uYW1lKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG4gXHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NDcuNjkxNDA1OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwODQzNTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0J3MgdGhlIGtlcm5lbCdzIGNvbXByZXNzZWQgc3dhcCBhcmVhIGltcGxlbWVudGF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgYHpzd2FwX3Bvb2xgIGlzIGhhbmRsZWQuIEl0J3MgbW92aW5nIGZyb20gYSBkaXJlY3QgcG9pbnRlciB3aXRoaW4gYHpzd2FwX2VudHJ5YCAoYHN0cnVjdCB6c3dhcF9lbnRyeWApIHRvIGFuIGluZGV4IChgdTggcG9vbF9pZHhgKSByZWZlcmVuY2luZyBhbiB4YXJyYXkgKGB6c3dhcF9wb29sc2ApLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCEgU28gbm93LCBpbnN0ZWFkIG9mIGEgZGlyZWN0IHBvaW50ZXIsIHdlIGhhdmUgYW4gSUQgbG9va3VwLiBUaGlzIHN1Z2dlc3RzIHBvdGVudGlhbCBjaGFuZ2VzIGluIGhvdyBtZW1vcnkgaXMgYWNjZXNzZWQsIGFsbG9jYXRlZCwgYW5kIGZyZWVkIHdpdGhpbiB0aGUgenN3YXAgc3Vic3lzdGVtLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGB4YV9hbGxvY19iaGAsIGBfX3hhX2VyYXNlYCwgYHhhX2Zvcl9lYWNoYCwgYW5kIGB4YV9sb2FkYCwgYWxsIHVuZGVyIFJDVSBwcm90ZWN0aW9uLiBUaGUgaW50cm9kdWN0aW9uIG9mIGByY3Vfd29ya2AgYW5kIGByY3VfYXNzaWduX3BvaW50ZXJgIGlzIGFub3RoZXIga2V5IGRldGFpbC4gVGhpcyBoaW50cyBhdCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCB3ZSBjYW4gZXhwbG9pdCBkdXJpbmcgZnV6emluZy4gVGhlIGZ1bmN0aW9uIHJlcGxhY2VtZW50cyBhbHNvIGRlbWFuZCBjYXJlZnVsIGV4YW1pbmF0aW9uLiBgenN3YXBfZW50cnlfZnJlZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgenN3YXBfcG9vbF9jcmVhdGVgLCBhbGwgb2YgdGhlc2UgYWx0ZXJlZCBmdW5jdGlvbnMsIGlmIG1pc2hhbmRsZWQsIGNvdWxkIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWZhY3RvcmluZyBpcyBwcm9iYWJseSBkb25lIGZvciBhIHJlYXNvbiwgcGVyaGFwcyB0byBzdXBwb3J0IG11bHRpcGxlIHBvb2xzIG9yIGltcHJvdmUgc2NhbGFiaWxpdHkuIFRoZSBzd2l0Y2ggdG8gYW4geGFycmF5IGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYmVjYXVzZSBpdCBpcyBhbiBpbnRyaWNhdGUgZGF0YSBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb29sIG1hbmFnZW1lbnQgY29kZSwgZXNwZWNpYWxseSB0aGUgbmV3IGhlbHBlciBgenN3YXBfZW50cnlfcG9vbGAsIHdoaWNoIGlzIGxpa2VseSBhIGtleSBwb2ludCBvZiBpbnRlcmFjdGlvbi5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB6c3dhcC4gSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgdXNlZC4gSSB3aWxsIHByb2JhYmx5IHJ1biBgZ3JlcHBlcmAgb3IgY2hlY2sgYG1tL0tjb25maWdgIGRpcmVjdGx5IHRvIGdhdGhlciB0aGUgcmVxdWlyZWQgaW5mby4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBwcmVjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGUgenN3YXAgZnVuY3Rpb25hbGl0eSB0byBldmVuIGJlIGFjdGl2ZS4gV2l0aCB0aGF0LCBJJ2xsIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hhdCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBhcmVhIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBgRm9jdXNTeW1ib2xzYCBhbmQgdGhlIGNvbmZpZ3MgSSBuZWVkIGZvciB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NTIuMTk5ODQzOTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTIxODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NTIuMjU3NzY4MjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU2NzUwMTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBaU1dBUCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBaU1dBUCdzIGRlcGVuZGVuY2llcy4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHB1bGwgdXAgdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBhbmQgc3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3LiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucyBhbmQgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIFpTV0FQLiBJJ20gbG9va2luZyBmb3IgYSBxdWljayBhbmQgZGlyZWN0IGhpdCwgbm90aGluZyBmYW5jeSwganVzdCB0aGUgYnVpbGRpbmcgYmxvY2tzLiBUaW1lIHRvIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjUzLjgyNTI3MTU3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0Nzo1My44MjUzNjkzNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQzNzk4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIG9mIHpzd2FwLm8qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzd2FwLm9gIGlzIGJlaW5nIGNvbXBpbGVkLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgZGVmaW5lZCBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZHVsZXMsIGFuZCB1bmRvdWJ0ZWRseSB3aGVyZSB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgYHpzd2FwLm9gIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBmbGFncywgaW5jbHVkZSBwYXRocywgYW5kIGFueSBsaW5rIGRlcGVuZGVuY2llcyBsYWlkIG91dCB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCBJIGNhbiBsZWFybi4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBjb21waWxlciBjaG9pY2VzIG1hZGUgZm9yIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjU1LjM2OTE3MDMyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE3NzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03OT1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo4MDpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgxLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0Nzo1NS40MTkzNTAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDcxNzI4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpzd2FwIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19aU1dBUGAgYW5kIGBDT05GSUdfU1dBUGAg4oCTIGVzc2VudGlhbGx5LCBgWlNXQVBgIOKAkyBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYSB3aG9sZSBzbGV3IG9mIGZ1bmN0aW9ucywgbW9zdGx5IHN0YXRpYywgZGlyZWN0bHkgcmVsYXRlZCB0byBwb29sIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSBJIHNlZSB0aGUgZm9sbG93aW5nOiBgenN3YXBfZW50cnlfcG9vbGAsIGB6c3dhcF9wb29sX2NyZWF0ZWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGBfX3pzd2FwX3Bvb2xfZW1wdHlgLCBgX196c3dhcF9wb29sX2N1cnJlbnRgLCBgenN3YXBfcG9vbF9jdXJyZW50YCwgYHpzd2FwX3Bvb2xfY3VycmVudF9nZXRgLCBgenN3YXBfcG9vbF9maW5kX2dldGAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGFuZCBgenN3YXBfZW50cnlfZnJlZWAuIFRoZXNlIGFyZSBsaWtlbHkgYWxsIHBhcnQgb2YgdGhlIHpzd2FwIGRhdGEgc3RydWN0dXJlIG9yIGNvcmUgenN3YXAgb3BlcmF0aW9uLCBsaWtlbHkgdG8gaW5jbHVkZSBhbiBpbnRlcm5hbCBwb29sLiBJJ20gYWxzbyBzZWVpbmcgYHpzd2FwX3RvdGFsX3BhZ2VzYC5cblxuSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSB6c3dhcCBwcm9jZXNzIGl0c2VsZiwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGludGVyYWN0IHdpdGggdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBhbHNvIHNlZSBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYW5kIGB6c3dhcF9zZXR1cGAuIEkgc2VlIGEgY291cGxlIG9mIG90aGVycyBhcyB3ZWxsLCBidXQgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAgYW5kIGB6c3dhcF9lbnRyeV9mcmVlYCBhcmUgbGlrZWx5IGtleSB0byB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBhbmQgc3RvcmFnZSBsaWZlY3ljbGUuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgKmhvdyogdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMgYXJvdW5kIGB6c3dhcF9zdG9yZV9wYWdlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NDcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NTguNDY2NTI0OTIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9zdG9yZXx6c3dhcF9sb2FkfHpzd2FwX2ludmFsaWRhdGV8enN3YXBfcG9vbF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jLTQ3LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDg6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNDktLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo1MDpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNTEtXFxuLS1cXG5tbS96c3dhcC5jLTU5LS8qIFBvb2wgbGltaXQgd2FzIGhpdCAoc2VlIHpzd2FwX21heF9wb29sX3BlcmNlbnQpICovXFxubW0venN3YXAuYzo2MDpzdGF0aWMgdTY0IHpzd2FwX3Bvb2xfbGltaXRfaGl0O1xcbm1tL3pzd2FwLmMtNjEtLyogUGFnZXMgd3JpdHRlbiBiYWNrIHdoZW4gcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xcbi0tXFxubW0venN3YXAuYz03Nz1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNocmlua193cTtcXG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cXG5tbS96c3dhcC5jOjc5OnN0YXRpYyBib29sIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xcbm1tL3pzd2FwLmMtODAtXFxuLS1cXG5tbS96c3dhcC5jPTE1ND1zdHJ1Y3QgenN3YXBfcG9vbCB7XFxuLS1cXG5tbS96c3dhcC5jLTE2Ny0gKiBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUgeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuXFxubW0venN3YXAuYzoxNjg6ICogZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tIGEgcGVyY3B1X3JlZiByZWxlYXNlXFxubW0venN3YXAuYy0xNjktICogY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0Llxcbi0tXFxubW0venN3YXAuYz0yMDM9c3RydWN0IHpzd2FwX2VudHJ5IHtcXG4tLVxcbm1tL3pzd2FwLmMtMjE0LSAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcXG5tbS96c3dhcC5jOjIxNTogKiByZWZlcmVuY2UgdG8gaXRzIHBvb2wgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSkuXFxubW0venN3YXAuYy0yMTYtICovXFxuLS1cXG5tbS96c3dhcC5jPTI1NT1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnN3YXBfenN3YXBfdHJlZShzd3BfZW50cnlfdCBzd3ApXFxuLS1cXG5tbS96c3dhcC5jLTI2MC1cXG5tbS96c3dhcC5jOjI2MTojZGVmaW5lIHpzd2FwX3Bvb2xfZGVidWcobXNnLCBwKVxcdFxcdFxcdFxcXFxcXG5tbS96c3dhcC5jLTI2Mi1cXHRwcl9kZWJ1ZyhcXFwiJXMgcG9vbCAlc1xcXFxuXFxcIiwgbXNnLCAocCktXFx1MDAzZXRmbV9uYW1lKVxcbi0tXFxubW0venN3YXAuYy0yNjYtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjI2NzpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZik7XFxubW0venN3YXAuYy0yNjgtXFxubW0venN3YXAuYz0yNjk9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcXG4tLVxcbm1tL3pzd2FwLmMtMjk2LVxcbm1tL3pzd2FwLmM6Mjk3OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTI5OC17XFxuLS1cXG5tbS96c3dhcC5jLTM0My1cXHQgKi9cXG5tbS96c3dhcC5jOjM0NDpcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZiwgX196c3dhcF9wb29sX2VtcHR5LFxcbm1tL3pzd2FwLmMtMzQ1LVxcdFxcdFxcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcXG4tLVxcbm1tL3pzd2FwLmMtMzU5LVxcbm1tL3pzd2FwLmM6MzYwOlxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImNyZWF0ZWRcXFwiLCBwb29sKTtcXG5tbS96c3dhcC5jLTM2MS1cXG4tLVxcbm1tL3pzd2FwLmMtMzgwLVxcbm1tL3pzd2FwLmM6MzgxOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbm1tL3pzd2FwLmMtMzgyLXtcXG4tLVxcbm1tL3pzd2FwLmMtMzk2LVxcbm1tL3pzd2FwLmM6Mzk3OlxcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jLTM5OC19XFxubW0venN3YXAuYy0zOTktXFxubW0venN3YXAuYzo0MDA6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDAxLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDAzLVxcbm1tL3pzd2FwLmM6NDA0OlxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImRlc3Ryb3lpbmdcXFwiLCBwb29sKTtcXG5tbS96c3dhcC5jLTQwNS1cXG4tLVxcbm1tL3pzd2FwLmMtNDE2LVxcbm1tL3pzd2FwLmM6NDE3OnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5tbS96c3dhcC5jLTQxOC17XFxuLS1cXG5tbS96c3dhcC5jLTQyNi1cXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xcbm1tL3pzd2FwLmM6NDI3OlxcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcXG5tbS96c3dhcC5jLTQyOC19XFxubW0venN3YXAuYy00MjktXFxubW0venN3YXAuYzo0MzA6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCk7XFxubW0venN3YXAuYy00MzEtXFxubW0venN3YXAuYzo0MzI6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXFxubW0venN3YXAuYy00MzMte1xcbi0tXFxubW0venN3YXAuYy00MzktXFxubW0venN3YXAuYzo0NDA6XFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG5tbS96c3dhcC5jLTQ0MS1cXG4tLVxcbm1tL3pzd2FwLmMtNDQzLVxcbm1tL3pzd2FwLmM6NDQ0OlxcdElOSVRfUkNVX1dPUksoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcXG5tbS96c3dhcC5jLTQ0NS1cXHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCBcXHUwMDI2cG9vbC1cXHUwMDNlcmVsZWFzZV9yd29yayk7XFxuLS1cXG5tbS96c3dhcC5jLTQ0OS1cXG5tbS96c3dhcC5jOjQ1MDpzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5tbS96c3dhcC5jLTQ1MS17XFxuLS1cXG5tbS96c3dhcC5jLTQ1OC0vKiBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIGEgcmVmZXJlbmNlLiAqL1xcbm1tL3pzd2FwLmM6NDU5OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZ2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDYwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDYzLVxcbm1tL3pzd2FwLmM6NDY0OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfcHV0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDY1LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDY4LVxcbm1tL3pzd2FwLmM6NDY5OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcXG5tbS96c3dhcC5jLTQ3MC17XFxuLS1cXG5tbS96c3dhcC5jLTQ4MC1cXG5tbS96c3dhcC5jOjQ4MTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbm1tL3pzd2FwLmMtNDgyLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDg0LVxcbm1tL3pzd2FwLmM6NDg1OlxcdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xcbm1tL3pzd2FwLmMtNDg2LX1cXG5tbS96c3dhcC5jLTQ4Ny1cXG5tbS96c3dhcC5jOjQ4ODpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcXG5tbS96c3dhcC5jLTQ4OS17XFxuLS1cXG5tbS96c3dhcC5jLTQ5My1cXG5tbS96c3dhcC5jOjQ5NDpcXHRwb29sID0gX196c3dhcF9wb29sX2N1cnJlbnQoKTtcXG5tbS96c3dhcC5jOjQ5NTpcXHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxcbm1tL3pzd2FwLmMtNDk2LVxcdFxcdHBvb2wgPSBOVUxMO1xcbi0tXFxubW0venN3YXAuYy01MDMtLyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xcbm1tL3pzd2FwLmM6NTA0OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxcbm1tL3pzd2FwLmMtNTA1LXtcXG4tLVxcbm1tL3pzd2FwLmMtNTE0LVxcdFxcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cXG5tbS96c3dhcC5jOjUxNTpcXHRcXHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxcbm1tL3pzd2FwLmMtNTE2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0venN3YXAuYz01NTI9c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTU1Ny1cXHRpZiAoY3VyX3BhZ2VzIFxcdTAwM2U9IG1heF9wYWdlcykge1xcbm1tL3pzd2FwLmM6NTU4OlxcdFxcdHpzd2FwX3Bvb2xfbGltaXRfaGl0Kys7XFxubW0venN3YXAuYzo1NTk6XFx0XFx0enN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwgPSB0cnVlO1xcbm1tL3pzd2FwLmM6NTYwOlxcdH0gZWxzZSBpZiAoenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwgXFx1MDAyNlxcdTAwMjZcXG5tbS96c3dhcC5jLTU2MS1cXHRcXHQgICBjdXJfcGFnZXMgXFx1MDAzYz0genN3YXBfYWNjZXB0X3Rocl9wYWdlcygpKSB7XFxubW0venN3YXAuYzo1NjI6XFx0XFx0XFx0enN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwgPSBmYWxzZTtcXG5tbS96c3dhcC5jLTU2My1cXHR9XFxubW0venN3YXAuYzo1NjQ6XFx0cmV0dXJuIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xcbm1tL3pzd2FwLmMtNTY1LX1cXG4tLVxcbm1tL3pzd2FwLmM9NTcxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNjAyLVxcdHhhX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG5tbS96c3dhcC5jOjYwMzpcXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcXG5tbS96c3dhcC5jLTYwNC1cXHRpZiAocG9vbCkge1xcbm1tL3pzd2FwLmM6NjA1OlxcdFxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcInVzaW5nIGV4aXN0aW5nXFxcIiwgcG9vbCk7XFxubW0venN3YXAuYzo2MDY6XFx0XFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG5tbS96c3dhcC5jLTYwNy1cXHR9XFxuLS1cXG5tbS96c3dhcC5jLTYxMC1cXHRpZiAoIXBvb2wpIHtcXG5tbS96c3dhcC5jOjYxMTpcXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxubW0venN3YXAuYy02MTItXFx0fSBlbHNlIHtcXG4tLVxcbm1tL3pzd2FwLmMtNjE5LVxcbm1tL3pzd2FwLmM6NjIwOlxcdFxcdC8qIERyb3AgdGhlIHJlZiBmcm9tIHpzd2FwX3Bvb2xfZmluZF9nZXQoKS4gKi9cXG5tbS96c3dhcC5jOjYyMTpcXHRcXHR6c3dhcF9wb29sX3B1dChwb29sKTtcXG5tbS96c3dhcC5jLTYyMi1cXHR9XFxuLS1cXG5tbS96c3dhcC5jLTYzMS1cXHRpZiAoIXJldCkge1xcbm1tL3pzd2FwLmM6NjMyOlxcdFxcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XFxubW0venN3YXAuYy02MzMtXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XFxuLS1cXG5tbS96c3dhcC5jPTc4Nj1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc5Mi1cXHRcXHR6c19mcmVlKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbm1tL3pzd2FwLmM6NzkzOlxcdFxcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xcbm1tL3pzd2FwLmMtNzk0LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmMtNzk5LVxcdGlmIChlbnRyeS1cXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcXG5tbS96c3dhcC5jOjgwMDpcXHRcXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy04MDEtXFx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYzo4MDI6XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbm1tL3pzd2FwLmMtODAzLX1cXG4tLVxcbm1tL3pzd2FwLmM9OTQ5PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTAwOS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjEwMTA6ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxcbm1tL3pzd2FwLmMtMTAxMS0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cXG4tLVxcbm1tL3pzd2FwLmM9MTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMjU0LVxcdFxcdG5yX2JhY2tpbmcgPSB6c3dhcF90b3RhbF9wYWdlcygpO1xcbm1tL3pzd2FwLmM6MTI1NTpcXHRcXHRucl9zdG9yZWQgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTI1Ni1cXHR9XFxuLS1cXG5tbS96c3dhcC5jPTEzNDU9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS96c3dhcC5jLTE0MzUtXFxubW0venN3YXAuYzoxNDM2OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0venN3YXAuYy0xNDM3LVxcdFxcdFxcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0venN3YXAuYy0xNDg0LVxcdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcXG5tbS96c3dhcC5jOjE0ODU6XFx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXFxubW0venN3YXAuYy0xNDg2LVxcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxcbi0tXFxubW0venN3YXAuYy0xNDg4LVxcdCAqL1xcbm1tL3pzd2FwLmM6MTQ4OTpcXHR6c3dhcF9wb29sX2dldChwb29sKTtcXG5tbS96c3dhcC5jLTE0OTAtXFx0aWYgKG9iamNnKSB7XFxuLS1cXG5tbS96c3dhcC5jLTE0OTMtXFx0fVxcbm1tL3pzd2FwLmM6MTQ5NDpcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xNDk1LVxcdGlmIChlbnRyeS1cXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcXG5tbS96c3dhcC5jOjE0OTY6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTQ5Ny1cXG4tLVxcbm1tL3pzd2FwLmMtMTUyNC1cXG5tbS96c3dhcC5jOjE1MjU6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTUyNi17XFxuLS1cXG5tbS96c3dhcC5jLTE1NTMtXFxubW0venN3YXAuYzoxNTU0OlxcdHBvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KCk7XFxubW0venN3YXAuYy0xNTU1LVxcdGlmICghcG9vbClcXG4tLVxcbm1tL3pzd2FwLmMtMTU2OS1cXG5tbS96c3dhcC5jOjE1NzA6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE1NzEtXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmMtMTU4MS1wdXRfcG9vbDpcXG5tbS96c3dhcC5jOjE1ODI6XFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XFxubW0venN3YXAuYy0xNTgzLXB1dF9vYmpjZzpcXG5tbS96c3dhcC5jLTE1ODQtXFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xcbm1tL3pzd2FwLmM6MTU4NTpcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiB6c3dhcF9wb29sX3JlYWNoZWRfZnVsbClcXG5tbS96c3dhcC5jLTE1ODYtXFx0XFx0cXVldWVfd29yayhzaHJpbmtfd3EsIFxcdTAwMjZ6c3dhcF9zaHJpbmtfd29yayk7XFxuLS1cXG5tbS96c3dhcC5jLTE2MTEtLyoqXFxubW0venN3YXAuYzoxNjEyOiAqIHpzd2FwX2xvYWQoKSAtIGxvYWQgYSBmb2xpbyBmcm9tIHpzd2FwXFxubW0venN3YXAuYy0xNjEzLSAqIEBmb2xpbzogZm9saW8gdG8gbG9hZFxcbi0tXFxubW0venN3YXAuYy0xNjMwLSAqL1xcbm1tL3pzd2FwLmM6MTYzMTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTYzMi17XFxuLS1cXG5tbS96c3dhcC5jLTE2ODMtXFxubW0venN3YXAuYzoxNjg0OnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0xNjg1LXtcXG4tLVxcbm1tL3pzd2FwLmM9MTc1MD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE3NTEte1xcbm1tL3pzd2FwLmM6MTc1MjpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE3NTMtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE3NTc9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzU4LXtcXG5tbS96c3dhcC5jOjE3NTk6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNzYwLVxcdHJldHVybiAwO1xcbi0tXFxubW0venN3YXAuYz0xNzY1PXN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE3NzItXFx0ZGVidWdmc19jcmVhdGVfdTY0KFxcXCJwb29sX2xpbWl0X2hpdFxcXCIsIDA0NDQsXFxubW0venN3YXAuYzoxNzczOlxcdFxcdFxcdCAgIHpzd2FwX2RlYnVnZnNfcm9vdCwgXFx1MDAyNnpzd2FwX3Bvb2xfbGltaXRfaGl0KTtcXG5tbS96c3dhcC5jLTE3NzQtXFx0ZGVidWdmc19jcmVhdGVfdTY0KFxcXCJyZWplY3RfcmVjbGFpbV9mYWlsXFxcIiwgMDQ0NCxcXG4tLVxcbm1tL3pzd2FwLmM9MTgwOD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE4MzktXFxubW0venN3YXAuYzoxODQwOlxcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XFxubW0venN3YXAuYy0xODQxLVxcdGlmIChwb29sKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjU4LjUxNTI1ODEyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDEwMTk4NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGNoYW5nZSBpbiBjb2RlIHdlIGNhbiBhY3R1YWxseSBnZXQgYXQgdGhyb3VnaCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB3aXRoaW4gYG1tL3pzd2FwLmNgIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0J3MgdXNlZCB3aGVuIHN3YXAgb3IgenN3YXAgaXMgYWN0aXZlLCB3aGljaCBpcyBjb21tb24gaW4gYm90aCBRRU1VIGFuZCBzdGFuZGFyZCBlbnZpcm9ubWVudHMsIHNvIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkZ1cnRoZXJtb3JlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBkYXRhIHN0cnVjdHVyZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVwbGFjaW5nIGEgcG9pbnRlciBpbiBgenN3YXBfZW50cnlgIChzcGVjaWZpY2FsbHksIGEgcG9pbnRlciB0byBgenN3YXBfcG9vbGApIHdpdGggYSBgcG9vbF9pZHhgLCBzdG9yaW5nIHBvb2xzIGluIGFuIHhhcnJheSBjYWxsZWQgYHpzd2FwX3Bvb2xzYCwgdXNpbmcgYHJjdV93b3JrYCBmb3IgYXN5bmNocm9ub3VzIHBvb2wgcmVsZWFzZSwgYW5kIG1vc3Qgc2lnbmlmaWNhbnRseSwgY2hhbmdpbmcgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbCB3aXRoIGB4YV9sb2NrX2JoYCwgYHJjdV9kZXJlZmVyZW5jZV9jaGVja2AsIGFuZCBgcmN1X2Fzc2lnbl9wb2ludGVyYC4gIFdlIGFsc28gc2VlIGNoYW5nZXMgdG8gZXJyb3IgcGF0aHMgYW5kIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVja3MuIFRoaXMgbGV2ZWwgb2YgcmVzdHJ1Y3R1cmluZyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbG9uZyB3aXRoIGNvbmN1cnJlbmN5IGNoYW5nZXMsICpzY3JlYW1zKiBcInBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYnVncyFcIiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgd2UgbmVlZCB0byBpZGVudGlmeSBGb2N1c1N5bWJvbHMg4oCTIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgb3VyIGZ1enppbmcgZWZmb3J0cy4gIEkgd2FudCB0byBmb2N1cyBvbiBmdW5jdGlvbnMgKmRpcmVjdGx5KiBpbXBsZW1lbnRpbmcgb3IgZXhlcmNpc2luZyB0aGUgYWx0ZXJlZCBsb2dpYy4gTGV0J3Mgc2VlLi4uIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmU6XG5cbiogICBgenN3YXBfc3RvcmVgIChvciBgenN3YXBfc3RvcmVfcGFnZWApXG4qICAgYHpzd2FwX2xvYWRgIChjcnVjaWFsbHksIHRoaXMgY2FsbHMgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgKVxuKiAgIGB6c3dhcF9pbnZhbGlkYXRlYCAod2hpY2ggYWxzbyBjYWxscyBgenN3YXBfZW50cnlfZnJlZWApXG4qICAgYHpzd2FwX3RvdGFsX3BhZ2VzYFxuKiAgIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGBcbiogICBgenN3YXBfcG9vbF9jcmVhdGVgXG4qICAgYF9fenN3YXBfcG9vbF9lbXB0eWBcbiogICBgX196c3dhcF9wb29sX3JlbGVhc2VgXG4qICAgYHpzd2FwX2VudHJ5X2ZyZWVgXG4qICAgYHpzd2FwX2RlY29tcHJlc3NgXG4qICAgYHpzd2FwX2VudHJ5X3Bvb2xgXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCBjYWxsYWJsZSBhbmQgZmluZGFibGUuICBMb29raW5nIGF0IHRoZSBzeW1ib2xzOlxuXG4qICAgVGhlICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCwgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHVzIHRvIGNhbGwsIGFyZSBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGB6c3dhcF90b3RhbF9wYWdlc2AuICBUaGVzZSBhcmUgZ29vZCBjYW5kaWRhdGVzLlxuKiAgIFRoZSAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfZW50cnlfcG9vbGAsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGFuZCBgenN3YXBfcG9vbF9jcmVhdGVgLiBXaGlsZSB0aGV5IG1heSBiZSBtb3JlIGRpZmZpY3VsdCB0byBjYWxsIGRpcmVjdGx5LCB3ZSBzdGlsbCBuZWVkIHRvIHRha2UgdGhlbSBpbnRvIGNvbnNpZGVyYXRpb24sIGFzIHRoZXkgbWF5IGJlIGNhbGxlZCBmcm9tIGZ1bmN0aW9ucyB0aGF0ICphcmUqIGV4cG9zZWQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgY2FsbHMgdG8gYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBzbyBvbiwgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgenN3YXAgc3lzdGVtLiBMZXQncyBleGFtaW5lIGlmIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGhhcyBhbnkgYmVhcmluZyBvbiB0aGUgZm9jdXMgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MDQuOTI1NDU5OTI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQxODA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTk0OT1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTEwMTQtICovXFxubW0venN3YXAuYzoxMDE1OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy0xMDE2LVxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmM9MTExOD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbi0tXFxubW0venN3YXAuYy0xMTQxLVxcdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcXG5tbS96c3dhcC5jOjExNDI6XFx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxcbm1tL3pzd2FwLmMtMTE0My1cXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSdzXFxuLS1cXG5tbS96c3dhcC5jLTExNzYtXFxubW0venN3YXAuYzoxMTc3OlxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG5tbS96c3dhcC5jLTExNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjA0Ljk3NTg4MTgzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQzODA5NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpzd2FwIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgdGltZSB0byByZWFsbHkgZGlnIGludG8gdGhpcyBac3dhcCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZXhhbWluZSBhIGZldyBrZXkgbWV0cmljczogSSBuZWVkIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYHpzd2FwX2xvYWRgLCBgenN3YXBfc3RvcmVgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX3RvdGFsX3BhZ2VzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uYWwgc3RhdHVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgIGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byBgbW0vS2NvbmZpZ2AgdG8gZ2V0IHRoZSBjb3JlIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCBgQ09ORklHX1pTV0FQYCBpcyB0aGUgcHJpbWFyeSBvcHRpb24sIGFuZCB0aGF0IGl0IGRlcGVuZHMgb24gYENPTkZJR19TV0FQYC4gSXQgYWxzbyAqc2VsZWN0cyogYENPTkZJR19DUllQVE9gIGFuZCBgQ09ORklHX1pTTUFMTE9DYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1pTV0FQYCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvbiBgQ09ORklHX1NXQVBgLCBgQ09ORklHX0NSWVBUT2AgYW5kIGBDT05GSUdfWlNNQUxMT0NgIGFyZSAqYWxsKiB0aGF0J3MgcmVxdWlyZWQsIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCBtYWtlcyBzZW5zZSwgb2YgY291cnNlLCB0aGF0IGBaU1dBUGAgZGVwZW5kcyBvbiBgU1dBUGAsIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBjZXJ0YWluLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGZvciBhbnkgb3RoZXIgcG9zc2libGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEknbGwgbmVlZCB0byBsb29rIHRocm91Z2ggYG1tL3pzd2FwLmNgIGFuZCBzZWFyY2ggZm9yIGFueSBvdGhlciBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgdHJpZ2dlciBvdGhlciBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgaW1wYWN0IG15IGFuYWx5c2lzIG9yIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MDcuODE5Njk0MjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2MDI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmfCNpZiBJU19FTkFCTEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz0xNzE4PXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG4tLVxcbm1tL3pzd2FwLmMtMTczNy0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6MTczODojaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0venN3YXAuYy0xNzM5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjA4LjA3MDMwNTk4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTM2NTE5MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyaWFnZSBSZXZpZXc6IFpTV0FQIFBhdGNoKipcblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFllcCwgXCJTV0FQXCIgYW5kIFwiWlNXQVBcIiBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGNvbmZpZ3MgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBsZXR0ZXIuXG5cbkFscmlnaHQsIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLi4uIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNoYW5nZXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGl04oCZcyB0b3VjaGluZyBgbW0venN3YXAuY2AgYW5kIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IHpzd2FwIHBvb2xzIGFyZSBtYW5hZ2VkLiBFc3NlbnRpYWxseSwgd2UncmUgbW92aW5nIGZyb20gZGlyZWN0IHBvaW50ZXJzIHdpdGhpbiBgenN3YXBfZW50cnlgIHRvIHBvb2wgaW5kaWNlcyB2aWEgYW4gWEFycmF5LiBUaGF0IGFsc28gaW5jbHVkZXMgYWx0ZXJpbmcgUkNVLXByb3RlY3RlZCBsb29rdXAgYW5kIHRlYXJkb3duIHdpdGggYHJjdV93b3JrYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHBhdGhzLiBTb3VuZHMgbGlrZSBhIGdvb2QgdGFyZ2V0LlxuXG5FbmFibGVDb25maWdzIGNvbmZpcm1zIHdoYXQgSSBhbHJlYWR5IHN1c3BlY3RlZCwgYW5kIHRoZSBGb2N1c1N5bWJvbHMgbGlzdCBoaXRzIGFsbCB0aGUgY3JpdGljYWwgenN3YXAgZnVuY3Rpb25zOiBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF90b3RhbF9wYWdlc2AsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGBfX3pzd2FwX3Bvb2xfZW1wdHlgLCBhbmQgYF9fenN3YXBfcG9vbF9yZWxlYXNlYC4gVGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCwgY292ZXJpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgenN3YXAgcG9vbCBtYW5hZ2VtZW50LlxuXG5SaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MzcsIk91dHB1dFRva2VucyI6MjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjExLjIwNjgyODQ2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTc0MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF90b3RhbF9wYWdlc1wiLFxuICAgIFwienN3YXBfZW50cnlfZnJlZVwiLFxuICAgIFwienN3YXBfZGVjb21wcmVzc1wiLFxuICAgIFwienN3YXBfc3RvcmVfcGFnZVwiLFxuICAgIFwiX196c3dhcF9wb29sX2VtcHR5XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGRpcmVjdCBwb29sIHBvaW50ZXJzIGluIHN0cnVjdCB6c3dhcF9lbnRyeSB3aXRoIHBvb2wgaW5kaWNlcyB0cmFja2VkIGluIGFuIFhBcnJheS4gSXQgdXBkYXRlcyBSQ1UtcHJvdGVjdGVkIHBvb2wgbG9va3VwcywgY2hhbmdlcyB0ZWFyZG93biB0byB1c2UgcmN1X3dvcmssIGFkanVzdHMgY29uY3VycmVuY3kgbG9ja2luZyB3aXRoIFhBcnJheSBsb2NrcywgYW5kIG1vZGlmaWVzIHRoZSBzdG9yZS9kZWNvbXByZXNzL2ZyZWUvd3JpdGViYWNrIGxpZmVjeWNsZSBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfdG90YWxfcGFnZXNcIixcbiAgICBcInpzd2FwX2VudHJ5X2ZyZWVcIixcbiAgICBcInpzd2FwX2RlY29tcHJlc3NcIixcbiAgICBcInpzd2FwX3N0b3JlX3BhZ2VcIixcbiAgICBcIl9fenN3YXBfcG9vbF9lbXB0eVwiLFxuICAgIFwiX196c3dhcF9wb29sX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0ODoxMS4yODYwMTAxNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzY0MDUxMDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MTEuMjg2NDg5MDYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgzNjM1NjkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBwb29sIG1hbmFnZW1lbnQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rZWQgbGlzdCBvZiBwb29scyBhbmQgOC1ieXRlIHBvb2wgcG9pbnRlciBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCB3aXRoIGFuIFhBcnJheSBsb29rdXAgdGFibGUgYW5kIGEgMS1ieXRlIHBvb2wgaW5kZXggKGBwb29sX2lkeGApLCBhbG9uZ3NpZGUgdHJhbnNpdGlvbmluZyBwb29sIGNsZWFudXAgdG8gYHJjdV93b3JrYC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXFxuMi4gVXNlci1zcGFjZSBJbmZvIExlYWtzOiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIHN5c2NhbGwgcmV0dXJuLCBldGMuKS5cXG4zLiBSZWxldmFudCBCdWcgQ2xhc3NlczogQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGxpZmV0aW1lL2dyYWNlLXBlcmlvZCB0cmFja2luZywgWEFycmF5IGluZGV4aW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwNDFmZWRmYTJlY2FlNjAyNjU1Y2RkMWZiYmJlZTQ5NzU4NGVjOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDIzOjQ3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjMxY2YwZWY0M2QyMzYgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG5AQCAtMTU0LDEyICsxNTUsMjQgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbitcdHN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHU4IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbisvKlxuKyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwc1xuKyAqIHRoZSByZXNlcnZlZCBpZCAwIHVuYWxsb2NhdGVkLCBzbyBsb29raW5nIGl0IHVwIG5ldmVyIGFsaWFzZXMgYSBsaXZlXG4rICogcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlblxuKyAqIGZyb20gX196c3dhcF9wb29sX2VtcHR5KCksIHdoaWNoIHJ1bnMgZnJvbSBhIHBlcmNwdV9yZWYgcmVsZWFzZVxuKyAqIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cbisgKi9cbisjZGVmaW5lIFpTV0FQX0ZJUlNUX1BPT0xfSUQgMVxuKyNkZWZpbmUgWlNXQVBfTUFYX1BPT0xfSUQgVThfTUFYXG4rc3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCBfX3JjdSAqenN3YXBfY3VycmVudF9wb29sO1xuK1xuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xuIFxuQEAgLTE4Miw3ICsxOTUsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFja1xuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXG4tICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSdzIGRhdGEgaXMgaW5cbisgKiBwb29sX2lkeCAtIGlkIG9mIHRoZSB6c3dhcF9wb29sIHRoYXQgdGhlIGVudHJ5J3MgZGF0YSBpcyBpbi5cbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cbkBAIC0xOTEsMTkgKzIwNCwzMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xuIFx0Ym9vbCByZWZlcmVuY2VkO1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1OCBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbisvKlxuKyAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcbisgKiByZWZlcmVuY2UgdG8gaXRzIHBvb2wgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSkuXG4rICovXG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4re1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwb29sID0geGFfbG9hZChcdTAwMjZ6c3dhcF9wb29scywgZW50cnktXHUwMDNlcG9vbF9pZHgpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcG9vbDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gXG4tLyogUkNVLXByb3RlY3RlZCBpdGVyYXRpb24gKi9cbi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTtcbi0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqL1xuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfcG9vbHNfbG9jayk7XG4gLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovXG4gc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XG4gXG5AQCAtMjc1LDYgKzI5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFwwICovXG4gXHRpbnQgcmV0LCBjcHU7XG4rXHR1MzIgaWQ7XG4gXG4gXHRpZiAoIXpzd2FwX2hhc19wb29sIFx1MDAyNlx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMzIwLDEyICszNDUsMjQgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0XHRcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gcmVmX2ZhaWw7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuK1xuK1x0cmV0ID0geGFfYWxsb2NfYmgoXHUwMDI2enN3YXBfcG9vbHMsIFx1MDAyNmlkLCBwb29sLFxuK1x0XHRcdCAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLFxuK1x0XHRcdCAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuK1x0XHRcdHByX2VycihcImNhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcXG5cIixcbitcdFx0XHQgICAgICAgWlNXQVBfTUFYX1BPT0xfSUQgLSBaU1dBUF9GSVJTVF9QT09MX0lEICsgMSk7XG4rXHRcdGdvdG8geGFfZmFpbDtcbitcdH1cbitcdHBvb2wtXHUwMDNlaWR4ID0gaWQ7XG4gXG4gXHR6c3dhcF9wb29sX2RlYnVnKFwiY3JlYXRlZFwiLCBwb29sKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIFxuK3hhX2ZhaWw6XG4rXHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYpO1xuIHJlZl9mYWlsOlxuIFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcdTAwMjZwb29sLVx1MDAzZW5vZGUpO1xuIFxuQEAgLTM3OSwxNiArNDE2LDE0IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbiBcbiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpwb29sKSxcbi1cdFx0XHRcdFx0XHRyZWxlYXNlX3dvcmspO1xuLVxuLVx0c3luY2hyb25pemVfcmN1KCk7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbitcdFx0XHRcdFx0ICAgICAgIHR5cGVvZigqcG9vbCksIHJlbGVhc2VfcndvcmspO1xuIFxuIFx0Lyogbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBnZXQgYSByZWYuLi4gKi9cbiBcdFdBUk5fT04oIXBlcmNwdV9yZWZfaXNfemVybyhcdTAwMjZwb29sLVx1MDAzZXJlZikpO1xuIFx0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiBcbi1cdC8qIHBvb2wgaXMgbm93IG9mZiB6c3dhcF9wb29scyBsaXN0IGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cbitcdC8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4gXHR6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7XG4gfVxuIFxuQEAgLTQwMCwxNiArNDM1LDE2IEBAIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIFxuIFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcbiBcdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XG4gXG4tXHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcdF9feGFfZXJhc2UoXHUwMDI2enN3YXBfcG9vbHMsIHBvb2wtXHUwMDNlaWR4KTtcbiBcbi1cdElOSVRfV09SSyhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2Vfd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuLVx0c2NoZWR1bGVfd29yayhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2Vfd29yayk7XG4rXHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuK1x0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrKTtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5AQCAtNDM1LDcgKzQ3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbitcdHBvb2wgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soenN3YXBfY3VycmVudF9wb29sLFxuK1x0XHRcdFx0ICAgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jaykpO1xuIFx0V0FSTl9PTkNFKCFwb29sIFx1MDAyNlx1MDAyNiB6c3dhcF9oYXNfcG9vbCxcbiBcdFx0ICBcIiVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cIiwgX19mdW5jX18pO1xuIFxuQEAgLTQ0NCw3ICs0ODAsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4gXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4tXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spO1xuIFxuIFx0cmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7XG4gfVxuQEAgLTQ2NCwxNCArNTAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxuIFx0cmV0dXJuIHBvb2w7XG4gfVxuIFxuLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KSB7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpIHtcbiBcdFx0aWYgKHN0cmNtcChwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgd2UgY2FuJ3QgZ2V0IGl0LCBpdCdzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqL1xuQEAgLTQ5Nyw5ICs1MzQsMTUgQEAgdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuK1x0LypcbitcdCAqIHJjdV9yZWFkX2xvY2soKSBpcyByZXF1aXJlZCBoZXJlLCBub3QganVzdCBmb3IgeGFfZm9yX2VhY2goKTogaXQgYWxzb1xuK1x0ICoga2VlcHMgZWFjaCBwb29sIGFsaXZlIHdoaWxlIGl0IGlzIGRlcmVmZXJlbmNlZCwgc2luY2UgYSBjb25jdXJyZW50bHlcbitcdCAqIHJldGlyZWQgcG9vbCBpcyBmcmVlZCB2aWEgcXVldWVfcmN1X3dvcmsoKSBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbitcdCAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpXG4gXHRcdHRvdGFsICs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTU2LDIwICs1OTksMTcgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4rXHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdHBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0enN3YXBfcG9vbF9kZWJ1ZyhcInVzaW5nIGV4aXN0aW5nXCIsIHBvb2wpO1xuIFx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiBcdH1cbitcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbitcdGlmICghcG9vbCkge1xuIFx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG4tXHRlbHNlIHtcbitcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKClcbiBcdFx0ICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpblxuQEAgLTU4NiwyMyArNjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG4tXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAocG9vbCkge1xuLVx0XHQvKlxuLVx0XHQgKiBBZGQgdGhlIHBvc3NpYmx5IHByZS1leGlzdGluZyBwb29sIHRvIHRoZSBlbmQgb2YgdGhlIHBvb2xzXG4tXHRcdCAqIGxpc3Q7IGlmIGl0J3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQnbGwgYmUgcmVtb3ZlZCBhbmRcbi1cdFx0ICogZGVzdHJveWVkIGJ5IHRoZSBwdXQgYWZ0ZXIgd2UgZHJvcCB0aGUgbG9ja1xuLVx0XHQgKi9cbi1cdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4gXHRcdHB1dF9wb29sID0gcG9vbDtcbiBcdH1cbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcbiBcdC8qXG4gXHQgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsXG5AQCAtNzUxLDkgKzc4NSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4rXG4gXHR6c3dhcF9scnVfZGVsKGVudHJ5KTtcbi1cdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuLVx0enN3YXBfcG9vbF9wdXQoZW50cnktXHUwMDNlcG9vbCk7XG4rXHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcbitcdFx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4rXHRcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xuK1x0fVxuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKSB7XG4gXHRcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXHUwMDNlb2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHRcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVx1MDAzZW9iamNnKTtcbkBAIC05MTAsMTIgKzk0OCwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cdTAwM2Vwb29sO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcbiBcdGludCByZXQgPSAwLCBkbGVuO1xuIFxuK1x0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2YWNvbXBfY3R4LVx1MDAzZW11dGV4KTtcbiBcdHpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlLCBpbnB1dCwgZW50cnktXHUwMDNlbGVuZ3RoKTtcbkBAIC05NTEsNyArOTkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCJEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cdTAwM2UlZClcXG5cIixcbiBcdFx0XHRcdFx0XHRzd3BfdHlwZShlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4gXHRcdFx0XHRcdFx0c3dwX29mZnNldChlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4tXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlcG9vbC1cdTAwM2V0Zm1fbmFtZSxcbitcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0MDksNiArMTQ1MCwxNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXG4gXHRcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xuIFxuK1x0LypcbitcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnk6IGNvbXByZXNzaW9uIGhhc1xuK1x0ICogc3VjY2VlZGVkIGFuZCB0aGUgcG9vbCBpcyBhbHJlYWR5IHBpbm5lZCBieSB0aGlzIHN0b3JlLCBzbyB0aGUgaWQgaXNcbitcdCAqIGZpbmFsLiAgRG9pbmcgaXQgaGVyZSAocmF0aGVyIHRoYW4gYWZ0ZXIgeGFfc3RvcmUoKSkgbWVhbnMgdGhlIGVudHJ5XG4rXHQgKiBpcyBuZXZlciBicmllZmx5IHZpc2libGUgd2l0aCBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgb3ZlciBmcm9tIHNsYWJcbitcdCAqIHJldXNlLCB3aGljaCB6c3dhcF9lbnRyeV9wb29sKCkgd291bGQgb3RoZXJ3aXNlIHJlc29sdmUgdG8gYW5cbitcdCAqIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4rXHQgKi9cbitcdGVudHJ5LVx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cdTAwM2VpZHg7XG4rXG4gXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuQEAgLTE0NTQsNyArMTUwNSw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXG4gXHQgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LlxuIFx0ICovXG4tXHRlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbkBAIC0xNzkwLDcgKzE4NDAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4gXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0ODoxMS4yODY0ODk4MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNDE5NDE0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyB6c3dhcCBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaWYgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhlIHVzdWFsIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmFjdHVhbGx5KiBjaGFuZ2luZy5cblxuQWxyaWdodCwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGluIGBtbS96c3dhcC5jYC4gRnJvbSBhIHF1aWNrIG92ZXJ2aWV3LCBpdCBsb29rcyBsaWtlIHRoZXkncmUgcmVzdHJ1Y3R1cmluZyBob3cgenN3YXAgcG9vbHMgYXJlIG1hbmFnZWQuIEluc3RlYWQgb2YgdGhlIG9sZCBsaW5rZWQgbGlzdCBhbmQgcG9pbnRlciBzeXN0ZW0sIHdlJ3JlIG5vdyBpbmRleGluZyB0aGUgcG9vbHMgd2l0aCBhbiB4YXJyYXkgKGB6c3dhcF9wb29sc2ApIGFuZCB1c2luZyBhbiBpbmRleCAoYHU4IGlkeGApIHdpdGhpbiB0aGUgYHpzd2FwX2VudHJ5YCBzdHJ1Y3R1cmUuIFNvLCB0aGF0IGBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtgIGluIGB6c3dhcF9lbnRyeWAgaXMgZ29uZSwgcmVwbGFjZWQgYnkgYHU4IHBvb2xfaWR4O2AuIFRoZSBvbGQgbGlzdCBhbmQgd29yayBzdHJ1Y3QgaW4gdGhlIGB6c3dhcF9wb29sYCBoYXZlIGFsc28gYmVlbiBzdHJlYW1saW5lZCwgc3dpdGNoaW5nIHRvIGFuIGByY3Vfd29ya2AgYW5kIHRoZSBpbmRleCwgYHU4IGlkeGAuIE5hdHVyYWxseSwgYWxsIHRoZSBsaXN0IGl0ZXJhdGlvbiBhbmQgbG9ja2luZyBhcmUgZ29pbmcgdGhlIHdheSBvZiB0aGUgZG9kbywgYmVpbmcgcmVwbGFjZWQgd2l0aCB0aGUgdXN1YWwgeGFycmF5IGlkaW9tczogYHhhX2FsbG9jX2JoYCwgYHhhX2Zvcl9lYWNoYCwgYW5kIGB4YV9lcmFzZWAuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBgenN3YXBfc3RvcmVfcGFnZWAgY2hhbmdlcywgSSBzZWUgdGhhdCBgZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtgIGlzIHNldCAqYmVmb3JlKiB0aGUgYHhhX3N0b3JlYCBjYWxsIGludG8gYHN3YXBfenN3YXBfdHJlZWAsIGFuZCB0aGF0IGBlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtgIGhhcyBiZWVuIHJlbW92ZWQuIEZ1cnRoZXIsIGB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KWAgaXMgbm93IGRvaW5nIGEgcmVhZCBsb2NrIGFuZCBsb2FkcyBhIHBvb2wgZnJvbSB0aGUgYHpzd2FwX3Bvb2xzYCBhcnJheSB1c2luZyB0aGUgc3RvcmVkIGluZGV4LlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiBob3cgYHpzd2FwX2VudHJ5YCBpcyBhbGxvY2F0ZWQgYW5kIHVzZWQgdG8gYXNzZXNzIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGFsbG9jYXRpb24gYW5kIHVzYWdlIG9mIHRoZXNlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlcy4gTGV0IG1lIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvY2AgYW5kIGhvdyBgenN3YXBfc3RvcmVfcGFnZWAgaW50ZXJhY3RzIHdpdGggdGhhdC4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgSSdsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvZGUgY2hhbmdlIHRoYXQncyBiZW5pZ24gZW5vdWdoIGZvciByZWd1bGFyIHRlc3Rpbmcgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgbW9yZSByaWdvcm91cyBLTVNBTi1mb2N1c2VkIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0ODoyNS4zMjg0MzM1ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjgxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2VudHJ5X2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz03NTE9dm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0venN3YXAuYy03NjUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjc2NjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnpzd2FwX2VudHJ5X2NhY2hlO1xcbm1tL3pzd2FwLmMtNzY3LVxcbm1tL3pzd2FwLmM6NzY4OnN0YXRpYyBzdHJ1Y3QgenN3YXBfZW50cnkgKnpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKGdmcF90IGdmcCwgaW50IG5pZClcXG5tbS96c3dhcC5jLTc2OS17XFxubW0venN3YXAuYy03NzAtXFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcXG5tbS96c3dhcC5jOjc3MTpcXHRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh6c3dhcF9lbnRyeV9jYWNoZSwgZ2ZwLCBuaWQpO1xcbm1tL3pzd2FwLmMtNzcyLVxcdGlmICghZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc3Ni1cXG5tbS96c3dhcC5jOjc3NzpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03Nzgte1xcbm1tL3pzd2FwLmM6Nzc5OlxcdGttZW1fY2FjaGVfZnJlZSh6c3dhcF9lbnRyeV9jYWNoZSwgZW50cnkpO1xcbm1tL3pzd2FwLmMtNzgwLX1cXG4tLVxcbm1tL3pzd2FwLmM9Nzg2PXN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtODAwLVxcdFxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcXG5tbS96c3dhcC5jOjgwMTpcXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTgwMi1cXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxuLS1cXG5tbS96c3dhcC5jPTE0MzY9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3pzd2FwLmMtMTQ0My1cXHQvKiBhbGxvY2F0ZSBlbnRyeSAqL1xcbm1tL3pzd2FwLmM6MTQ0NDpcXHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5tbS96c3dhcC5jLTE0NDUtXFx0aWYgKCFlbnRyeSkge1xcbi0tXFxubW0venN3YXAuYy0xNTIwLWNvbXByZXNzX2ZhaWxlZDpcXG5tbS96c3dhcC5jOjE1MjE6XFx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYy0xNTIyLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3pzd2FwLmM9MTgwOD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE4MTItXFxubW0venN3YXAuYzoxODEzOlxcdHpzd2FwX2VudHJ5X2NhY2hlID0gS01FTV9DQUNIRSh6c3dhcF9lbnRyeSwgMCk7XFxubW0venN3YXAuYzoxODE0OlxcdGlmICghenN3YXBfZW50cnlfY2FjaGUpIHtcXG5tbS96c3dhcC5jLTE4MTUtXFx0XFx0cHJfZXJyKFxcXCJlbnRyeSBjYWNoZSBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxubW0venN3YXAuYy0xODYyLWhwX2ZhaWw6XFxubW0venN3YXAuYzoxODYzOlxcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XFxubW0venN3YXAuYy0xODY0LWNhY2hlX2ZhaWw6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI1LjM4MTExOTc1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE4MzMxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHpzd2FwX3N0b3JlX3BhZ2VgKipcblxuT2theSwgdGltZSB0byByZWFsbHkgZGlnIGludG8gYHpzd2FwX3N0b3JlX3BhZ2VgLiBJJ20gZ29pbmcgdG8gbGFzZXIgaW4gb24gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lIDE0MzYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqcmVhbGx5KiBoYXBwZW5pbmcgdGhlcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgenN3YXAgcHJvY2VzcywgYW5kIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgZ3Jhc3Agb2YgdGhlIGNvZGUncyBiZWhhdmlvci4gSSdtIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZCBiZWZvcmUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MjYuOTk5NDUzNTI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MzUsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MzU6XFx0XFxuMTQzNjpcXHRzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbjE0Mzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuMTQzODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbjE0Mzk6XFx0e1xcbjE0NDA6XFx0XFx0c3dwX2VudHJ5X3QgcGFnZV9zd3BlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcXG4xNDQxOlxcdFxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksICpvbGQ7XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdFxcdC8qIGFsbG9jYXRlIGVudHJ5ICovXFxuMTQ0NDpcXHRcXHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG4xNDQ1OlxcdFxcdGlmICghZW50cnkpIHtcXG4xNDQ2OlxcdFxcdFxcdHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbCsrO1xcbjE0NDc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0NDg6XFx0XFx0fVxcbjE0NDk6XFx0XFxuMTQ1MDpcXHRcXHRpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSlcXG4xNDUxOlxcdFxcdFxcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHQvKlxcbjE0NTQ6XFx0XFx0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeTogY29tcHJlc3Npb24gaGFzXFxuMTQ1NTpcXHRcXHQgKiBzdWNjZWVkZWQgYW5kIHRoZSBwb29sIGlzIGFscmVhZHkgcGlubmVkIGJ5IHRoaXMgc3RvcmUsIHNvIHRoZSBpZCBpc1xcbjE0NTY6XFx0XFx0ICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnlcXG4xNDU3OlxcdFxcdCAqIGlzIG5ldmVyIGJyaWVmbHkgdmlzaWJsZSB3aXRoIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBvdmVyIGZyb20gc2xhYlxcbjE0NTg6XFx0XFx0ICogcmV1c2UsIHdoaWNoIHpzd2FwX2VudHJ5X3Bvb2woKSB3b3VsZCBvdGhlcndpc2UgcmVzb2x2ZSB0byBhblxcbjE0NTk6XFx0XFx0ICogdW5yZWxhdGVkIGxpdmUgcG9vbC5cXG4xNDYwOlxcdFxcdCAqL1xcbjE0NjE6XFx0XFx0ZW50cnktXFx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cXHUwMDNlaWR4O1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuMTQ2NDpcXHRcXHRcXHQgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSxcXG4xNDY1OlxcdFxcdFxcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XFxuMTQ2NjpcXHRcXHRpZiAoeGFfaXNfZXJyKG9sZCkpIHtcXG4xNDY3OlxcdFxcdFxcdGludCBlcnIgPSB4YV9lcnIob2xkKTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0XFx0V0FSTl9PTkNFKGVyciAhPSAtRU5PTUVNLCBcXFwidW5leHBlY3RlZCB4YXJyYXkgZXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjE0NzA6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2FsbG9jX2ZhaWwrKztcXG4xNDcxOlxcdFxcdFxcdGdvdG8gc3RvcmVfZmFpbGVkO1xcbjE0NzI6XFx0XFx0fVxcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHQvKlxcbjE0NzU6XFx0XFx0ICogV2UgbWF5IGhhdmUgaGFkIGFuIGV4aXN0aW5nIGVudHJ5IHRoYXQgYmVjYW1lIHN0YWxlIHdoZW5cXG4xNDc2OlxcdFxcdCAqIHRoZSBmb2xpbyB3YXMgcmVkaXJ0aWVkIGFuZCBub3cgdGhlIG5ldyB2ZXJzaW9uIGlzIGJlaW5nXFxuMTQ3NzpcXHRcXHQgKiBzd2FwcGVkIG91dC4gR2V0IHJpZCBvZiB0aGUgb2xkLlxcbjE0Nzg6XFx0XFx0ICovXFxuMTQ3OTpcXHRcXHRpZiAob2xkKVxcbjE0ODA6XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShvbGQpO1xcbjE0ODE6XFx0XFxuMTQ4MjpcXHRcXHQvKlxcbjE0ODM6XFx0XFx0ICogVGhlIGVudHJ5IGlzIHN1Y2Nlc3NmdWxseSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gdGhlIHRyZWUsIHRoZXJlIGlzXFxuMTQ4NDpcXHRcXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxuMTQ4NTpcXHRcXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG4xNDg2OlxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxcbjE0ODc6XFx0XFx0ICogd2hlbiB0aGUgZW50cnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxcbjE0ODg6XFx0XFx0ICovXFxuMTQ4OTpcXHRcXHR6c3dhcF9wb29sX2dldChwb29sKTtcXG4xNDkwOlxcdFxcdGlmIChvYmpjZykge1xcbjE0OTE6XFx0XFx0XFx0b2JqX2Nncm91cF9nZXQob2JqY2cpO1xcbjE0OTI6XFx0XFx0XFx0b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAob2JqY2csIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbjE0OTM6XFx0XFx0fVxcbjE0OTQ6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbjE0OTU6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbjE0OTY6XFx0XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbjE0OTc6XFx0XFxuMTQ5ODpcXHRcXHQvKlxcbjE0OTk6XFx0XFx0ICogV2UgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZW50cnkgd2hpbGUgaXQncyBhbHJlYWR5IGluIHhhcnJheS5cXG4xNTAwOlxcdFxcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlOlxcbjE1MDE6XFx0XFx0ICpcXG4xNTAyOlxcdFxcdCAqIDEuIENvbmN1cnJlbnQgc3RvcmVzIGFuZCBpbnZhbGlkYXRpb25zIGFyZSBleGNsdWRlZCBieSBmb2xpbyBsb2NrLlxcbjE1MDM6XFx0XFx0ICpcXG4xNTA0OlxcdFxcdCAqIDIuIFdyaXRlYmFjayBpcyBleGNsdWRlZCBieSB0aGUgZW50cnkgbm90IGJlaW5nIG9uIHRoZSBMUlUgeWV0LlxcbjE1MDU6XFx0XFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xcbjE1MDY6XFx0XFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cXG4xNTA3OlxcdFxcdCAqL1xcbjE1MDg6XFx0XFx0ZW50cnktXFx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcXG4xNTA5OlxcdFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbjE1MTA6XFx0XFx0ZW50cnktXFx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xcbjE1MTE6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGgpIHtcXG4xNTEyOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlbnRyeS1cXHUwMDNlbHJ1KTtcXG4xNTEzOlxcdFxcdFxcdHpzd2FwX2xydV9hZGQoZW50cnkpO1xcbjE1MTQ6XFx0XFx0fVxcbjE1MTU6XFx0XFxuMTUxNjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0c3RvcmVfZmFpbGVkOlxcbjE1MTk6XFx0XFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4xNTIwOlxcdGNvbXByZXNzX2ZhaWxlZDpcXG4xNTIxOlxcdFxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbjE1MjI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MjM6XFx0fVxcbjE1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI2Ljk5OTU3NDI1OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ5NzExNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgenN3YXBfY29tcHJlc3NgKipcblxuUmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIGNoZWNrbGlzdCBoYXMgbGVkIG1lIHRvIGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGB6c3dhcF9jb21wcmVzc2AuIFRoaXMgaXMgYSBjcnVjaWFsIHNldHRpbmcgd2hlbiBjb25zaWRlcmluZyB6c3dhcCBiZWhhdmlvciwgcmlnaHQ/IEl0J3Mgb25lIG9mIHRob3NlIHRoaW5ncyB5b3UgY2FuJ3QganVzdCBnbG9zcyBvdmVyLiBJdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlZCBieSB6c3dhcCwgYW5kIHRodXMsIGl0cyBlZmZlY3RpdmVuZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBjaG9zZW4gYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIG9uIG1lbW9yeSB1c2FnZS4gRnJvbSBoZXJlIEkgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHdvcmtsb2FkLiBUaGUgaW1wbGljYXRpb25zIG9uIENQVSBvdmVyaGVhZCBhcmUgYWxzbyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI4Ljc0OTI4ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjkxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2NvbXByZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTEwMC0vKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYzoxMDI6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy0xMDMtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG5tbS96c3dhcC5jOjEwNDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMgPSB7XFxubW0venN3YXAuYzoxMDU6XFx0LnNldCA9XFx0XFx0enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQsXFxubW0venN3YXAuYy0xMDYtXFx0LmdldCA9XFx0XFx0cGFyYW1fZ2V0X2NoYXJwLFxcbi0tXFxubW0venN3YXAuYy0xMDgtfTtcXG5tbS96c3dhcC5jOjEwOTptb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxcbm1tL3pzd2FwLmM6MTEwOlxcdFxcdFxcdTAwMjZ6c3dhcF9jb21wcmVzc29yLCAwNjQ0KTtcXG5tbS96c3dhcC5jLTExMS1cXG4tLVxcbm1tL3pzd2FwLmM9MzgxPXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbm1tL3pzd2FwLmMtMzgyLXtcXG5tbS96c3dhcC5jOjM4MzpcXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXFx1MDAyNlxcdTAwMjZcXG5tbS96c3dhcC5jOjM4NDpcXHQgICAgc3RyY21wKHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpKSB7XFxubW0venN3YXAuYy0zODUtXFx0XFx0cHJfZXJyKFxcXCJjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXFxcblxcXCIsXFxubW0venN3YXAuYzozODY6XFx0XFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xcbm1tL3pzd2FwLmM6Mzg3OlxcdFxcdHBhcmFtX2ZyZWVfY2hhcnAoXFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmM6Mzg4OlxcdFxcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xcbm1tL3pzd2FwLmMtMzg5LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmMtMzkxLVxcdC8qIERlZmF1bHQgY29tcHJlc3NvciBzaG91bGQgYmUgYXZhaWxhYmxlLiBLY29uZmlnIGJ1Zz8gKi9cXG5tbS96c3dhcC5jOjM5MjpcXHRpZiAoV0FSTl9PTl9PTkNFKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApKSkge1xcbm1tL3pzd2FwLmM6MzkzOlxcdFxcdHpzd2FwX2NvbXByZXNzb3IgPSBaU1dBUF9QQVJBTV9VTlNFVDtcXG5tbS96c3dhcC5jLTM5NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL3pzd2FwLmMtMzk2LVxcbm1tL3pzd2FwLmM6Mzk3OlxcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jLTM5OC19XFxuLS1cXG5tbS96c3dhcC5jPTU1Mj1zdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtNTcwLVxcbm1tL3pzd2FwLmM6NTcxOnN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS96c3dhcC5jLTU3Mi17XFxuLS1cXG5tbS96c3dhcC5jPTgwOD1zdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5tbS96c3dhcC5jLTg2NC1cXG5tbS96c3dhcC5jOjg2NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTg2Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4tLVxcbm1tL3pzd2FwLmM9MTQzNj1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNDQ5LVxcbm1tL3pzd2FwLmM6MTQ1MDpcXHRpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSlcXG5tbS96c3dhcC5jLTE0NTEtXFx0XFx0Z290byBjb21wcmVzc19mYWlsZWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI4Ljc5Njk4NTg3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzEzNDUzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHpzd2FwX2NvbXByZXNzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYHpzd2FwX2NvbXByZXNzYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBjb21wcmVzc2lvbiBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMgYW5kIGhvdyBpdCdzIG9wdGltaXplZCBmb3IgdGhlIHNwZWNpZmljIGNvbnN0cmFpbnRzIG9mIGluLW1lbW9yeSBjb21wcmVzc2lvbiBmb3Igc3dhcC4gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQgdG8gZWZmaWNpZW50bHkgbWFuYWdlIHRoZSBjb21wcmVzc2lvbiBjb250ZXh0LCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhbmQgdGhlaXIgc3BlY2lmaWMgcGFyYW1ldGVycywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBlcnJvcnMgb3IgY29ybmVyIGNhc2VzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIHNwZWNpZmljIG51YW5jZXMgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgd2l0aCBteSB3b3JrIG9uLi4uIFtjb250aW51ZSB3aXRoIHlvdXIgcmVsZXZhbnQgd29ya10uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzEuMTEwNDQyMjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2NTpcXHRzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gODY2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG4gODY5OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dCwgb3V0cHV0O1xcbiA4NzA6XFx0XFx0aW50IGNvbXBfcmV0ID0gMCwgYWxsb2NfcmV0ID0gMDtcXG4gODcxOlxcdFxcdHVuc2lnbmVkIGludCBkbGVuID0gUEFHRV9TSVpFO1xcbiA4NzI6XFx0XFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIDg3MzpcXHRcXHRnZnBfdCBnZnA7XFxuIDg3NDpcXHRcXHR1OCAqZHN0O1xcbiA4NzU6XFx0XFx0Ym9vbCBtYXBwZWQgPSBmYWxzZTtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gODc4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmFjb21wX2N0eC1cXHUwMDNlbXV0ZXgpO1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRkc3QgPSBhY29tcF9jdHgtXFx1MDAzZWJ1ZmZlcjtcXG4gODgxOlxcdFxcdHNnX2luaXRfdGFibGUoXFx1MDAyNmlucHV0LCAxKTtcXG4gODgyOlxcdFxcdHNnX3NldF9wYWdlKFxcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcXG4gODgzOlxcdFxcbiA4ODQ6XFx0XFx0c2dfaW5pdF9vbmUoXFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xcbiA4ODU6XFx0XFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cXHUwMDNlcmVxLCBcXHUwMDI2aW5wdXQsIFxcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdC8qXFxuIDg4ODpcXHRcXHQgKiBpdCBtYXliZSBsb29rcyBhIGxpdHRsZSBiaXQgc2lsbHkgdGhhdCB3ZSBzZW5kIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0LFxcbiA4ODk6XFx0XFx0ICogdGhlbiB3YWl0IGZvciBpdHMgY29tcGxldGlvbiBzeW5jaHJvbm91c2x5LiBUaGlzIG1ha2VzIHRoZSBwcm9jZXNzIGxvb2tcXG4gODkwOlxcdFxcdCAqIHN5bmNocm9ub3VzIGluIGZhY3QuXFxuIDg5MTpcXHRcXHQgKiBUaGVvcmV0aWNhbGx5LCBhY29tcCBzdXBwb3J0cyB1c2VycyBzZW5kIG11bHRpcGxlIGFjb21wIHJlcXVlc3RzIGluIG9uZVxcbiA4OTI6XFx0XFx0ICogYWNvbXAgaW5zdGFuY2UsIHRoZW4gZ2V0IHRob3NlIHJlcXVlc3RzIGRvbmUgc2ltdWx0YW5lb3VzbHkuIGJ1dCBpbiB0aGlzXFxuIDg5MzpcXHRcXHQgKiBjYXNlLCB6c3dhcCBhY3R1YWxseSBkb2VzIHN0b3JlIGFuZCBsb2FkIHBhZ2UgYnkgcGFnZSwgdGhlcmUgaXMgbm9cXG4gODk0OlxcdFxcdCAqIGV4aXN0aW5nIG1ldGhvZCB0byBzZW5kIHRoZSBzZWNvbmQgcGFnZSBiZWZvcmUgdGhlIGZpcnN0IHBhZ2UgaXMgZG9uZVxcbiA4OTU6XFx0XFx0ICogaW4gb25lIHRocmVhZCBkb2luZyB6c3dhcC5cXG4gODk2OlxcdFxcdCAqIGJ1dCBpbiBkaWZmZXJlbnQgdGhyZWFkcyBydW5uaW5nIG9uIGRpZmZlcmVudCBjcHUsIHdlIGhhdmUgZGlmZmVyZW50XFxuIDg5NzpcXHRcXHQgKiBhY29tcCBpbnN0YW5jZSwgc28gbXVsdGlwbGUgdGhyZWFkcyBjYW4gZG8gKGRlKWNvbXByZXNzaW9uIGluIHBhcmFsbGVsLlxcbiA4OTg6XFx0XFx0ICovXFxuIDg5OTpcXHRcXHRjb21wX3JldCA9IGNyeXB0b193YWl0X3JlcShjcnlwdG9fYWNvbXBfY29tcHJlc3MoYWNvbXBfY3R4LVxcdTAwM2VyZXEpLCBcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2V3YWl0KTtcXG4gOTAwOlxcdFxcdGRsZW4gPSBhY29tcF9jdHgtXFx1MDAzZXJlcS1cXHUwMDNlZGxlbjtcXG4gOTAxOlxcdFxcbiA5MDI6XFx0XFx0LypcXG4gOTAzOlxcdFxcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxcbiA5MDQ6XFx0XFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxcbiA5MDU6XFx0XFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XFxuIDkwNjpcXHRcXHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xcbiA5MDc6XFx0XFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cXG4gOTA4OlxcdFxcdCAqL1xcbiA5MDk6XFx0XFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXFx1MDAzZT0gUEFHRV9TSVpFKSB7XFxuIDkxMDpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDkxMTpcXHRcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXFxuIDkxMjpcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19tZW1jZyhwYWdlX2ZvbGlvKHBhZ2UpKSkpIHtcXG4gOTEzOlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA5MTQ6XFx0XFx0XFx0XFx0Y29tcF9yZXQgPSBjb21wX3JldCA/IGNvbXBfcmV0IDogLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzEuMTEwNjEzODY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjE1MDMyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB6c3dhcF9jb21wcmVzc2AgZnVuY3Rpb24uIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgenN3YXAgY29uY2VwdCwgc28gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjb21wcmVzc2lvbiBhbGdvcml0aG0gZGV0YWlscyBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSB6c3dhcCBmcmFtZXdvcmsuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgY29tcHJlc3Npb24gb3BlcmF0aW9uIGl0c2VsZiAtIHRoZSBkYXRhIGhhbmRsaW5nLCBlcnJvciBjaGVja2luZywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHpzd2FwLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBjb21tb24gY29tcHJlc3Npb24gbGlicmFyaWVzIGFuZCB3YW50IHRvIHVuZGVyc3RhbmQgYW55IHpzd2FwLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgdXNlZC4gTGV0J3MgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzIuNjMyMTE5NTQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNTpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gOTE2OlxcdFxcdFxcdH1cXG4gOTE3OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA5MTg6XFx0XFx0XFx0Y29tcF9yZXQgPSAwO1xcbiA5MTk6XFx0XFx0XFx0ZGxlbiA9IFBBR0VfU0laRTtcXG4gOTIwOlxcdFxcdFxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gOTIxOlxcdFxcdFxcdG1hcHBlZCA9IHRydWU7XFxuIDkyMjpcXHRcXHR9XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XFxuIDkyNTpcXHRcXHRoYW5kbGUgPSB6c19tYWxsb2MocG9vbC1cXHUwMDNlenNfcG9vbCwgZGxlbiwgZ2ZwLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuIDkyNjpcXHRcXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG4gOTI3OlxcdFxcdFxcdGFsbG9jX3JldCA9IFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbiA5Mjg6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDkyOTpcXHRcXHR9XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdHpzX29ial93cml0ZShwb29sLVxcdTAwM2V6c19wb29sLCBoYW5kbGUsIGRzdCwgZGxlbik7XFxuIDkzMjpcXHRcXHRlbnRyeS1cXHUwMDNlaGFuZGxlID0gaGFuZGxlO1xcbiA5MzM6XFx0XFx0ZW50cnktXFx1MDAzZWxlbmd0aCA9IGRsZW47XFxuIDkzNDpcXHRcXG4gOTM1OlxcdHVubG9jazpcXG4gOTM2OlxcdFxcdGlmIChtYXBwZWQpXFxuIDkzNzpcXHRcXHRcXHRrdW5tYXBfbG9jYWwoZHN0KTtcXG4gOTM4OlxcdFxcdGlmIChjb21wX3JldCA9PSAtRU5PU1BDIHx8IGFsbG9jX3JldCA9PSAtRU5PU1BDKVxcbiA5Mzk6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2NvbXByZXNzX3Bvb3IrKztcXG4gOTQwOlxcdFxcdGVsc2UgaWYgKGNvbXBfcmV0KVxcbiA5NDE6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2NvbXByZXNzX2ZhaWwrKztcXG4gOTQyOlxcdFxcdGVsc2UgaWYgKGFsbG9jX3JldClcXG4gOTQzOlxcdFxcdFxcdHpzd2FwX3JlamVjdF9hbGxvY19mYWlsKys7XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2VtdXRleCk7XFxuIDk0NjpcXHRcXHRyZXR1cm4gY29tcF9yZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiBhbGxvY19yZXQgPT0gMDtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdFxcbiA5NDk6XFx0c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA5NTA6XFx0e1xcbiA5NTE6XFx0XFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4gOTUyOlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXFxuIDk1MzpcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xcbiA5NTQ6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzIuNjMyMzI3OTA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMTc3MTExNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQb29sIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhvdyB6c3dhcCBtYW5hZ2VzIGl0cyBwb29scyBhbmQgYXNzb2NpYXRlcyB0aGVtIHdpdGggZW50cmllcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIHNvbGlkIHJlZmFjdG9yIHdpdGggYSBjbGVhciBtZW1vcnkgb3B0aW1pemF0aW9uIGZvY3VzLlxuXG5JIHNlZSB0aGF0IHRoZSBjb3JlIGNoYW5nZSBpcyBtb3ZpbmcgZnJvbSBhIGxpbmtlZCBsaXN0IG9mIGB6c3dhcF9wb29sYCBzdHJ1Y3R1cmVzIHdpdGggZGlyZWN0IHBvaW50ZXJzIGluIGB6c3dhcF9lbnRyeWAgdG8gYW4gWEFycmF5LWJhc2VkIHN5c3RlbSB1c2luZyBhIGB1OCBwb29sX2lkeGAuIFRoZSBpbW1lZGlhdGUgd2luIGlzIGEgNy1ieXRlIHNhdmluZyBwZXIgYHpzd2FwX2VudHJ5YCBlbnRyeSBvbiA2NC1iaXQgc3lzdGVtcywgd2hpY2gsIG11bHRpcGxpZWQgYWNyb3NzIG1pbGxpb25zIG9mIGVudHJpZXMsIHdpbGwgbWFrZSBhIHRhbmdpYmxlIGRpZmZlcmVuY2UuIFRoZSBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIFhBcnJheSBsb29rdXAgd2l0aCBgenN3YXBfZW50cnlfcG9vbCgpYCBpcyBhIHNvdW5kIGRlc2lnbiBjaG9pY2UsIGFuZCB0aGUgc2hpZnQgdG8gUkNVIHdvcmsgcXVldWVzIGZvciBwb29sIGRlc3RydWN0aW9uIGlzIGNsZWFuZXIgdGhhbiBgc2NoZWR1bGVfd29ya2AgYW5kIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoZSBgV0FSTl9PTmAgY2hlY2tzIGFyZSBhIGdvb2Qgc2FmZXR5IG5ldCBmb3IgYW55IGxvb2t1cCBmYWlsdXJlcy5cblxuTG9va2luZyBjbG9zZWx5IGF0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgaXQgYWxsIGNoZWNrcyBvdXQuIFRoZSBgZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtgIGFzc2lnbm1lbnQgaGFwcGVucyAqYmVmb3JlKiB0aGUgZW50cnkgaXMgc3RvcmVkIGluIHRoZSBYQXJyYXksIGFuZCB0aGUgcG9vbCdzIGluZGV4IGlzIGFzc2lnbmVkIHVwb24gY3JlYXRpb24sIHNvIHRoZXJlJ3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhbmQgbm8gY29waWVzIHRvIHVzZXJzcGFjZSBvY2N1ciwgYXZvaWRpbmcgaW5mb2xlYWtzLiBUaGUgc2VxdWVuY2UgaW4gYHpzd2FwX3N0b3JlX3BhZ2UoKWAgbG9va3MgZmluZSB0b287IGV2ZXJ5IGZpZWxkIGluIGB6c3dhcF9lbnRyeWAgZ2V0cyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIFhBcnJheSB3cml0ZS5cblxuSSB3ZW50IHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOIGNyaXRlcmlhLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHNlZSwgbm9uZSBvZiB0aGUgdHlwaWNhbCBcIk5lZWRzS01TQU49dHJ1ZVwiIGNvbmRpdGlvbnMgYXBwbHkgaGVyZS4gVGhlcmUncyBubyBwYXNzaW5nIG9mIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIGNyaXRlcmlhIGZvciBcIk5lZWRzS01TQU49ZmFsc2VcIiBhbGwgZml0IGFzIHdlbGw7IHRoZSBwcmltYXJ5IHJpc2tzIGhlcmUgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBvZiBhbnkgY29uY3VycmVudCBjb2RlOiBvdXQtb2YtYm91bmRzIGFjY2VzcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBpc3N1ZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGdlbmVyYWwgZGVidWdnaW5nIHRvb2xzIHdpbGwgaGFuZGxlIHRob3NlLlxuXG5UaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgc291bmQuIE5vIEtNU0FOIGZsYWdzIGFyZSBuZWVkZWQuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDksIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzkuNjUwMDQxMDA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgcG9vbCBtYW5hZ2VtZW50IGJ5IHJlcGxhY2luZyB0aGUgbGlua2VkIGxpc3Qgb2YgcG9vbHMgYW5kIDgtYnl0ZSBwb29sIHBvaW50ZXIgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgd2l0aCBhbiBYQXJyYXkgbG9va3VwIHRhYmxlIGFuZCBhIDEtYnl0ZSBwb29sIGluZGV4IChgcG9vbF9pZHhgKSwgYWxvbmdzaWRlIHRyYW5zaXRpb25pbmcgcG9vbCBjbGVhbnVwIHRvIGByY3Vfd29ya2AuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBmaWVsZHMgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgYW5kIGBzdHJ1Y3QgenN3YXBfcG9vbGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgcHVibGlzaGVkIG9yIGFjY2Vzc2VkLiBgcG9vbF9pZHhgIGlzIHNldCB1cG9uIGNvbXByZXNzaW9uIHN1Y2Nlc3MgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5IGludG8gdGhlIHN3YXAgWEFycmF5LlxcbjIuIFVzZXItc3BhY2UgSW5mbyBMZWFrczogTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBzeXNjYWxsIHJldHVybiwgZXRjLikuXFxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgcG9vbCBtYW5hZ2VtZW50IGJ5IHJlcGxhY2luZyB0aGUgbGlua2VkIGxpc3Qgb2YgcG9vbHMgYW5kIDgtYnl0ZSBwb29sIHBvaW50ZXIgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgd2l0aCBhbiBYQXJyYXkgbG9va3VwIHRhYmxlIGFuZCBhIDEtYnl0ZSBwb29sIGluZGV4IChgcG9vbF9pZHhgKSwgYWxvbmdzaWRlIHRyYW5zaXRpb25pbmcgcG9vbCBjbGVhbnVwIHRvIGByY3Vfd29ya2AuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBmaWVsZHMgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgYW5kIGBzdHJ1Y3QgenN3YXBfcG9vbGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgcHVibGlzaGVkIG9yIGFjY2Vzc2VkLiBgcG9vbF9pZHhgIGlzIHNldCB1cG9uIGNvbXByZXNzaW9uIHN1Y2Nlc3MgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5IGludG8gdGhlIHN3YXAgWEFycmF5LlxcbjIuIFVzZXItc3BhY2UgSW5mbyBMZWFrczogTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBzeXNjYWxsIHJldHVybiwgZXRjLikuXFxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workfloww79gh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 23:46:13 +0000 UTC FinishedAt: 2026-09-05 23:48:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "20cab322c95cea0327215bb81a05df69336032dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "20cab322c95cea0327215bb81a05df69336032dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP" ], "series_id": "fc5ba4c7-72f9-4d7a-990a-bacc388b368b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store", "zswap_load", "zswap_invalidate", "zswap_writeback_entry", "zswap_compressor_param_set", "zswap_total_pages", "zswap_entry_free", "zswap_decompress", "zswap_store_page", "__zswap_pool_empty", "__zswap_pool_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDssCiAgICAmIzM0O3pzd2FwX2VudHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBwb29sIG1hbmFnZW1lbnQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rZWQgbGlzdCBvZiBwb29scyBhbmQgOC1ieXRlIHBvb2wgcG9pbnRlciBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCB3aXRoIGFuIFhBcnJheSBsb29rdXAgdGFibGUgYW5kIGEgMS1ieXRlIHBvb2wgaW5kZXggKGBwb29sX2lkeGApLCBhbG9uZ3NpZGUgdHJhbnNpdGlvbmluZyBwb29sIGNsZWFudXAgdG8gYHJjdV93b3JrYC5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBmaWVsZHMgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgYW5kIGBzdHJ1Y3QgenN3YXBfcG9vbGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgcHVibGlzaGVkIG9yIGFjY2Vzc2VkLiBgcG9vbF9pZHhgIGlzIHNldCB1cG9uIGNvbXByZXNzaW9uIHN1Y2Nlc3MgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5IGludG8gdGhlIHN3YXAgWEFycmF5LlxuMi4gVXNlci1zcGFjZSBJbmZvIExlYWtzOiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIHN5c2NhbGwgcmV0dXJuLCBldGMuKS5cbjMuIFJlbGV2YW50IEJ1ZyBDbGFzc2VzOiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCBSQ1UgbGlmZXRpbWUvZ3JhY2UtcGVyaW9kIHRyYWNraW5nLCBYQXJyYXkgaW5kZXhpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIHJhdGhlciB0aGFuIEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDA0MWZlZGZhMmVjYWU2MDI2NTVjZGQxZmJiYmVlNDk3NTg0ZWM5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMjM6NDc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjMxY2YwZWY0M2QyMzYgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdF9scnUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzbWFsbG9jLmhcdTAwM2VcbiBcbkBAIC0xNTQsMTIgJiM0MzsxNTUsMjQgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4mIzQzO1x0dTggaWR4O1xuIFx0Y2hhciB0Zm1fbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHNcbiYjNDM7ICogdGhlIHJlc2VydmVkIGlkIDAgdW5hbGxvY2F0ZWQsIHNvIGxvb2tpbmcgaXQgdXAgbmV2ZXIgYWxpYXNlcyBhIGxpdmVcbiYjNDM7ICogcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlblxuJiM0MzsgKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2VcbiYjNDM7ICogY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDFcbiYjNDM7I2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVhcbiYjNDM7c3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDtcbiYjNDM7XG4gLyogR2xvYmFsIExSVSBsaXN0cyBzaGFyZWQgYnkgYWxsIHpzd2FwIHBvb2xzLiAqL1xuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XG4gXG5AQCAtMTgyLDcgJiM0MzsxOTUsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFja1xuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXG4tICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluXG4mIzQzOyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbi5cbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXG5AQCAtMTkxLDE5ICYjNDM7MjA0LDMwIEBAIHN0cnVjdCB6c3dhcF9lbnRyeSB7XG4gXHRzd3BfZW50cnlfdCBzd3BlbnRyeTtcbiBcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gXHRib29sIHJlZmVyZW5jZWQ7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiYjNDM7XHR1OCBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIHBvb2wgc3RheXMgYWxpdmUgYWZ0ZXIgdGhpcyByZXR1cm5zIGJlY2F1c2UgYSBzdG9yZWQgZW50cnkgaG9sZHMgYVxuJiM0MzsgKiByZWZlcmVuY2UgdG8gaXRzIHBvb2wgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0cG9vbCA9IHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBvb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gXG4tLyogUkNVLXByb3RlY3RlZCBpdGVyYXRpb24gKi9cbi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTtcbi0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqL1xuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfcG9vbHNfbG9jayk7XG4gLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovXG4gc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcXDAgKi9cbiBcdGludCByZXQsIGNwdTtcbiYjNDM7XHR1MzIgaWQ7XG4gXG4gXHRpZiAoIXpzd2FwX2hhc19wb29sIFx1MDAyNlx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMzIwLDEyICYjNDM7MzQ1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geGFfYWxsb2NfYmgoXHUwMDI2enN3YXBfcG9vbHMsIFx1MDAyNmlkLCBwb29sLFxuJiM0MztcdFx0XHQgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSxcbiYjNDM7XHRcdFx0ICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgJiM0MzsgMSk7XG4mIzQzO1x0XHRnb3RvIHhhX2ZhaWw7XG4mIzQzO1x0fVxuJiM0MztcdHBvb2wtXHUwMDNlaWR4ID0gaWQ7XG4gXG4gXHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2NyZWF0ZWRcJiMzNDssIHBvb2wpO1xuIFxuIFx0cmV0dXJuIHBvb2w7XG4gXG4mIzQzO3hhX2ZhaWw6XG4mIzQzO1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiByZWZfZmFpbDpcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbkBAIC0zNzksMTYgJiM0Mzs0MTYsMTQgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLFxuLVx0XHRcdFx0XHRcdHJlbGVhc2Vfd29yayk7XG4tXG4tXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcbiBcbiBcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXG4gXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXHUwMDI2cG9vbC1cdTAwM2VyZWYpKTtcbiBcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gXG4tXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4mIzQzO1x0LyogVGhlIHBvb2wgaXMgbm8gbG9uZ2VyIGluIHpzd2FwX3Bvb2xzIGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cbiBcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcbiB9XG4gXG5AQCAtNDAwLDE2ICYjNDM7NDM1LDE2IEBAIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIFxuIFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4mIzQzO1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuIFxuLVx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4mIzQzO1x0X194YV9lcmFzZShcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cdTAwM2VpZHgpO1xuIFxuLVx0SU5JVF9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV93b3JrKTtcbiYjNDM7XHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuJiM0MztcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yayk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbiYjNDM7XHR4YV91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbkBAIC00MzUsNyAmIzQzOzQ3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbiYjNDM7XHRwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCxcbiYjNDM7XHRcdFx0XHQgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKSk7XG4gXHRXQVJOX09OQ0UoIXBvb2wgXHUwMDI2XHUwMDI2IHpzd2FwX2hhc19wb29sLFxuIFx0XHQgIFwmIzM0OyVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcbkBAIC00NDQsNyAmIzQzOzQ4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiBcbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuIHtcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spO1xuIFxuIFx0cmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7XG4gfVxuQEAgLTQ2NCwxNCAmIzQzOzUwMCwxNSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4mIzQzOy8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcilcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jayk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcdTAwMjZ6c3dhcF9wb29scywgbGlzdCkge1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbCkge1xuIFx0XHRpZiAoc3RyY21wKHBvb2wtXHUwMDNldGZtX25hbWUsIGNvbXByZXNzb3IpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHQvKiBpZiB3ZSBjYW4mIzM5O3QgZ2V0IGl0LCBpdCYjMzk7cyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbkBAIC00OTcsOSAmIzQzOzUzNCwxNSBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogcmN1X3JlYWRfbG9jaygpIGlzIHJlcXVpcmVkIGhlcmUsIG5vdCBqdXN0IGZvciB4YV9mb3JfZWFjaCgpOiBpdCBhbHNvXG4mIzQzO1x0ICoga2VlcHMgZWFjaCBwb29sIGFsaXZlIHdoaWxlIGl0IGlzIGRlcmVmZXJlbmNlZCwgc2luY2UgYSBjb25jdXJyZW50bHlcbiYjNDM7XHQgKiByZXRpcmVkIHBvb2wgaXMgZnJlZWQgdmlhIHF1ZXVlX3JjdV93b3JrKCkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXG4mIzQzO1x0ICovXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcdTAwMjZ6c3dhcF9wb29scywgbGlzdClcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpXG4gXHRcdHRvdGFsICYjNDM7PSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cdTAwM2V6c19wb29sKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTU1NiwyMCAmIzQzOzU5OSwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdH1cbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbiYjNDM7XHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdHBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDt1c2luZyBleGlzdGluZ1wmIzM0OywgcG9vbCk7XG4gXHRcdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XG4tXHRcdGxpc3RfZGVsX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuIFx0fVxuJiM0MztcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbiYjNDM7XHRpZiAoIXBvb2wpIHtcbiBcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKVxuIFx0XHQgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluXG5AQCAtNTg2LDIzICYjNDM7NjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4mIzQzO1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRpZiAoIXJldCkge1xuIFx0XHRwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpO1xuLVx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTtcbiBcdFx0enN3YXBfaGFzX3Bvb2wgPSB0cnVlO1xuIFx0fSBlbHNlIGlmIChwb29sKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHNcbi1cdFx0ICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbiYjNDM7XHR4YV91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xuIFxuIFx0LypcbiBcdCAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCxcbkBAIC03NTEsOSAmIzQzOzc4NSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuJiM0MztcbiBcdHpzd2FwX2xydV9kZWwoZW50cnkpO1xuLVx0enNfZnJlZShlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4tXHR6c3dhcF9wb29sX3B1dChlbnRyeS1cdTAwM2Vwb29sKTtcbiYjNDM7XHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcbiYjNDM7XHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuJiM0MztcdFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XG4mIzQzO1x0fVxuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKSB7XG4gXHRcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXHUwMDNlb2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHRcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVx1MDAzZW9iamNnKTtcbkBAIC05MTAsMTIgJiM0Mzs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbiYjNDM7XHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBvdXRwdXQ7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4O1xuIFx0aW50IHJldCA9IDAsIGRsZW47XG4gXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cdTAwM2VhY29tcF9jdHgpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZhY29tcF9jdHgtXHUwMDNlbXV0ZXgpO1xuIFx0enNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUsIGlucHV0LCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuQEAgLTk1MSw3ICYjNDM7OTkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCYjMzQ7RGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdHN3cF90eXBlKGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbiBcdFx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5LVx1MDAzZXN3cGVudHJ5KSxcbi1cdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2Vwb29sLVx1MDAzZXRmbV9uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0MDksNiAmIzQzOzE0NTAsMTYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuIFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnk6IGNvbXByZXNzaW9uIGhhc1xuJiM0MztcdCAqIHN1Y2NlZWRlZCBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBwaW5uZWQgYnkgdGhpcyBzdG9yZSwgc28gdGhlIGlkIGlzXG4mIzQzO1x0ICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnlcbiYjNDM7XHQgKiBpcyBuZXZlciBicmllZmx5IHZpc2libGUgd2l0aCBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgb3ZlciBmcm9tIHNsYWJcbiYjNDM7XHQgKiByZXVzZSwgd2hpY2ggenN3YXBfZW50cnlfcG9vbCgpIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIHRvIGFuXG4mIzQzO1x0ICogdW5yZWxhdGVkIGxpdmUgcG9vbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlbnRyeS1cdTAwM2Vwb29sX2lkeCA9IHBvb2wtXHUwMDNlaWR4O1xuJiM0MztcbiBcdG9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSxcbiBcdFx0ICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XG5AQCAtMTQ1NCw3ICYjNDM7MTUwNSw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXG4gXHQgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LlxuIFx0ICovXG4tXHRlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbkBAIC0xNzkwLDcgJiM0MzsxODQwLDcgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxuIFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbiBcdGlmIChwb29sKSB7XG4gXHRcdHByX2luZm8oXCYjMzQ7bG9hZGVkIHVzaW5nIHBvb2wgJXNcXG5cJiMzNDssIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG4gXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDssCiAgICAmIzM0O3pzd2FwX2VudHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDA0MWZlZGZhMmVjYWU2MDI2NTVjZGQxZmJiYmVlNDk3NTg0ZWM5YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMjM6NDc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBmM2FlM2M4MWU0OGVhLi4zMWNmMGVmNDNkMjM2IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTM0LDYgJiM0MzszNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvd3JpdGViYWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3pzbWFsbG9jLmgmZ3Q7CiAKQEAgLTE1NCwxMiAmIzQzOzE1NSwyNCBAQCBzdHJ1Y3QgenN3YXBfcG9vbCB7CiAJc3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7CiAJc3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDsKIAlzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7CiYjNDM7CXN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiYjNDM7CXU4IGlkeDsKIAljaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogfTsKIAomIzQzOy8qCiYjNDM7ICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzCiYjNDM7ICogdGhlIHJlc2VydmVkIGlkIDAgdW5hbGxvY2F0ZWQsIHNvIGxvb2tpbmcgaXQgdXAgbmV2ZXIgYWxpYXNlcyBhIGxpdmUKJiM0MzsgKiBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUgeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuCiYjNDM7ICogZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tIGEgcGVyY3B1X3JlZiByZWxlYXNlCiYjNDM7ICogY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxCiYjNDM7I2RlZmluZSBaU1dBUF9NQVhfUE9PTF9JRCBVOF9NQVgKJiM0MztzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyh6c3dhcF9wb29scywgWEFfRkxBR1NfQUxMT0MxIHwgWEFfRkxBR1NfTE9DS19CSCk7CiYjNDM7c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7CiYjNDM7CiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovCiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1OwogCkBAIC0xODIsNyAmIzQzOzE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX3Nocmlua2VyOwogICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2sKICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyCiAgKiAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgY29udGV4dC4KLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbgomIzQzOyAqIHBvb2xfaWR4IC0gaWQgb2YgdGhlIHpzd2FwX3Bvb2wgdGhhdCB0aGUgZW50cnkmIzM5O3MgZGF0YSBpcyBpbi4KICAqIGhhbmRsZSAtIHpzbWFsbG9jIGFsbG9jYXRpb24gaGFuZGxlIHRoYXQgc3RvcmVzIHRoZSBjb21wcmVzc2VkIHBhZ2UgZGF0YQogICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvCiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wmIzM5O3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuCkBAIC0xOTEsMTkgJiM0MzsyMDQsMzAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHsKIAlzd3BfZW50cnlfdCBzd3BlbnRyeTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCWJvb2wgcmVmZXJlbmNlZDsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdTggcG9vbF9pZHg7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIHBvb2wgc3RheXMgYWxpdmUgYWZ0ZXIgdGhpcyByZXR1cm5zIGJlY2F1c2UgYSBzdG9yZWQgZW50cnkgaG9sZHMgYQomIzQzOyAqIHJlZmVyZW5jZSB0byBpdHMgcG9vbCAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX2VudHJ5X3Bvb2woc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXBvb2wgPSB4YV9sb2FkKCZhbXA7enN3YXBfcG9vbHMsIGVudHJ5LSZndDtwb29sX2lkeCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcG9vbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHhhcnJheSAqenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdOwogCi0vKiBSQ1UtcHJvdGVjdGVkIGl0ZXJhdGlvbiAqLwotc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7Ci0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyh6c3dhcF9wb29sc19sb2NrKTsKIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqLwogc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiAKQEAgLTI3NSw2ICYjNDM7Mjk5LDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKQogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCWNoYXIgbmFtZVszOF07IC8qICYjMzk7enN3YXAmIzM5OyAmIzQzOyAzMiBjaGFyIChtYXgpIG51bSAmIzQzOyBcMCAqLwogCWludCByZXQsIGNwdTsKJiM0MzsJdTMyIGlkOwogCiAJaWYgKCF6c3dhcF9oYXNfcG9vbCAmYW1wOyZhbXA7ICFzdHJjbXAoY29tcHJlc3NvciwgWlNXQVBfUEFSQU1fVU5TRVQpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTMyMCwxMiAmIzQzOzM0NSwyNCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJCQkgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCkKIAkJZ290byByZWZfZmFpbDsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO3Bvb2wtJmd0O2xpc3QpOwomIzQzOwomIzQzOwlyZXQgPSB4YV9hbGxvY19iaCgmYW1wO3pzd2FwX3Bvb2xzLCAmYW1wO2lkLCBwb29sLAomIzQzOwkJCSAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLAomIzQzOwkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChyZXQgPT0gLUVCVVNZKQomIzQzOwkJCXByX2VycigmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgJiM0MzsgMSk7CiYjNDM7CQlnb3RvIHhhX2ZhaWw7CiYjNDM7CX0KJiM0MzsJcG9vbC0mZ3Q7aWR4ID0gaWQ7CiAKIAl6c3dhcF9wb29sX2RlYnVnKCYjMzQ7Y3JlYXRlZCYjMzQ7LCBwb29sKTsKIAogCXJldHVybiBwb29sOwogCiYjNDM7eGFfZmFpbDoKJiM0MzsJcGVyY3B1X3JlZl9leGl0KCZhbXA7cG9vbC0mZ3Q7cmVmKTsKIHJlZl9mYWlsOgogCWNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgJmFtcDtwb29sLSZndDtub2RlKTsKIApAQCAtMzc5LDE2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCkKIAogc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksCi0JCQkJCQlyZWxlYXNlX3dvcmspOwotCi0Jc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLAomIzQzOwkJCQkJICAgICAgIHR5cGVvZigqcG9vbCksIHJlbGVhc2VfcndvcmspOwogCiAJLyogbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBnZXQgYSByZWYuLi4gKi8KIAlXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oJmFtcDtwb29sLSZndDtyZWYpKTsKIAlwZXJjcHVfcmVmX2V4aXQoJmFtcDtwb29sLSZndDtyZWYpOwogCi0JLyogcG9vbCBpcyBub3cgb2ZmIHpzd2FwX3Bvb2xzIGxpc3QgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwomIzQzOwkvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqLwogCXpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTsKIH0KIApAQCAtNDAwLDE2ICYjNDM7NDM1LDE2IEBAIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQogCiAJcG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJeGFfbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzKTsKIAogCVdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7CiAKLQlsaXN0X2RlbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0KTsKJiM0MzsJX194YV9lcmFzZSgmYW1wO3pzd2FwX3Bvb2xzLCBwb29sLSZndDtpZHgpOwogCi0JSU5JVF9XT1JLKCZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7Ci0Jc2NoZWR1bGVfd29yaygmYW1wO3Bvb2wtJmd0O3JlbGVhc2Vfd29yayk7CiYjNDM7CUlOSVRfUkNVX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7CiYjNDM7CXF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsICZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV9yd29yayk7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiB9CiAKIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQpAQCAtNDM1LDcgJiM0Mzs0NzAsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAKLQlwb29sID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdSgmYW1wO3pzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTsKJiM0MzsJcG9vbCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh6c3dhcF9jdXJyZW50X3Bvb2wsCiYjNDM7CQkJCSAgICAgbG9ja2RlcF9pc19oZWxkKCZhbXA7enN3YXBfcG9vbHMueGFfbG9jaykpOwogCVdBUk5fT05DRSghcG9vbCAmYW1wOyZhbXA7IHpzd2FwX2hhc19wb29sLAogCQkgICYjMzQ7JXM6IG5vIHBhZ2Ugc3RvcmFnZSBwb29sIVxuJiMzNDssIF9fZnVuY19fKTsKIApAQCAtNDQ0LDcgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCiAKIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpCiB7Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt6c3dhcF9wb29scy54YV9sb2NrKTsKIAogCXJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpOwogfQpAQCAtNDY0LDE0ICYjNDM7NTAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKQogCXJldHVybiBwb29sOwogfQogCi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovCiYjNDM7LyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqLwogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWQ7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3pzd2FwX3Bvb2xzLnhhX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkgewomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3pzd2FwX3Bvb2xzLCBpZCwgcG9vbCkgewogCQlpZiAoc3RyY21wKHBvb2wtJmd0O3RmbV9uYW1lLCBjb21wcmVzc29yKSkKIAkJCWNvbnRpbnVlOwogCQkvKiBpZiB3ZSBjYW4mIzM5O3QgZ2V0IGl0LCBpdCYjMzk7cyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi8KQEAgLTQ5Nyw5ICYjNDM7NTM0LDE1IEBAIHVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZDsKIAomIzQzOwkvKgomIzQzOwkgKiByY3VfcmVhZF9sb2NrKCkgaXMgcmVxdWlyZWQgaGVyZSwgbm90IGp1c3QgZm9yIHhhX2Zvcl9lYWNoKCk6IGl0IGFsc28KJiM0MzsJICoga2VlcHMgZWFjaCBwb29sIGFsaXZlIHdoaWxlIGl0IGlzIGRlcmVmZXJlbmNlZCwgc2luY2UgYSBjb25jdXJyZW50bHkKJiM0MzsJICogcmV0aXJlZCBwb29sIGlzIGZyZWVkIHZpYSBxdWV1ZV9yY3Vfd29yaygpIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgomIzQzOwkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgJmFtcDt6c3dhcF9wb29scywgbGlzdCkKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDt6c3dhcF9wb29scywgaWQsIHBvb2wpCiAJCXRvdGFsICYjNDM7PSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC0mZ3Q7enNfcG9vbCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTU1NiwyMCAmIzQzOzU5OSwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbQogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKLQomIzQzOwl4YV9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCXBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpOwogCWlmIChwb29sKSB7CiAJCXpzd2FwX3Bvb2xfZGVidWcoJiMzNDt1c2luZyBleGlzdGluZyYjMzQ7LCBwb29sKTsKIAkJV0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTsKLQkJbGlzdF9kZWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiAJfQomIzQzOwl4YV91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCi0JaWYgKCFwb29sKQomIzQzOwlpZiAoIXBvb2wpIHsKIAkJcG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpOwotCWVsc2UgewomIzQzOwl9IGVsc2UgewogCQkvKgogCQkgKiBSZXN0b3JlIHRoZSBpbml0aWFsIHJlZiBkcm9wcGVkIGJ5IHBlcmNwdV9yZWZfa2lsbCgpCiAJCSAqIHdoZW4gdGhlIHBvb2wgd2FzIGRlY29tbWlzc2lvbmVkIGFuZCBzd2l0Y2ggaXQgYWdhaW4KQEAgLTU4NiwyMyAmIzQzOzYyNiwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbQogCWVsc2UKIAkJcmV0ID0gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCiAJaWYgKCFyZXQpIHsKIAkJcHV0X3Bvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnQoKTsKLQkJbGlzdF9hZGRfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiYjNDM7CQlyY3VfYXNzaWduX3BvaW50ZXIoenN3YXBfY3VycmVudF9wb29sLCBwb29sKTsKIAkJenN3YXBfaGFzX3Bvb2wgPSB0cnVlOwogCX0gZWxzZSBpZiAocG9vbCkgewotCQkvKgotCQkgKiBBZGQgdGhlIHBvc3NpYmx5IHByZS1leGlzdGluZyBwb29sIHRvIHRoZSBlbmQgb2YgdGhlIHBvb2xzCi0JCSAqIGxpc3Q7IGlmIGl0JiMzOTtzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0JiMzOTtsbCBiZSByZW1vdmVkIGFuZAotCQkgKiBkZXN0cm95ZWQgYnkgdGhlIHB1dCBhZnRlciB3ZSBkcm9wIHRoZSBsb2NrCi0JCSAqLwotCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwogCQlwdXRfcG9vbCA9IHBvb2w7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJeGFfdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCiAJLyoKIAkgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsCkBAIC03NTEsOSAmIzQzOzc4NSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpCiAgKi8KIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKIHsKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTsKJiM0MzsKIAl6c3dhcF9scnVfZGVsKGVudHJ5KTsKLQl6c19mcmVlKGVudHJ5LSZndDtwb29sLSZndDt6c19wb29sLCBlbnRyeS0mZ3Q7aGFuZGxlKTsKLQl6c3dhcF9wb29sX3B1dChlbnRyeS0mZ3Q7cG9vbCk7CiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKCFwb29sKSkgewomIzQzOwkJenNfZnJlZShwb29sLSZndDt6c19wb29sLCBlbnRyeS0mZ3Q7aGFuZGxlKTsKJiM0MzsJCXpzd2FwX3Bvb2xfcHV0KHBvb2wpOwomIzQzOwl9CiAJaWYgKGVudHJ5LSZndDtvYmpjZykgewogCQlvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LSZndDtvYmpjZywgZW50cnktJmd0O2xlbmd0aCk7CiAJCW9ial9jZ3JvdXBfcHV0KGVudHJ5LSZndDtvYmpjZyk7CkBAIC05MTAsMTIgJiM0Mzs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGVudHJ5LSZndDtwb29sOwomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwogCXN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDsKIAlzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCAqYWNvbXBfY3R4OwogCWludCByZXQgPSAwLCBkbGVuOwogCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXBvb2wpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtJmd0O2Fjb21wX2N0eCk7CiAJbXV0ZXhfbG9jaygmYW1wO2Fjb21wX2N0eC0mZ3Q7bXV0ZXgpOwogCXpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUsIGlucHV0LCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKQEAgLTk1MSw3ICYjNDM7OTkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXByX2FsZXJ0X3JhdGVsaW1pdGVkKCYjMzQ7RGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtJmd0OyVkKVxuJiMzNDssCiAJCQkJCQlzd3BfdHlwZShlbnRyeS0mZ3Q7c3dwZW50cnkpLAogCQkJCQkJc3dwX29mZnNldChlbnRyeS0mZ3Q7c3dwZW50cnkpLAotCQkJCQkJZW50cnktJmd0O3Bvb2wtJmd0O3RmbV9uYW1lLAomIzQzOwkJCQkJCXBvb2wtJmd0O3RmbV9uYW1lLAogCQkJCQkJZW50cnktJmd0O2xlbmd0aCwgZGxlbik7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTQwOSw2ICYjNDM7MTQ1MCwxNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAogCWlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKQogCQlnb3RvIGNvbXByZXNzX2ZhaWxlZDsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5OiBjb21wcmVzc2lvbiBoYXMKJiM0MzsJICogc3VjY2VlZGVkIGFuZCB0aGUgcG9vbCBpcyBhbHJlYWR5IHBpbm5lZCBieSB0aGlzIHN0b3JlLCBzbyB0aGUgaWQgaXMKJiM0MzsJICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnkKJiM0MzsJICogaXMgbmV2ZXIgYnJpZWZseSB2aXNpYmxlIHdpdGggYSBzdGFsZSBwb29sX2lkeCBsZWZ0IG92ZXIgZnJvbSBzbGFiCiYjNDM7CSAqIHJldXNlLCB3aGljaCB6c3dhcF9lbnRyeV9wb29sKCkgd291bGQgb3RoZXJ3aXNlIHJlc29sdmUgdG8gYW4KJiM0MzsJICogdW5yZWxhdGVkIGxpdmUgcG9vbC4KJiM0MzsJICovCiYjNDM7CWVudHJ5LSZndDtwb29sX2lkeCA9IHBvb2wtJmd0O2lkeDsKJiM0MzsKIAlvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksCiAJCSAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLAogCQkgICAgICAgZW50cnksIEdGUF9LRVJORUwpOwpAQCAtMTQ1NCw3ICYjNDM7MTUwNSw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZwogCSAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuCiAJICovCi0JZW50cnktJmd0O3Bvb2wgPSBwb29sOwogCWVudHJ5LSZndDtzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7CiAJZW50cnktJmd0O29iamNnID0gb2JqY2c7CiAJZW50cnktJmd0O3JlZmVyZW5jZWQgPSB0cnVlOwpAQCAtMTc5MCw3ICYjNDM7MTg0MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZCkKIAlwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpOwogCWlmIChwb29sKSB7CiAJCXByX2luZm8oJiMzNDtsb2FkZWQgdXNpbmcgcG9vbCAlc1xuJiMzNDssIHBvb2wtJmd0O3RmbV9uYW1lKTsKLQkJbGlzdF9hZGQoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7enN3YXBfZXZlcl9lbmFibGVkKTsKIAl9IGVsc2Ugewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBrZXJuZWwmIzM5O3MgY29tcHJlc3NlZCBzd2FwIGFyZWEgaW1wbGVtZW50YXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgYHpzd2FwX3Bvb2xgIGlzIGhhbmRsZWQuIEl0JiMzOTtzIG1vdmluZyBmcm9tIGEgZGlyZWN0IHBvaW50ZXIgd2l0aGluIGB6c3dhcF9lbnRyeWAgKGBzdHJ1Y3QgenN3YXBfZW50cnlgKSB0byBhbiBpbmRleCAoYHU4IHBvb2xfaWR4YCkgcmVmZXJlbmNpbmcgYW4geGFycmF5IChgenN3YXBfcG9vbHNgKS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHNoaWZ0ISBTbyBub3csIGluc3RlYWQgb2YgYSBkaXJlY3QgcG9pbnRlciwgd2UgaGF2ZSBhbiBJRCBsb29rdXAuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGNoYW5nZXMgaW4gaG93IG1lbW9yeSBpcyBhY2Nlc3NlZCwgYWxsb2NhdGVkLCBhbmQgZnJlZWQgd2l0aGluIHRoZSB6c3dhcCBzdWJzeXN0ZW0uIEkgc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYHhhX2FsbG9jX2JoYCwgYF9feGFfZXJhc2VgLCBgeGFfZm9yX2VhY2hgLCBhbmQgYHhhX2xvYWRgLCBhbGwgdW5kZXIgUkNVIHByb3RlY3Rpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHJjdV93b3JrYCBhbmQgYHJjdV9hc3NpZ25fcG9pbnRlcmAgaXMgYW5vdGhlciBrZXkgZGV0YWlsLiBUaGlzIGhpbnRzIGF0IGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IHdlIGNhbiBleHBsb2l0IGR1cmluZyBmdXp6aW5nLiBUaGUgZnVuY3Rpb24gcmVwbGFjZW1lbnRzIGFsc28gZGVtYW5kIGNhcmVmdWwgZXhhbWluYXRpb24uIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGB6c3dhcF9wb29sX2NyZWF0ZWAsIGFsbCBvZiB0aGVzZSBhbHRlcmVkIGZ1bmN0aW9ucywgaWYgbWlzaGFuZGxlZCwgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWZhY3RvcmluZyBpcyBwcm9iYWJseSBkb25lIGZvciBhIHJlYXNvbiwgcGVyaGFwcyB0byBzdXBwb3J0IG11bHRpcGxlIHBvb2xzIG9yIGltcHJvdmUgc2NhbGFiaWxpdHkuIFRoZSBzd2l0Y2ggdG8gYW4geGFycmF5IGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYmVjYXVzZSBpdCBpcyBhbiBpbnRyaWNhdGUgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG9vbCBtYW5hZ2VtZW50IGNvZGUsIGVzcGVjaWFsbHkgdGhlIG5ldyBoZWxwZXIgYHpzd2FwX2VudHJ5X3Bvb2xgLCB3aGljaCBpcyBsaWtlbHkgYSBrZXkgcG9pbnQgb2YgaW50ZXJhY3Rpb24uCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIHpzd2FwLiBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSB0byBiZSB1c2VkLiBJIHdpbGwgcHJvYmFibHkgcnVuIGBncmVwcGVyYCBvciBjaGVjayBgbW0vS2NvbmZpZ2AgZGlyZWN0bHkgdG8gZ2F0aGVyIHRoZSByZXF1aXJlZCBpbmZvLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IHByZWNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgZm9yIHRoZSB6c3dhcCBmdW5jdGlvbmFsaXR5IHRvIGV2ZW4gYmUgYWN0aXZlLiBXaXRoIHRoYXQsIEkmIzM5O2xsIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hhdCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBhcmVhIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBgRm9jdXNTeW1ib2xzYCBhbmQgdGhlIGNvbmZpZ3MgSSBuZWVkIGZvciB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgWlNXQVAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIFpTV0FQJiMzOTtzIGRlcGVuZGVuY2llcy4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBwdWxsIHVwIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMjAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucyBhbmQgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIFpTV0FQLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcXVpY2sgYW5kIGRpcmVjdCBoaXQsIG5vdGhpbmcgZmFuY3ksIGp1c3QgdGhlIGJ1aWxkaW5nIGJsb2Nrcy4gVGltZSB0byBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xuICA1MTpcdFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcbiAgNTI6XHRcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBvZiB6c3dhcC5vKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgenN3YXAub2AgaXMgYmVpbmcgY29tcGlsZWQuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgZGVmaW5lZCBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZHVsZXMsIGFuZCB1bmRvdWJ0ZWRseSB3aGVyZSB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgYHpzd2FwLm9gIHJlc2lkZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29tcGlsYXRpb24gZmxhZ3MsIGluY2x1ZGUgcGF0aHMsIGFuZCBhbnkgbGluayBkZXBlbmRlbmNpZXMgbGFpZCBvdXQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgSSBjYW4gbGVhcm4uIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29tcGlsZXIgY2hvaWNlcyBtYWRlIGZvciB0aGlzIGNydWNpYWwgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Nzk9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo4MDpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODEtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWnN3YXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1NXQVBgIOKAkyBlc3NlbnRpYWxseSwgYFpTV0FQYCDigJMgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUga2V5IG1vZGlmaWNhdGlvbnMgd2l0aGluIGBtbS96c3dhcC5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgd2hvbGUgc2xldyBvZiBmdW5jdGlvbnMsIG1vc3RseSBzdGF0aWMsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcG9vbCBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHkgSSBzZWUgdGhlIGZvbGxvd2luZzogYHpzd2FwX2VudHJ5X3Bvb2xgLCBgenN3YXBfcG9vbF9jcmVhdGVgLCBgX196c3dhcF9wb29sX3JlbGVhc2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYF9fenN3YXBfcG9vbF9jdXJyZW50YCwgYHpzd2FwX3Bvb2xfY3VycmVudGAsIGB6c3dhcF9wb29sX2N1cnJlbnRfZ2V0YCwgYHpzd2FwX3Bvb2xfZmluZF9nZXRgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgLiBUaGVzZSBhcmUgbGlrZWx5IGFsbCBwYXJ0IG9mIHRoZSB6c3dhcCBkYXRhIHN0cnVjdHVyZSBvciBjb3JlIHpzd2FwIG9wZXJhdGlvbiwgbGlrZWx5IHRvIGluY2x1ZGUgYW4gaW50ZXJuYWwgcG9vbC4gSSYjMzk7bSBhbHNvIHNlZWluZyBgenN3YXBfdG90YWxfcGFnZXNgLgoKSSYjMzk7bSBtb3JlIGludGVyZXN0ZWQgaW4gdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgenN3YXAgcHJvY2VzcyBpdHNlbGYsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEkgYWxzbyBzZWUgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGFuZCBgenN3YXBfc2V0dXBgLiBJIHNlZSBhIGNvdXBsZSBvZiBvdGhlcnMgYXMgd2VsbCwgYnV0IGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgIGFuZCBgenN3YXBfZW50cnlfZnJlZWAgYXJlIGxpa2VseSBrZXkgdG8gdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYW5kIHN0b3JhZ2UgbGlmZWN5Y2xlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgc2VlICpob3cqIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGhzIGFyb3VuZCBgenN3YXBfc3RvcmVfcGFnZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYW5kIGB6c3dhcF9lbnRyeV9mcmVlYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBpdHMgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9zdG9yZXx6c3dhcF9sb2FkfHpzd2FwX2ludmFsaWRhdGV8enN3YXBfcG9vbF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMtNDctLyogVGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjQ4OmF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL3pzd2FwLmMtNDktLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXG5tbS96c3dhcC5jOjUwOnN0YXRpYyBhdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTUxLVxuLS1cbm1tL3pzd2FwLmMtNTktLyogUG9vbCBsaW1pdCB3YXMgaGl0IChzZWUgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCkgKi9cbm1tL3pzd2FwLmM6NjA6c3RhdGljIHU2NCB6c3dhcF9wb29sX2xpbWl0X2hpdDtcbm1tL3pzd2FwLmMtNjEtLyogUGFnZXMgd3JpdHRlbiBiYWNrIHdoZW4gcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xuLS1cbm1tL3pzd2FwLmM9Nzc9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHJpbmtfd3E7XG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cbm1tL3pzd2FwLmM6Nzk6c3RhdGljIGJvb2wgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGw7XG5tbS96c3dhcC5jLTgwLVxuLS1cbm1tL3pzd2FwLmM9MTU0PXN0cnVjdCB6c3dhcF9wb29sIHtcbi0tXG5tbS96c3dhcC5jLTE2Ny0gKiBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUgeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuXG5tbS96c3dhcC5jOjE2ODogKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2Vcbm1tL3pzd2FwLmMtMTY5LSAqIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cbi0tXG5tbS96c3dhcC5jPTIwMz1zdHJ1Y3QgenN3YXBfZW50cnkge1xuLS1cbm1tL3pzd2FwLmMtMjE0LSAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcbm1tL3pzd2FwLmM6MjE1OiAqIHJlZmVyZW5jZSB0byBpdHMgcG9vbCAodGFrZW4gaW4genN3YXBfc3RvcmVfcGFnZSgpKS5cbm1tL3pzd2FwLmMtMjE2LSAqL1xuLS1cbm1tL3pzd2FwLmM9MjU1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHhhcnJheSAqc3dhcF96c3dhcF90cmVlKHN3cF9lbnRyeV90IHN3cClcbi0tXG5tbS96c3dhcC5jLTI2MC1cbm1tL3pzd2FwLmM6MjYxOiNkZWZpbmUgenN3YXBfcG9vbF9kZWJ1Zyhtc2csIHApXHRcdFx0XFxcbm1tL3pzd2FwLmMtMjYyLVx0cHJfZGVidWcoXCYjMzQ7JXMgcG9vbCAlc1xcblwmIzM0OywgbXNnLCAocCktXHUwMDNldGZtX25hbWUpXG4tLVxubW0venN3YXAuYy0yNjYtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MjY3OnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKTtcbm1tL3pzd2FwLmMtMjY4LVxubW0venN3YXAuYz0yNjk9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcbi0tXG5tbS96c3dhcC5jLTI5Ni1cbm1tL3pzd2FwLmM6Mjk3OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3Nvcilcbm1tL3pzd2FwLmMtMjk4LXtcbi0tXG5tbS96c3dhcC5jLTM0My1cdCAqL1xubW0venN3YXAuYzozNDQ6XHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYsIF9fenN3YXBfcG9vbF9lbXB0eSxcbm1tL3pzd2FwLmMtMzQ1LVx0XHRcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcbi0tXG5tbS96c3dhcC5jLTM1OS1cbm1tL3pzd2FwLmM6MzYwOlx0enN3YXBfcG9vbF9kZWJ1ZyhcJiMzNDtjcmVhdGVkXCYjMzQ7LCBwb29sKTtcbm1tL3pzd2FwLmMtMzYxLVxuLS1cbm1tL3pzd2FwLmMtMzgwLVxubW0venN3YXAuYzozODE6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG5tbS96c3dhcC5jLTM4Mi17XG4tLVxubW0venN3YXAuYy0zOTYtXG5tbS96c3dhcC5jOjM5NzpcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcbm1tL3pzd2FwLmMtMzk4LX1cbm1tL3pzd2FwLmMtMzk5LVxubW0venN3YXAuYzo0MDA6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00MDEte1xuLS1cbm1tL3pzd2FwLmMtNDAzLVxubW0venN3YXAuYzo0MDQ6XHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O2Rlc3Ryb3lpbmdcJiMzNDssIHBvb2wpO1xubW0venN3YXAuYy00MDUtXG4tLVxubW0venN3YXAuYy00MTYtXG5tbS96c3dhcC5jOjQxNzpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5tbS96c3dhcC5jLTQxOC17XG4tLVxubW0venN3YXAuYy00MjYtXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xubW0venN3YXAuYzo0Mjc6XHR6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7XG5tbS96c3dhcC5jLTQyOC19XG5tbS96c3dhcC5jLTQyOS1cbm1tL3pzd2FwLmM6NDMwOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpO1xubW0venN3YXAuYy00MzEtXG5tbS96c3dhcC5jOjQzMjpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbm1tL3pzd2FwLmMtNDMzLXtcbi0tXG5tbS96c3dhcC5jLTQzOS1cbm1tL3pzd2FwLmM6NDQwOlx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbm1tL3pzd2FwLmMtNDQxLVxuLS1cbm1tL3pzd2FwLmMtNDQzLVxubW0venN3YXAuYzo0NDQ6XHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xubW0venN3YXAuYy00NDUtXHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCBcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2VfcndvcmspO1xuLS1cbm1tL3pzd2FwLmMtNDQ5LVxubW0venN3YXAuYzo0NTA6c3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ1MS17XG4tLVxubW0venN3YXAuYy00NTgtLyogVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZS4gKi9cbm1tL3pzd2FwLmM6NDU5OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZ2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxubW0venN3YXAuYy00NjAte1xuLS1cbm1tL3pzd2FwLmMtNDYzLVxubW0venN3YXAuYzo0NjQ6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9wdXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5tbS96c3dhcC5jLTQ2NS17XG4tLVxubW0venN3YXAuYy00NjgtXG5tbS96c3dhcC5jOjQ2OTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG5tbS96c3dhcC5jLTQ3MC17XG4tLVxubW0venN3YXAuYy00ODAtXG5tbS96c3dhcC5jOjQ4MTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxubW0venN3YXAuYy00ODIte1xuLS1cbm1tL3pzd2FwLmMtNDg0LVxubW0venN3YXAuYzo0ODU6XHRyZXR1cm4gX196c3dhcF9wb29sX2N1cnJlbnQoKTtcbm1tL3pzd2FwLmMtNDg2LX1cbm1tL3pzd2FwLmMtNDg3LVxubW0venN3YXAuYzo0ODg6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpXG5tbS96c3dhcC5jLTQ4OS17XG4tLVxubW0venN3YXAuYy00OTMtXG5tbS96c3dhcC5jOjQ5NDpcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xubW0venN3YXAuYzo0OTU6XHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxubW0venN3YXAuYy00OTYtXHRcdHBvb2wgPSBOVUxMO1xuLS1cbm1tL3pzd2FwLmMtNTAzLS8qIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbm1tL3pzd2FwLmM6NTA0OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxubW0venN3YXAuYy01MDUte1xuLS1cbm1tL3pzd2FwLmMtNTE0LVx0XHQvKiBpZiB3ZSBjYW4mIzM5O3QgZ2V0IGl0LCBpdCYjMzk7cyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbm1tL3pzd2FwLmM6NTE1Olx0XHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxubW0venN3YXAuYy01MTYtXHRcdFx0Y29udGludWU7XG4tLVxubW0venN3YXAuYz01NTI9c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXG4tLVxubW0venN3YXAuYy01NTctXHRpZiAoY3VyX3BhZ2VzIFx1MDAzZT0gbWF4X3BhZ2VzKSB7XG5tbS96c3dhcC5jOjU1ODpcdFx0enN3YXBfcG9vbF9saW1pdF9oaXQmIzQzOyYjNDM7O1xubW0venN3YXAuYzo1NTk6XHRcdHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsID0gdHJ1ZTtcbm1tL3pzd2FwLmM6NTYwOlx0fSBlbHNlIGlmICh6c3dhcF9wb29sX3JlYWNoZWRfZnVsbCBcdTAwMjZcdTAwMjZcbm1tL3pzd2FwLmMtNTYxLVx0XHQgICBjdXJfcGFnZXMgXHUwMDNjPSB6c3dhcF9hY2NlcHRfdGhyX3BhZ2VzKCkpIHtcbm1tL3pzd2FwLmM6NTYyOlx0XHRcdHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsID0gZmFsc2U7XG5tbS96c3dhcC5jLTU2My1cdH1cbm1tL3pzd2FwLmM6NTY0Olx0cmV0dXJuIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xubW0venN3YXAuYy01NjUtfVxuLS1cbm1tL3pzd2FwLmM9NTcxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS96c3dhcC5jLTYwMi1cdHhhX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xubW0venN3YXAuYzo2MDM6XHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcbm1tL3pzd2FwLmMtNjA0LVx0aWYgKHBvb2wpIHtcbm1tL3pzd2FwLmM6NjA1Olx0XHR6c3dhcF9wb29sX2RlYnVnKFwmIzM0O3VzaW5nIGV4aXN0aW5nXCYjMzQ7LCBwb29sKTtcbm1tL3pzd2FwLmM6NjA2Olx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xubW0venN3YXAuYy02MDctXHR9XG4tLVxubW0venN3YXAuYy02MTAtXHRpZiAoIXBvb2wpIHtcbm1tL3pzd2FwLmM6NjExOlx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG5tbS96c3dhcC5jLTYxMi1cdH0gZWxzZSB7XG4tLVxubW0venN3YXAuYy02MTktXG5tbS96c3dhcC5jOjYyMDpcdFx0LyogRHJvcCB0aGUgcmVmIGZyb20genN3YXBfcG9vbF9maW5kX2dldCgpLiAqL1xubW0venN3YXAuYzo2MjE6XHRcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xubW0venN3YXAuYy02MjItXHR9XG4tLVxubW0venN3YXAuYy02MzEtXHRpZiAoIXJldCkge1xubW0venN3YXAuYzo2MzI6XHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG5tbS96c3dhcC5jLTYzMy1cdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4tLVxubW0venN3YXAuYz03ODY9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtNzkyLVx0XHR6c19mcmVlKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbm1tL3pzd2FwLmM6NzkzOlx0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbm1tL3pzd2FwLmMtNzk0LVx0fVxuLS1cbm1tL3pzd2FwLmMtNzk5LVx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXG5tbS96c3dhcC5jOjgwMDpcdFx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG5tbS96c3dhcC5jLTgwMS1cdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xubW0venN3YXAuYzo4MDI6XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtODAzLX1cbi0tXG5tbS96c3dhcC5jPTk0OT1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xMDA5LSAqIHRvIHRoZSBzd2FwIGRldmljZS4gIFdlIGFyZSBiYXNpY2FsbHkgcmVzdW1pbmcgdGhlIHNhbWUgc3dhcFxubW0venN3YXAuYzoxMDEwOiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtMTAxMS0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cbi0tXG5tbS96c3dhcC5jPTEyMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTEyNTQtXHRcdG5yX2JhY2tpbmcgPSB6c3dhcF90b3RhbF9wYWdlcygpO1xubW0venN3YXAuYzoxMjU1Olx0XHRucl9zdG9yZWQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTEyNTYtXHR9XG4tLVxubW0venN3YXAuYz0xMzQ1PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3pzd2FwLmMtMTQzNS1cbm1tL3pzd2FwLmM6MTQzNjpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0venN3YXAuYy0xNDM3LVx0XHRcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL3pzd2FwLmMtMTQ4NC1cdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcbm1tL3pzd2FwLmM6MTQ4NTpcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxubW0venN3YXAuYy0xNDg2LVx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXG4tLVxubW0venN3YXAuYy0xNDg4LVx0ICovXG5tbS96c3dhcC5jOjE0ODk6XHR6c3dhcF9wb29sX2dldChwb29sKTtcbm1tL3pzd2FwLmMtMTQ5MC1cdGlmIChvYmpjZykge1xuLS1cbm1tL3pzd2FwLmMtMTQ5My1cdH1cbm1tL3pzd2FwLmM6MTQ5NDpcdGF0b21pY19sb25nX2luYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy0xNDk1LVx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXG5tbS96c3dhcC5jOjE0OTY6XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNDk3LVxuLS1cbm1tL3pzd2FwLmMtMTUyNC1cbm1tL3pzd2FwLmM6MTUyNTpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTE1MjYte1xuLS1cbm1tL3pzd2FwLmMtMTU1My1cbm1tL3pzd2FwLmM6MTU1NDpcdHBvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KCk7XG5tbS96c3dhcC5jLTE1NTUtXHRpZiAoIXBvb2wpXG4tLVxubW0venN3YXAuYy0xNTY5LVxubW0venN3YXAuYzoxNTcwOlx0XHRpZiAoIXpzd2FwX3N0b3JlX3BhZ2UocGFnZSwgb2JqY2csIHBvb2wpKVxubW0venN3YXAuYy0xNTcxLVx0XHRcdGdvdG8gcHV0X3Bvb2w7XG4tLVxubW0venN3YXAuYy0xNTgxLXB1dF9wb29sOlxubW0venN3YXAuYzoxNTgyOlx0enN3YXBfcG9vbF9wdXQocG9vbCk7XG5tbS96c3dhcC5jLTE1ODMtcHV0X29iamNnOlxubW0venN3YXAuYy0xNTg0LVx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xubW0venN3YXAuYzoxNTg1Olx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsKVxubW0venN3YXAuYy0xNTg2LVx0XHRxdWV1ZV93b3JrKHNocmlua193cSwgXHUwMDI2enN3YXBfc2hyaW5rX3dvcmspO1xuLS1cbm1tL3pzd2FwLmMtMTYxMS0vKipcbm1tL3pzd2FwLmM6MTYxMjogKiB6c3dhcF9sb2FkKCkgLSBsb2FkIGEgZm9saW8gZnJvbSB6c3dhcFxubW0venN3YXAuYy0xNjEzLSAqIEBmb2xpbzogZm9saW8gdG8gbG9hZFxuLS1cbm1tL3pzd2FwLmMtMTYzMC0gKi9cbm1tL3pzd2FwLmM6MTYzMTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNjMyLXtcbi0tXG5tbS96c3dhcC5jLTE2ODMtXG5tbS96c3dhcC5jOjE2ODQ6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcbm1tL3pzd2FwLmMtMTY4NS17XG4tLVxubW0venN3YXAuYz0xNzUwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxubW0venN3YXAuYy0xNzUxLXtcbm1tL3pzd2FwLmM6MTc1MjpcdCp2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTE3NTMtXHRyZXR1cm4gMDtcbi0tXG5tbS96c3dhcC5jPTE3NTc9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3NTgte1xubW0venN3YXAuYzoxNzU5Olx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTc2MC1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTc2NT1zdGF0aWMgaW50IHpzd2FwX2RlYnVnZnNfaW5pdCh2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTc3Mi1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtwb29sX2xpbWl0X2hpdFwmIzM0OywgMDQ0NCxcbm1tL3pzd2FwLmM6MTc3MzpcdFx0XHQgICB6c3dhcF9kZWJ1Z2ZzX3Jvb3QsIFx1MDAyNnpzd2FwX3Bvb2xfbGltaXRfaGl0KTtcbm1tL3pzd2FwLmMtMTc3NC1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtyZWplY3RfcmVjbGFpbV9mYWlsXCYjMzQ7LCAwNDQ0LFxuLS1cbm1tL3pzd2FwLmM9MTgwOD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODM5LVxubW0venN3YXAuYzoxODQwOlx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbm1tL3pzd2FwLmMtMTg0MS1cdGlmIChwb29sKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGNoYW5nZSBpbiBjb2RlIHdlIGNhbiBhY3R1YWxseSBnZXQgYXQgdGhyb3VnaCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB3aXRoaW4gYG1tL3pzd2FwLmNgIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0JiMzOTtzIHVzZWQgd2hlbiBzd2FwIG9yIHpzd2FwIGlzIGFjdGl2ZSwgd2hpY2ggaXMgY29tbW9uIGluIGJvdGggUUVNVSBhbmQgc3RhbmRhcmQgZW52aXJvbm1lbnRzLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCkZ1cnRoZXJtb3JlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBkYXRhIHN0cnVjdHVyZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlcGxhY2luZyBhIHBvaW50ZXIgaW4gYHpzd2FwX2VudHJ5YCAoc3BlY2lmaWNhbGx5LCBhIHBvaW50ZXIgdG8gYHpzd2FwX3Bvb2xgKSB3aXRoIGEgYHBvb2xfaWR4YCwgc3RvcmluZyBwb29scyBpbiBhbiB4YXJyYXkgY2FsbGVkIGB6c3dhcF9wb29sc2AsIHVzaW5nIGByY3Vfd29ya2AgZm9yIGFzeW5jaHJvbm91cyBwb29sIHJlbGVhc2UsIGFuZCBtb3N0IHNpZ25pZmljYW50bHksIGNoYW5naW5nIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wgd2l0aCBgeGFfbG9ja19iaGAsIGByY3VfZGVyZWZlcmVuY2VfY2hlY2tgLCBhbmQgYHJjdV9hc3NpZ25fcG9pbnRlcmAuICBXZSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGVycm9yIHBhdGhzIGFuZCBuZXcgYFdBUk5fT05fT05DRWAgY2hlY2tzLiBUaGlzIGxldmVsIG9mIHJlc3RydWN0dXJpbmcgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYWxvbmcgd2l0aCBjb25jdXJyZW5jeSBjaGFuZ2VzLCAqc2NyZWFtcyogJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJ1Z3MhJiMzNDsgVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB3ZSBuZWVkIHRvIGlkZW50aWZ5IEZvY3VzU3ltYm9scyDigJMgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCBvdXIgZnV6emluZyBlZmZvcnRzLiAgSSB3YW50IHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyAqZGlyZWN0bHkqIGltcGxlbWVudGluZyBvciBleGVyY2lzaW5nIHRoZSBhbHRlcmVkIGxvZ2ljLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmU6CgoqICAgYHpzd2FwX3N0b3JlYCAob3IgYHpzd2FwX3N0b3JlX3BhZ2VgKQoqICAgYHpzd2FwX2xvYWRgIChjcnVjaWFsbHksIHRoaXMgY2FsbHMgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgKQoqICAgYHpzd2FwX2ludmFsaWRhdGVgICh3aGljaCBhbHNvIGNhbGxzIGB6c3dhcF9lbnRyeV9mcmVlYCkKKiAgIGB6c3dhcF90b3RhbF9wYWdlc2AKKiAgIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAKKiAgIGB6c3dhcF9wb29sX2NyZWF0ZWAKKiAgIGBfX3pzd2FwX3Bvb2xfZW1wdHlgCiogICBgX196c3dhcF9wb29sX3JlbGVhc2VgCiogICBgenN3YXBfZW50cnlfZnJlZWAKKiAgIGB6c3dhcF9kZWNvbXByZXNzYAoqICAgYHpzd2FwX2VudHJ5X3Bvb2xgCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNhbGxhYmxlIGFuZCBmaW5kYWJsZS4gIExvb2tpbmcgYXQgdGhlIHN5bWJvbHM6CgoqICAgVGhlICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCwgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHVzIHRvIGNhbGwsIGFyZSBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGB6c3dhcF90b3RhbF9wYWdlc2AuICBUaGVzZSBhcmUgZ29vZCBjYW5kaWRhdGVzLgoqICAgVGhlICpzdGF0aWMqIGZ1bmN0aW9ucyBhcmUgYHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0YCwgYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9lbnRyeV9wb29sYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYF9fenN3YXBfcG9vbF9yZWxlYXNlYCwgYW5kIGB6c3dhcF9wb29sX2NyZWF0ZWAuIFdoaWxlIHRoZXkgbWF5IGJlIG1vcmUgZGlmZmljdWx0IHRvIGNhbGwgZGlyZWN0bHksIHdlIHN0aWxsIG5lZWQgdG8gdGFrZSB0aGVtIGludG8gY29uc2lkZXJhdGlvbiwgYXMgdGhleSBtYXkgYmUgY2FsbGVkIGZyb20gZnVuY3Rpb25zIHRoYXQgKmFyZSogZXhwb3NlZC4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgY2FsbHMgdG8gYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBzbyBvbiwgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgenN3YXAgc3lzdGVtLiBMZXQmIzM5O3MgZXhhbWluZSBpZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBoYXMgYW55IGJlYXJpbmcgb24gdGhlIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05NDk9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtMTAxNC0gKi9cbm1tL3pzd2FwLmM6MTAxNTpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy0xMDE2LVx0XHRcdFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxuLS1cbm1tL3pzd2FwLmM9MTExOD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL3pzd2FwLmMtMTE0MS1cdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcbm1tL3pzd2FwLmM6MTE0MjpcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcbm1tL3pzd2FwLmMtMTE0My1cdCAqICAgIHRoZW4gdmFsaWRhdGUgdGhlIHpzd2FwIGVudHJ5IGFnYWluc3QgdGhhdCBzd2FwIGVudHJ5JiMzOTtzXG4tLVxubW0venN3YXAuYy0xMTc2LVxubW0venN3YXAuYzoxMTc3Olx0d3JpdGViYWNrX3Jlc3VsdCA9IHpzd2FwX3dyaXRlYmFja19lbnRyeShlbnRyeSwgc3dwZW50cnkpO1xubW0venN3YXAuYy0xMTc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Kipac3dhcCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIHJlYWxseSBkaWcgaW50byB0aGlzIFpzd2FwIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBleGFtaW5lIGEgZmV3IGtleSBtZXRyaWNzOiBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgenN3YXBfbG9hZGAsIGB6c3dhcF9zdG9yZWAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGFuZCBgenN3YXBfdG90YWxfcGFnZXNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb25hbCBzdGF0dXMuCgpOZXh0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBFbmFibGVDb25maWdzYCBhbmQgdGhlbiBkcmlsbCBkb3duIGludG8gYG1tL0tjb25maWdgIHRvIGdldCB0aGUgY29yZSBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYENPTkZJR19aU1dBUGAgaXMgdGhlIHByaW1hcnkgb3B0aW9uLCBhbmQgdGhhdCBpdCBkZXBlbmRzIG9uIGBDT05GSUdfU1dBUGAuIEl0IGFsc28gKnNlbGVjdHMqIGBDT05GSUdfQ1JZUFRPYCBhbmQgYENPTkZJR19aU01BTExPQ2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19aU1dBUGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMgb24gYENPTkZJR19TV0FQYCwgYENPTkZJR19DUllQVE9gIGFuZCBgQ09ORklHX1pTTUFMTE9DYCBhcmUgKmFsbCogdGhhdCYjMzk7cyByZXF1aXJlZCwgb3IgaWYgdGhlcmUgYXJlIG90aGVyLCBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCBtYWtlcyBzZW5zZSwgb2YgY291cnNlLCB0aGF0IGBaU1dBUGAgZGVwZW5kcyBvbiBgU1dBUGAsIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBjZXJ0YWluLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBvdGhlciBwb3NzaWJsZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywganVzdCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIHRocm91Z2ggYG1tL3pzd2FwLmNgIGFuZCBzZWFyY2ggZm9yIGFueSBvdGhlciBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgdHJpZ2dlciBvdGhlciBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBteSBhbmFseXNpcyBvciBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZnwjaWYgSVNfRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xNzE4PXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcbi0tXG5tbS96c3dhcC5jLTE3MzctKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6MTczODojaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5tbS96c3dhcC5jLTE3MzktI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTM3CgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmlhZ2UgUmV2aWV3OiBaU1dBUCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFllcCwgJiMzNDtTV0FQJiMzNDsgYW5kICYjMzQ7WlNXQVAmIzM0OyBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGNvbmZpZ3MgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgdHJpYWdlIGluc3RydWN0aW9ucyB0byB0aGUgbGV0dGVyLgoKQWxyaWdodCwgdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMuLi4gV29ydGhGdXp6aW5nIGlzIHNldCB0byB0cnVlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY2hhbmdlcy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogaXTigJlzIHRvdWNoaW5nIGBtbS96c3dhcC5jYCBhbmQgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgenN3YXAgcG9vbHMgYXJlIG1hbmFnZWQuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgbW92aW5nIGZyb20gZGlyZWN0IHBvaW50ZXJzIHdpdGhpbiBgenN3YXBfZW50cnlgIHRvIHBvb2wgaW5kaWNlcyB2aWEgYW4gWEFycmF5LiBUaGF0IGFsc28gaW5jbHVkZXMgYWx0ZXJpbmcgUkNVLXByb3RlY3RlZCBsb29rdXAgYW5kIHRlYXJkb3duIHdpdGggYHJjdV93b3JrYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHBhdGhzLiBTb3VuZHMgbGlrZSBhIGdvb2QgdGFyZ2V0LgoKRW5hYmxlQ29uZmlncyBjb25maXJtcyB3aGF0IEkgYWxyZWFkeSBzdXNwZWN0ZWQsIGFuZCB0aGUgRm9jdXNTeW1ib2xzIGxpc3QgaGl0cyBhbGwgdGhlIGNyaXRpY2FsIHpzd2FwIGZ1bmN0aW9uczogYHpzd2FwX3N0b3JlYCwgYHpzd2FwX2xvYWRgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBgenN3YXBfdG90YWxfcGFnZXNgLCBgenN3YXBfZW50cnlfZnJlZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgX196c3dhcF9wb29sX2VtcHR5YCwgYW5kIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAuIFRoaXMgaXMgYSBjb21wcmVoZW5zaXZlIGxpc3QsIGNvdmVyaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHpzd2FwIHBvb2wgbWFuYWdlbWVudC4KClJpZ2h0LCBhbGwgY2xlYXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OywKICAgICYjMzQ7enN3YXBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAgICYjMzQ7enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQmIzM0OywKICAgICYjMzQ7enN3YXBfdG90YWxfcGFnZXMmIzM0OywKICAgICYjMzQ7enN3YXBfZW50cnlfZnJlZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlX3BhZ2UmIzM0OywKICAgICYjMzQ7X196c3dhcF9wb29sX2VtcHR5JiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGRpcmVjdCBwb29sIHBvaW50ZXJzIGluIHN0cnVjdCB6c3dhcF9lbnRyeSB3aXRoIHBvb2wgaW5kaWNlcyB0cmFja2VkIGluIGFuIFhBcnJheS4gSXQgdXBkYXRlcyBSQ1UtcHJvdGVjdGVkIHBvb2wgbG9va3VwcywgY2hhbmdlcyB0ZWFyZG93biB0byB1c2UgcmN1X3dvcmssIGFkanVzdHMgY29uY3VycmVuY3kgbG9ja2luZyB3aXRoIFhBcnJheSBsb2NrcywgYW5kIG1vZGlmaWVzIHRoZSBzdG9yZS9kZWNvbXByZXNzL2ZyZWUvd3JpdGViYWNrIGxpZmVjeWNsZSBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDssCiAgICAmIzM0O3pzd2FwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgICAmIzM0O3pzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0JiMzNDssCiAgICAmIzM0O3pzd2FwX3RvdGFsX3BhZ2VzJiMzNDssCiAgICAmIzM0O3pzd2FwX2VudHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7enN3YXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZV9wYWdlJiMzNDssCiAgICAmIzM0O19fenN3YXBfcG9vbF9lbXB0eSYjMzQ7LAogICAgJiMzNDtfX3pzd2FwX3Bvb2xfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHpzd2FwIHBvb2wgbWFuYWdlbWVudCBieSByZXBsYWNpbmcgdGhlIGxpbmtlZCBsaXN0IG9mIHBvb2xzIGFuZCA4LWJ5dGUgcG9vbCBwb2ludGVyIGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIHdpdGggYW4gWEFycmF5IGxvb2t1cCB0YWJsZSBhbmQgYSAxLWJ5dGUgcG9vbCBpbmRleCAoYHBvb2xfaWR4YCksIGFsb25nc2lkZSB0cmFuc2l0aW9uaW5nIHBvb2wgY2xlYW51cCB0byBgcmN1X3dvcmtgLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXG4yLiBVc2VyLXNwYWNlIEluZm8gTGVha3M6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgc3lzY2FsbCByZXR1cm4sIGV0Yy4pLlxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDQxZmVkZmEyZWNhZTYwMjY1NWNkZDFmYmJiZWU0OTc1ODRlYzliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAyMzo0Nzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjMxY2YwZWY0M2QyMzYgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzQsNiAmIzQzOzM0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC93cml0ZWJhY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3RfbHJ1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvenNtYWxsb2MuaCZndDsKIApAQCAtMTU0LDEyICYjNDM7MTU1LDI0IEBAIHN0cnVjdCB6c3dhcF9wb29sIHsKIAlzdHJ1Y3QgenNfcG9vbCAqenNfcG9vbDsKIAlzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4OwogCXN0cnVjdCBwZXJjcHVfcmVmIHJlZjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yazsKJiM0MzsJc3RydWN0IHJjdV93b3JrIHJlbGVhc2Vfcndvcms7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKJiM0MzsJdTggaWR4OwogCWNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHMKJiM0MzsgKiB0aGUgcmVzZXJ2ZWQgaWQgMCB1bmFsbG9jYXRlZCwgc28gbG9va2luZyBpdCB1cCBuZXZlciBhbGlhc2VzIGEgbGl2ZQomIzQzOyAqIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZSB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW4KJiM0MzsgKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2UKJiM0MzsgKiBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDEKJiM0MzsjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWAomIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTsKJiM0MztzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDsKJiM0MzsKIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7CiAKQEAgLTE4Miw3ICYjNDM7MTk1LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7CiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFjawogICogICAgICAgICAgICAgIGxvZ2ljIGlmIHJlZmVyZW5jZWQgaXMgdW5zZXQuIFNlZSBjb21tZW50cyBpbiB0aGUgc2hyaW5rZXIKICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LgotICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluCiYjNDM7ICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSYjMzk7cyBkYXRhIGlzIGluLgogICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhCiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG8KICAqIGxydSAtIGhhbmRsZSB0byB0aGUgcG9vbCYjMzk7cyBscnUgdXNlZCB0byBldmljdCBwYWdlcy4KQEAgLTE5MSwxOSAmIzQzOzIwNCwzMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkgewogCXN3cF9lbnRyeV90IHN3cGVudHJ5OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJYm9vbCByZWZlcmVuY2VkOwotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwomIzQzOwl1OCBwb29sX2lkeDsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IGxpc3RfaGVhZCBscnU7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgcG9vbCBzdGF5cyBhbGl2ZSBhZnRlciB0aGlzIHJldHVybnMgYmVjYXVzZSBhIHN0b3JlZCBlbnRyeSBob2xkcyBhCiYjNDM7ICogcmVmZXJlbmNlIHRvIGl0cyBwb29sICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcG9vbCA9IHhhX2xvYWQoJmFtcDt6c3dhcF9wb29scywgZW50cnktJmd0O3Bvb2xfaWR4KTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBwb29sOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107CiAKLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovCi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTsKLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spOwogLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovCiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIApAQCAtMjc1LDYgJiM0MzsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpCiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CiAJY2hhciBuYW1lWzM4XTsgLyogJiMzOTt6c3dhcCYjMzk7ICYjNDM7IDMyIGNoYXIgKG1heCkgbnVtICYjNDM7IFwwICovCiAJaW50IHJldCwgY3B1OwomIzQzOwl1MzIgaWQ7CiAKIAlpZiAoIXpzd2FwX2hhc19wb29sICZhbXA7JmFtcDsgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMzIwLDEyICYjNDM7MzQ1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcikKIAkJCSAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0KQogCQlnb3RvIHJlZl9mYWlsOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9vbC0mZ3Q7bGlzdCk7CiYjNDM7CiYjNDM7CXJldCA9IHhhX2FsbG9jX2JoKCZhbXA7enN3YXBfcG9vbHMsICZhbXA7aWQsIHBvb2wsCiYjNDM7CQkJICBYQV9MSU1JVChaU1dBUF9GSVJTVF9QT09MX0lELCBaU1dBUF9NQVhfUE9PTF9JRCksCiYjNDM7CQkJICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJaWYgKHJldCA9PSAtRUJVU1kpCiYjNDM7CQkJcHJfZXJyKCYjMzQ7Y2Fubm90IGFsbG9jYXRlIHBvb2wgaWQgKG1heCAlZCBsaXZlIHBvb2xzKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCAmIzQzOyAxKTsKJiM0MzsJCWdvdG8geGFfZmFpbDsKJiM0MzsJfQomIzQzOwlwb29sLSZndDtpZHggPSBpZDsKIAogCXpzd2FwX3Bvb2xfZGVidWcoJiMzNDtjcmVhdGVkJiMzNDssIHBvb2wpOwogCiAJcmV0dXJuIHBvb2w7CiAKJiM0Mzt4YV9mYWlsOgomIzQzOwlwZXJjcHVfcmVmX2V4aXQoJmFtcDtwb29sLSZndDtyZWYpOwogcmVmX2ZhaWw6CiAJY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCAmYW1wO3Bvb2wtJmd0O25vZGUpOwogCkBAIC0zNzksMTYgJiM0Mzs0MTYsMTQgQEAgc3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKQogCiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpwb29sKSwKLQkJCQkJCXJlbGVhc2Vfd29yayk7Ci0KLQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksCiYjNDM7CQkJCQkgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7CiAKIAkvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqLwogCVdBUk5fT04oIXBlcmNwdV9yZWZfaXNfemVybygmYW1wO3Bvb2wtJmd0O3JlZikpOwogCXBlcmNwdV9yZWZfZXhpdCgmYW1wO3Bvb2wtJmd0O3JlZik7CiAKLQkvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovCiYjNDM7CS8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovCiAJenN3YXBfcG9vbF9kZXN0cm95KHBvb2wpOwogfQogCkBAIC00MDAsMTYgJiM0Mzs0MzUsMTYgQEAgc3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpCiAKIAlwb29sID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpwb29sKSwgcmVmKTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHMpOwogCiAJV0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTsKIAotCWxpc3RfZGVsX3JjdSgmYW1wO3Bvb2wtJmd0O2xpc3QpOwomIzQzOwlfX3hhX2VyYXNlKCZhbXA7enN3YXBfcG9vbHMsIHBvb2wtJmd0O2lkeCk7CiAKLQlJTklUX1dPUksoJmFtcDtwb29sLSZndDtyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKLQlzY2hlZHVsZV93b3JrKCZhbXA7cG9vbC0mZ3Q7cmVsZWFzZV93b3JrKTsKJiM0MzsJSU5JVF9SQ1VfV09SSygmYW1wO3Bvb2wtJmd0O3JlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTsKJiM0MzsJcXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgJmFtcDtwb29sLSZndDtyZWxlYXNlX3J3b3JrKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CXhhX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzKTsKIH0KIAogc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpCkBAIC00MzUsNyAmIzQzOzQ3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKIAotCXBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpOwomIzQzOwlwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCwKJiM0MzsJCQkJICAgICBsb2NrZGVwX2lzX2hlbGQoJmFtcDt6c3dhcF9wb29scy54YV9sb2NrKSk7CiAJV0FSTl9PTkNFKCFwb29sICZhbXA7JmFtcDsgenN3YXBfaGFzX3Bvb2wsCiAJCSAgJiMzNDslczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXG4mIzM0OywgX19mdW5jX18pOwogCkBAIC00NDQsNyAmIzQzOzQ4MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIAogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCkKIHsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmFtcDt6c3dhcF9wb29sc19sb2NrKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3pzd2FwX3Bvb2xzLnhhX2xvY2spOwogCiAJcmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7CiB9CkBAIC00NjQsMTQgJiM0Mzs1MDAsMTUgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KHZvaWQpCiAJcmV0dXJuIHBvb2w7CiB9CiAKLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KJiM0MzsvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovCiBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfZmluZF9nZXQoY2hhciAqY29tcHJlc3NvcikKIHsKIAlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZDsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7enN3YXBfcG9vbHMueGFfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KSB7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7CiAJCWlmIChzdHJjbXAocG9vbC0mZ3Q7dGZtX25hbWUsIGNvbXByZXNzb3IpKQogCQkJY29udGludWU7CiAJCS8qIGlmIHdlIGNhbiYjMzk7dCBnZXQgaXQsIGl0JiMzOTtzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqLwpAQCAtNDk3LDkgJiM0Mzs1MzQsMTUgQEAgdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKQogewogCXN0cnVjdCB6c3dhcF9wb29sICpwb29sOwogCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGlkOwogCiYjNDM7CS8qCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSBpcyByZXF1aXJlZCBoZXJlLCBub3QganVzdCBmb3IgeGFfZm9yX2VhY2goKTogaXQgYWxzbwomIzQzOwkgKiBrZWVwcyBlYWNoIHBvb2wgYWxpdmUgd2hpbGUgaXQgaXMgZGVyZWZlcmVuY2VkLCBzaW5jZSBhIGNvbmN1cnJlbnRseQomIzQzOwkgKiByZXRpcmVkIHBvb2wgaXMgZnJlZWQgdmlhIHF1ZXVlX3JjdV93b3JrKCkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCiYjNDM7CSAqLwogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCAmYW1wO3pzd2FwX3Bvb2xzLCBsaXN0KQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO3pzd2FwX3Bvb2xzLCBpZCwgcG9vbCkKIAkJdG90YWwgJiM0Mzs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLSZndDt6c19wb29sKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNTU2LDIwICYjNDM7NTk5LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwotCiYjNDM7CXhhX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAJcG9vbCA9IHpzd2FwX3Bvb2xfZmluZF9nZXQocyk7CiAJaWYgKHBvb2wpIHsKIAkJenN3YXBfcG9vbF9kZWJ1ZygmIzM0O3VzaW5nIGV4aXN0aW5nJiMzNDssIHBvb2wpOwogCQlXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpOwotCQlsaXN0X2RlbF9yY3UoJmFtcDtwb29sLSZndDtsaXN0KTsKIAl9CiYjNDM7CXhhX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7Ci0KLQlpZiAoIXBvb2wpCiYjNDM7CWlmICghcG9vbCkgewogCQlwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7Ci0JZWxzZSB7CiYjNDM7CX0gZWxzZSB7CiAJCS8qCiAJCSAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKCkKIAkJICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpbgpAQCAtNTg2LDIzICYjNDM7NjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtCiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7enN3YXBfcG9vbHNfbG9jayk7CiYjNDM7CXhhX2xvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAKIAlpZiAoIXJldCkgewogCQlwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpOwotCQlsaXN0X2FkZF9yY3UoJmFtcDtwb29sLSZndDtsaXN0LCAmYW1wO3pzd2FwX3Bvb2xzKTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpOwogCQl6c3dhcF9oYXNfcG9vbCA9IHRydWU7CiAJfSBlbHNlIGlmIChwb29sKSB7Ci0JCS8qCi0JCSAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHMKLQkJICogbGlzdDsgaWYgaXQmIzM5O3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQmIzM5O2xsIGJlIHJlbW92ZWQgYW5kCi0JCSAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2sKLQkJICovCi0JCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cG9vbC0mZ3Q7bGlzdCwgJmFtcDt6c3dhcF9wb29scyk7CiAJCXB1dF9wb29sID0gcG9vbDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYW1wO3pzd2FwX3Bvb2xzX2xvY2spOwomIzQzOwl4YV91bmxvY2tfYmgoJmFtcDt6c3dhcF9wb29scyk7CiAKIAkvKgogCSAqIERyb3AgdGhlIHJlZiBmcm9tIGVpdGhlciB0aGUgb2xkIGN1cnJlbnQgcG9vbCwKQEAgLTc1MSw5ICYjNDM7Nzg1LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSkKICAqLwogc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KQogewomIzQzOwlzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpOwomIzQzOwogCXpzd2FwX2xydV9kZWwoZW50cnkpOwotCXpzX2ZyZWUoZW50cnktJmd0O3Bvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwotCXpzd2FwX3Bvb2xfcHV0KGVudHJ5LSZndDtwb29sKTsKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7CiYjNDM7CQl6c19mcmVlKHBvb2wtJmd0O3pzX3Bvb2wsIGVudHJ5LSZndDtoYW5kbGUpOwomIzQzOwkJenN3YXBfcG9vbF9wdXQocG9vbCk7CiYjNDM7CX0KIAlpZiAoZW50cnktJmd0O29iamNnKSB7CiAJCW9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktJmd0O29iamNnLCBlbnRyeS0mZ3Q7bGVuZ3RoKTsKIAkJb2JqX2Nncm91cF9wdXQoZW50cnktJmd0O29iamNnKTsKQEAgLTkxMCwxMiAmIzQzOzk0OCwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktJmd0O3Bvb2w7CiYjNDM7CXN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0OwogCXN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7CiAJaW50IHJldCA9IDAsIGRsZW47CiAKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcG9vbCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJYWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC0mZ3Q7YWNvbXBfY3R4KTsKIAltdXRleF9sb2NrKCZhbXA7YWNvbXBfY3R4LSZndDttdXRleCk7CiAJenNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC0mZ3Q7enNfcG9vbCwgZW50cnktJmd0O2hhbmRsZSwgaW5wdXQsIGVudHJ5LSZndDtsZW5ndGgpOwpAQCAtOTUxLDcgJiM0Mzs5OTIsNyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcHJfYWxlcnRfcmF0ZWxpbWl0ZWQoJiMzNDtEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS0mZ3Q7JWQpXG4mIzM0OywKIAkJCQkJCXN3cF90eXBlKGVudHJ5LSZndDtzd3BlbnRyeSksCiAJCQkJCQlzd3Bfb2Zmc2V0KGVudHJ5LSZndDtzd3BlbnRyeSksCi0JCQkJCQllbnRyeS0mZ3Q7cG9vbC0mZ3Q7dGZtX25hbWUsCiYjNDM7CQkJCQkJcG9vbC0mZ3Q7dGZtX25hbWUsCiAJCQkJCQllbnRyeS0mZ3Q7bGVuZ3RoLCBkbGVuKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDA5LDYgJiM0MzsxNDUwLDE2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJaWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpCiAJCWdvdG8gY29tcHJlc3NfZmFpbGVkOwogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCBwb29sX2lkeCBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnk6IGNvbXByZXNzaW9uIGhhcwomIzQzOwkgKiBzdWNjZWVkZWQgYW5kIHRoZSBwb29sIGlzIGFscmVhZHkgcGlubmVkIGJ5IHRoaXMgc3RvcmUsIHNvIHRoZSBpZCBpcwomIzQzOwkgKiBmaW5hbC4gIERvaW5nIGl0IGhlcmUgKHJhdGhlciB0aGFuIGFmdGVyIHhhX3N0b3JlKCkpIG1lYW5zIHRoZSBlbnRyeQomIzQzOwkgKiBpcyBuZXZlciBicmllZmx5IHZpc2libGUgd2l0aCBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgb3ZlciBmcm9tIHNsYWIKJiM0MzsJICogcmV1c2UsIHdoaWNoIHpzd2FwX2VudHJ5X3Bvb2woKSB3b3VsZCBvdGhlcndpc2UgcmVzb2x2ZSB0byBhbgomIzQzOwkgKiB1bnJlbGF0ZWQgbGl2ZSBwb29sLgomIzQzOwkgKi8KJiM0MzsJZW50cnktJmd0O3Bvb2xfaWR4ID0gcG9vbC0mZ3Q7aWR4OwomIzQzOwogCW9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSwKIAkJICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksCiAJCSAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7CkBAIC0xNDU0LDcgJiM0MzsxNTA1LDYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nCiAJICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS4KIAkgKi8KLQllbnRyeS0mZ3Q7cG9vbCA9IHBvb2w7CiAJZW50cnktJmd0O3N3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTsKIAllbnRyeS0mZ3Q7b2JqY2cgPSBvYmpjZzsKIAllbnRyeS0mZ3Q7cmVmZXJlbmNlZCA9IHRydWU7CkBAIC0xNzkwLDcgJiM0MzsxODQwLDcgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKQogCXBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7CiAJaWYgKHBvb2wpIHsKIAkJcHJfaW5mbygmIzM0O2xvYWRlZCB1c2luZyBwb29sICVzXG4mIzM0OywgcG9vbC0mZ3Q7dGZtX25hbWUpOwotCQlsaXN0X2FkZCgmYW1wO3Bvb2wtJmd0O2xpc3QsICZhbXA7enN3YXBfcG9vbHMpOwomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7CiAJCXpzd2FwX2hhc19wb29sID0gdHJ1ZTsKIAkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDt6c3dhcF9ldmVyX2VuYWJsZWQpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHpzd2FwIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGUgdXN1YWwgS0FTQU4vTE9DS0RFUCBidWlsZHMuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogY2hhbmdpbmcuCgpBbHJpZ2h0LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgaW4gYG1tL3pzd2FwLmNgLiBGcm9tIGEgcXVpY2sgb3ZlcnZpZXcsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVzdHJ1Y3R1cmluZyBob3cgenN3YXAgcG9vbHMgYXJlIG1hbmFnZWQuIEluc3RlYWQgb2YgdGhlIG9sZCBsaW5rZWQgbGlzdCBhbmQgcG9pbnRlciBzeXN0ZW0sIHdlJiMzOTtyZSBub3cgaW5kZXhpbmcgdGhlIHBvb2xzIHdpdGggYW4geGFycmF5IChgenN3YXBfcG9vbHNgKSBhbmQgdXNpbmcgYW4gaW5kZXggKGB1OCBpZHhgKSB3aXRoaW4gdGhlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlLiBTbywgdGhhdCBgc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7YCBpbiBgenN3YXBfZW50cnlgIGlzIGdvbmUsIHJlcGxhY2VkIGJ5IGB1OCBwb29sX2lkeDtgLiBUaGUgb2xkIGxpc3QgYW5kIHdvcmsgc3RydWN0IGluIHRoZSBgenN3YXBfcG9vbGAgaGF2ZSBhbHNvIGJlZW4gc3RyZWFtbGluZWQsIHN3aXRjaGluZyB0byBhbiBgcmN1X3dvcmtgIGFuZCB0aGUgaW5kZXgsIGB1OCBpZHhgLiBOYXR1cmFsbHksIGFsbCB0aGUgbGlzdCBpdGVyYXRpb24gYW5kIGxvY2tpbmcgYXJlIGdvaW5nIHRoZSB3YXkgb2YgdGhlIGRvZG8sIGJlaW5nIHJlcGxhY2VkIHdpdGggdGhlIHVzdWFsIHhhcnJheSBpZGlvbXM6IGB4YV9hbGxvY19iaGAsIGB4YV9mb3JfZWFjaGAsIGFuZCBgeGFfZXJhc2VgLgoKTm93LCBkaWdnaW5nIGludG8gdGhlIGB6c3dhcF9zdG9yZV9wYWdlYCBjaGFuZ2VzLCBJIHNlZSB0aGF0IGBlbnRyeS0mZ3Q7cG9vbF9pZHggPSBwb29sLSZndDtpZHg7YCBpcyBzZXQgKmJlZm9yZSogdGhlIGB4YV9zdG9yZWAgY2FsbCBpbnRvIGBzd2FwX3pzd2FwX3RyZWVgLCBhbmQgdGhhdCBgZW50cnktJmd0O3Bvb2wgPSBwb29sO2AgaGFzIGJlZW4gcmVtb3ZlZC4gRnVydGhlciwgYHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpYCBpcyBub3cgZG9pbmcgYSByZWFkIGxvY2sgYW5kIGxvYWRzIGEgcG9vbCBmcm9tIHRoZSBgenN3YXBfcG9vbHNgIGFycmF5IHVzaW5nIHRoZSBzdG9yZWQgaW5kZXguCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiBob3cgYHpzd2FwX2VudHJ5YCBpcyBhbGxvY2F0ZWQgYW5kIHVzZWQgdG8gYXNzZXNzIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGFsbG9jYXRpb24gYW5kIHVzYWdlIG9mIHRoZXNlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlcy4gTGV0IG1lIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvY2AgYW5kIGhvdyBgenN3YXBfc3RvcmVfcGFnZWAgaW50ZXJhY3RzIHdpdGggdGhhdC4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgSSYjMzk7bGwgYmUgYWJsZSB0byBkZWNpZGUgd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29kZSBjaGFuZ2UgdGhhdCYjMzk7cyBiZW5pZ24gZW5vdWdoIGZvciByZWd1bGFyIHRlc3Rpbmcgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgbW9yZSByaWdvcm91cyBLTVNBTi1mb2N1c2VkIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX2VudHJ5X2NhY2hlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTc1MT12b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0venN3YXAuYy03NjUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm1tL3pzd2FwLmM6NzY2OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqenN3YXBfZW50cnlfY2FjaGU7XG5tbS96c3dhcC5jLTc2Ny1cbm1tL3pzd2FwLmM6NzY4OnN0YXRpYyBzdHJ1Y3QgenN3YXBfZW50cnkgKnpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKGdmcF90IGdmcCwgaW50IG5pZClcbm1tL3pzd2FwLmMtNzY5LXtcbm1tL3pzd2FwLmMtNzcwLVx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcbm1tL3pzd2FwLmM6NzcxOlx0ZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoenN3YXBfZW50cnlfY2FjaGUsIGdmcCwgbmlkKTtcbm1tL3pzd2FwLmMtNzcyLVx0aWYgKCFlbnRyeSlcbi0tXG5tbS96c3dhcC5jLTc3Ni1cbm1tL3pzd2FwLmM6Nzc3OnN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbm1tL3pzd2FwLmMtNzc4LXtcbm1tL3pzd2FwLmM6Nzc5Olx0a21lbV9jYWNoZV9mcmVlKHpzd2FwX2VudHJ5X2NhY2hlLCBlbnRyeSk7XG5tbS96c3dhcC5jLTc4MC19XG4tLVxubW0venN3YXAuYz03ODY9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtODAwLVx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmM6ODAxOlx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTgwMi1cdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xuLS1cbm1tL3pzd2FwLmM9MTQzNj1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQ0My1cdC8qIGFsbG9jYXRlIGVudHJ5ICovXG5tbS96c3dhcC5jOjE0NDQ6XHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbm1tL3pzd2FwLmMtMTQ0NS1cdGlmICghZW50cnkpIHtcbi0tXG5tbS96c3dhcC5jLTE1MjAtY29tcHJlc3NfZmFpbGVkOlxubW0venN3YXAuYzoxNTIxOlx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jLTE1MjItXHRyZXR1cm4gZmFsc2U7XG4tLVxubW0venN3YXAuYz0xODA4PXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbi0tXG5tbS96c3dhcC5jLTE4MTItXG5tbS96c3dhcC5jOjE4MTM6XHR6c3dhcF9lbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUoenN3YXBfZW50cnksIDApO1xubW0venN3YXAuYzoxODE0Olx0aWYgKCF6c3dhcF9lbnRyeV9jYWNoZSkge1xubW0venN3YXAuYy0xODE1LVx0XHRwcl9lcnIoXCYjMzQ7ZW50cnkgY2FjaGUgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS96c3dhcC5jLTE4NjItaHBfZmFpbDpcbm1tL3pzd2FwLmM6MTg2MzpcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XG5tbS96c3dhcC5jLTE4NjQtY2FjaGVfZmFpbDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIERlZXAgaW50byBgenN3YXBfc3RvcmVfcGFnZWAqKgoKT2theSwgdGltZSB0byByZWFsbHkgZGlnIGludG8gYHpzd2FwX3N0b3JlX3BhZ2VgLiBJJiMzOTttIGdvaW5nIHRvIGxhc2VyIGluIG9uIHRoYXQgc2VjdGlvbiBhcm91bmQgbGluZSAxNDM2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpyZWFsbHkqIGhhcHBlbmluZyB0aGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSB6c3dhcCBwcm9jZXNzLCBhbmQgSSB3YW50IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBncmFzcCBvZiB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgYmVmb3JlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDM1Olx0XG4xNDM2Olx0c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbjE0Mzc6XHRcdFx0XHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjE0Mzg6XHRcdFx0XHQgICAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuMTQzOTpcdHtcbjE0NDA6XHRcdHN3cF9lbnRyeV90IHBhZ2Vfc3dwZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XG4xNDQxOlx0XHRzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCAqb2xkO1xuMTQ0MjpcdFxuMTQ0MzpcdFx0LyogYWxsb2NhdGUgZW50cnkgKi9cbjE0NDQ6XHRcdGVudHJ5ID0genN3YXBfZW50cnlfY2FjaGVfYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZV90b19uaWQocGFnZSkpO1xuMTQ0NTpcdFx0aWYgKCFlbnRyeSkge1xuMTQ0NjpcdFx0XHR6c3dhcF9yZWplY3Rfa21lbWNhY2hlX2ZhaWwmIzQzOyYjNDM7O1xuMTQ0NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNDQ4Olx0XHR9XG4xNDQ5Olx0XG4xNDUwOlx0XHRpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSlcbjE0NTE6XHRcdFx0Z290byBjb21wcmVzc19mYWlsZWQ7XG4xNDUyOlx0XG4xNDUzOlx0XHQvKlxuMTQ1NDpcdFx0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeTogY29tcHJlc3Npb24gaGFzXG4xNDU1Olx0XHQgKiBzdWNjZWVkZWQgYW5kIHRoZSBwb29sIGlzIGFscmVhZHkgcGlubmVkIGJ5IHRoaXMgc3RvcmUsIHNvIHRoZSBpZCBpc1xuMTQ1NjpcdFx0ICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnlcbjE0NTc6XHRcdCAqIGlzIG5ldmVyIGJyaWVmbHkgdmlzaWJsZSB3aXRoIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBvdmVyIGZyb20gc2xhYlxuMTQ1ODpcdFx0ICogcmV1c2UsIHdoaWNoIHpzd2FwX2VudHJ5X3Bvb2woKSB3b3VsZCBvdGhlcndpc2UgcmVzb2x2ZSB0byBhblxuMTQ1OTpcdFx0ICogdW5yZWxhdGVkIGxpdmUgcG9vbC5cbjE0NjA6XHRcdCAqL1xuMTQ2MTpcdFx0ZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtcbjE0NjI6XHRcbjE0NjM6XHRcdG9sZCA9IHhhX3N0b3JlKHN3YXBfenN3YXBfdHJlZShwYWdlX3N3cGVudHJ5KSxcbjE0NjQ6XHRcdFx0ICAgICAgIHN3cF9vZmZzZXQocGFnZV9zd3BlbnRyeSksXG4xNDY1Olx0XHRcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XG4xNDY2Olx0XHRpZiAoeGFfaXNfZXJyKG9sZCkpIHtcbjE0Njc6XHRcdFx0aW50IGVyciA9IHhhX2VycihvbGQpO1xuMTQ2ODpcdFxuMTQ2OTpcdFx0XHRXQVJOX09OQ0UoZXJyICE9IC1FTk9NRU0sIFwmIzM0O3VuZXhwZWN0ZWQgeGFycmF5IGVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbjE0NzA6XHRcdFx0enN3YXBfcmVqZWN0X2FsbG9jX2ZhaWwmIzQzOyYjNDM7O1xuMTQ3MTpcdFx0XHRnb3RvIHN0b3JlX2ZhaWxlZDtcbjE0NzI6XHRcdH1cbjE0NzM6XHRcbjE0NzQ6XHRcdC8qXG4xNDc1Olx0XHQgKiBXZSBtYXkgaGF2ZSBoYWQgYW4gZXhpc3RpbmcgZW50cnkgdGhhdCBiZWNhbWUgc3RhbGUgd2hlblxuMTQ3NjpcdFx0ICogdGhlIGZvbGlvIHdhcyByZWRpcnRpZWQgYW5kIG5vdyB0aGUgbmV3IHZlcnNpb24gaXMgYmVpbmdcbjE0Nzc6XHRcdCAqIHN3YXBwZWQgb3V0LiBHZXQgcmlkIG9mIHRoZSBvbGQuXG4xNDc4Olx0XHQgKi9cbjE0Nzk6XHRcdGlmIChvbGQpXG4xNDgwOlx0XHRcdHpzd2FwX2VudHJ5X2ZyZWUob2xkKTtcbjE0ODE6XHRcbjE0ODI6XHRcdC8qXG4xNDgzOlx0XHQgKiBUaGUgZW50cnkgaXMgc3VjY2Vzc2Z1bGx5IGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiB0aGUgdHJlZSwgdGhlcmUgaXNcbjE0ODQ6XHRcdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcbjE0ODU6XHRcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxuMTQ4NjpcdFx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXG4xNDg3Olx0XHQgKiB3aGVuIHRoZSBlbnRyeSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuXG4xNDg4Olx0XHQgKi9cbjE0ODk6XHRcdHpzd2FwX3Bvb2xfZ2V0KHBvb2wpO1xuMTQ5MDpcdFx0aWYgKG9iamNnKSB7XG4xNDkxOlx0XHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbjE0OTI6XHRcdFx0b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAob2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xNDkzOlx0XHR9XG4xNDk0Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbjE0OTU6XHRcdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxuMTQ5NjpcdFx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbjE0OTc6XHRcbjE0OTg6XHRcdC8qXG4xNDk5Olx0XHQgKiBXZSBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBlbnRyeSB3aGlsZSBpdCYjMzk7cyBhbHJlYWR5IGluIHhhcnJheS5cbjE1MDA6XHRcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlOlxuMTUwMTpcdFx0ICpcbjE1MDI6XHRcdCAqIDEuIENvbmN1cnJlbnQgc3RvcmVzIGFuZCBpbnZhbGlkYXRpb25zIGFyZSBleGNsdWRlZCBieSBmb2xpbyBsb2NrLlxuMTUwMzpcdFx0ICpcbjE1MDQ6XHRcdCAqIDIuIFdyaXRlYmFjayBpcyBleGNsdWRlZCBieSB0aGUgZW50cnkgbm90IGJlaW5nIG9uIHRoZSBMUlUgeWV0LlxuMTUwNTpcdFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuMTUwNjpcdFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbjE1MDc6XHRcdCAqL1xuMTUwODpcdFx0ZW50cnktXHUwMDNlc3dwZW50cnkgPSBwYWdlX3N3cGVudHJ5O1xuMTUwOTpcdFx0ZW50cnktXHUwMDNlb2JqY2cgPSBvYmpjZztcbjE1MTA6XHRcdGVudHJ5LVx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xuMTUxMTpcdFx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCkge1xuMTUxMjpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZlbnRyeS1cdTAwM2VscnUpO1xuMTUxMzpcdFx0XHR6c3dhcF9scnVfYWRkKGVudHJ5KTtcbjE1MTQ6XHRcdH1cbjE1MTU6XHRcbjE1MTY6XHRcdHJldHVybiB0cnVlO1xuMTUxNzpcdFxuMTUxODpcdHN0b3JlX2ZhaWxlZDpcbjE1MTk6XHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuMTUyMDpcdGNvbXByZXNzX2ZhaWxlZDpcbjE1MjE6XHRcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xuMTUyMjpcdFx0cmV0dXJuIGZhbHNlO1xuMTUyMzpcdH1cbjE1MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgenN3YXBfY29tcHJlc3NgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtZW50YWwgY2hlY2tsaXN0IGhhcyBsZWQgbWUgdG8gYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHpzd2FwX2NvbXByZXNzYC4gVGhpcyBpcyBhIGNydWNpYWwgc2V0dGluZyB3aGVuIGNvbnNpZGVyaW5nIHpzd2FwIGJlaGF2aW9yLCByaWdodD8gSXQmIzM5O3Mgb25lIG9mIHRob3NlIHRoaW5ncyB5b3UgY2FuJiMzOTt0IGp1c3QgZ2xvc3Mgb3Zlci4gSXQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgZWZmaWNpZW5jeSBvZiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgYnkgenN3YXAsIGFuZCB0aHVzLCBpdHMgZWZmZWN0aXZlbmVzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgY2hvc2VuIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBvbiBtZW1vcnkgdXNhZ2UuIEZyb20gaGVyZSBJIG5lZWQgdG8gY29uc2lkZXIgcGVyZm9ybWFuY2UgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB3b3JrbG9hZC4gVGhlIGltcGxpY2F0aW9ucyBvbiBDUFUgb3ZlcmhlYWQgYXJlIGFsc28gaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF9jb21wcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFx1MDAyNnpzd2FwX2VuYWJsZWQsIDA2NDQpO1xuLS1cbm1tL3pzd2FwLmMtMTAwLS8qIENyeXB0byBjb21wcmVzc29yIHRvIHVzZSAqL1xubW0venN3YXAuYzoxMDE6c3RhdGljIGNoYXIgKnpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xubW0venN3YXAuYzoxMDI6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXG5tbS96c3dhcC5jLTEwMy1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7XG5tbS96c3dhcC5jOjEwNDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMgPSB7XG5tbS96c3dhcC5jOjEwNTpcdC5zZXQgPVx0XHR6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldCxcbm1tL3pzd2FwLmMtMTA2LVx0LmdldCA9XHRcdHBhcmFtX2dldF9jaGFycCxcbi0tXG5tbS96c3dhcC5jLTEwOC19O1xubW0venN3YXAuYzoxMDk6bW9kdWxlX3BhcmFtX2NiKGNvbXByZXNzb3IsIFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxubW0venN3YXAuYzoxMTA6XHRcdFx1MDAyNnpzd2FwX2NvbXByZXNzb3IsIDA2NDQpO1xubW0venN3YXAuYy0xMTEtXG4tLVxubW0venN3YXAuYz0zODE9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXG5tbS96c3dhcC5jLTM4Mi17XG5tbS96c3dhcC5jOjM4MzpcdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcdTAwMjZcdTAwMjZcbm1tL3pzd2FwLmM6Mzg0Olx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xubW0venN3YXAuYy0zODUtXHRcdHByX2VycihcJiMzNDtjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXG5cJiMzNDssXG5tbS96c3dhcC5jOjM4NjpcdFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xubW0venN3YXAuYzozODc6XHRcdHBhcmFtX2ZyZWVfY2hhcnAoXHUwMDI2enN3YXBfY29tcHJlc3Nvcik7XG5tbS96c3dhcC5jOjM4ODpcdFx0enN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jLTM4OS1cdH1cbi0tXG5tbS96c3dhcC5jLTM5MS1cdC8qIERlZmF1bHQgY29tcHJlc3NvciBzaG91bGQgYmUgYXZhaWxhYmxlLiBLY29uZmlnIGJ1Zz8gKi9cbm1tL3pzd2FwLmM6MzkyOlx0aWYgKFdBUk5fT05fT05DRSghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSkpIHtcbm1tL3pzd2FwLmM6MzkzOlx0XHR6c3dhcF9jb21wcmVzc29yID0gWlNXQVBfUEFSQU1fVU5TRVQ7XG5tbS96c3dhcC5jLTM5NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0venN3YXAuYy0zOTYtXG5tbS96c3dhcC5jOjM5NzpcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcbm1tL3pzd2FwLmMtMzk4LX1cbi0tXG5tbS96c3dhcC5jPTU1Mj1zdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcbi0tXG5tbS96c3dhcC5jLTU3MC1cbm1tL3pzd2FwLmM6NTcxOnN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbm1tL3pzd2FwLmMtNTcyLXtcbi0tXG5tbS96c3dhcC5jPTgwOD1zdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG4tLVxubW0venN3YXAuYy04NjQtXG5tbS96c3dhcC5jOjg2NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtODY2LVx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuLS1cbm1tL3pzd2FwLmM9MTQzNj1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQ0OS1cbm1tL3pzd2FwLmM6MTQ1MDpcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxubW0venN3YXAuYy0xNDUxLVx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHpzd2FwX2NvbXByZXNzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYHpzd2FwX2NvbXByZXNzYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBjb21wcmVzc2lvbiBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBob3cgaXQmIzM5O3Mgb3B0aW1pemVkIGZvciB0aGUgc3BlY2lmaWMgY29uc3RyYWludHMgb2YgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGZvciBzd2FwLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkIHRvIGVmZmljaWVudGx5IG1hbmFnZSB0aGUgY29tcHJlc3Npb24gY29udGV4dCwgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYW5kIHRoZWlyIHNwZWNpZmljIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZXJyb3JzIG9yIGNvcm5lciBjYXNlcy4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBzcGVjaWZpYyBudWFuY2VzIGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHdpdGggbXkgd29yayBvbi4uLiBbY29udGludWUgd2l0aCB5b3VyIHJlbGV2YW50IHdvcmtdLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2NTpcdHN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIDg2NjpcdFx0XHRcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuIDg2NzpcdHtcbiA4Njg6XHRcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gODY5Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXQsIG91dHB1dDtcbiA4NzA6XHRcdGludCBjb21wX3JldCA9IDAsIGFsbG9jX3JldCA9IDA7XG4gODcxOlx0XHR1bnNpZ25lZCBpbnQgZGxlbiA9IFBBR0VfU0laRTtcbiA4NzI6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIDg3MzpcdFx0Z2ZwX3QgZ2ZwO1xuIDg3NDpcdFx0dTggKmRzdDtcbiA4NzU6XHRcdGJvb2wgbWFwcGVkID0gZmFsc2U7XG4gODc2Olx0XG4gODc3Olx0XHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gODc4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gODc5Olx0XG4gODgwOlx0XHRkc3QgPSBhY29tcF9jdHgtXHUwMDNlYnVmZmVyO1xuIDg4MTpcdFx0c2dfaW5pdF90YWJsZShcdTAwMjZpbnB1dCwgMSk7XG4gODgyOlx0XHRzZ19zZXRfcGFnZShcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcbiA4ODM6XHRcbiA4ODQ6XHRcdHNnX2luaXRfb25lKFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xuIDg4NTpcdFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cdTAwM2VyZXEsIFx1MDAyNmlucHV0LCBcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XG4gODg2Olx0XG4gODg3Olx0XHQvKlxuIDg4ODpcdFx0ICogaXQgbWF5YmUgbG9va3MgYSBsaXR0bGUgYml0IHNpbGx5IHRoYXQgd2Ugc2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCxcbiA4ODk6XHRcdCAqIHRoZW4gd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24gc3luY2hyb25vdXNseS4gVGhpcyBtYWtlcyB0aGUgcHJvY2VzcyBsb29rXG4gODkwOlx0XHQgKiBzeW5jaHJvbm91cyBpbiBmYWN0LlxuIDg5MTpcdFx0ICogVGhlb3JldGljYWxseSwgYWNvbXAgc3VwcG9ydHMgdXNlcnMgc2VuZCBtdWx0aXBsZSBhY29tcCByZXF1ZXN0cyBpbiBvbmVcbiA4OTI6XHRcdCAqIGFjb21wIGluc3RhbmNlLCB0aGVuIGdldCB0aG9zZSByZXF1ZXN0cyBkb25lIHNpbXVsdGFuZW91c2x5LiBidXQgaW4gdGhpc1xuIDg5MzpcdFx0ICogY2FzZSwgenN3YXAgYWN0dWFsbHkgZG9lcyBzdG9yZSBhbmQgbG9hZCBwYWdlIGJ5IHBhZ2UsIHRoZXJlIGlzIG5vXG4gODk0Olx0XHQgKiBleGlzdGluZyBtZXRob2QgdG8gc2VuZCB0aGUgc2Vjb25kIHBhZ2UgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGRvbmVcbiA4OTU6XHRcdCAqIGluIG9uZSB0aHJlYWQgZG9pbmcgenN3YXAuXG4gODk2Olx0XHQgKiBidXQgaW4gZGlmZmVyZW50IHRocmVhZHMgcnVubmluZyBvbiBkaWZmZXJlbnQgY3B1LCB3ZSBoYXZlIGRpZmZlcmVudFxuIDg5NzpcdFx0ICogYWNvbXAgaW5zdGFuY2UsIHNvIG11bHRpcGxlIHRocmVhZHMgY2FuIGRvIChkZSljb21wcmVzc2lvbiBpbiBwYXJhbGxlbC5cbiA4OTg6XHRcdCAqL1xuIDg5OTpcdFx0Y29tcF9yZXQgPSBjcnlwdG9fd2FpdF9yZXEoY3J5cHRvX2Fjb21wX2NvbXByZXNzKGFjb21wX2N0eC1cdTAwM2VyZXEpLCBcdTAwMjZhY29tcF9jdHgtXHUwMDNld2FpdCk7XG4gOTAwOlx0XHRkbGVuID0gYWNvbXBfY3R4LVx1MDAzZXJlcS1cdTAwM2VkbGVuO1xuIDkwMTpcdFxuIDkwMjpcdFx0LypcbiA5MDM6XHRcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxuIDkwNDpcdFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxuIDkwNTpcdFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XG4gOTA2Olx0XHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xuIDkwNzpcdFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXHUwMDNlPSBQQUdFX1NJWkUpIHtcbiA5MTA6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDkxMTpcdFx0XHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXG4gOTEyOlx0XHRcdFx0XHRcdGZvbGlvX21lbWNnKHBhZ2VfZm9saW8ocGFnZSkpKSkge1xuIDkxMzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDkxNDpcdFx0XHRcdGNvbXBfcmV0ID0gY29tcF9yZXQgPyBjb21wX3JldCA6IC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgenN3YXBfY29tcHJlc3NgIGZ1bmN0aW9uLiBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCB6c3dhcCBjb25jZXB0LCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjb21wcmVzc2lvbiBhbGdvcml0aG0gZGV0YWlscyBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgenN3YXAgZnJhbWV3b3JrLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbXByZXNzaW9uIG9wZXJhdGlvbiBpdHNlbGYgLSB0aGUgZGF0YSBoYW5kbGluZywgZXJyb3IgY2hlY2tpbmcsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB6c3dhcC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGNvbW1vbiBjb21wcmVzc2lvbiBsaWJyYXJpZXMgYW5kIHdhbnQgdG8gdW5kZXJzdGFuZCBhbnkgenN3YXAtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBjb25maWd1cmF0aW9ucyB1c2VkLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNTpcdFx0XHRcdGdvdG8gdW5sb2NrO1xuIDkxNjpcdFx0XHR9XG4gOTE3Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDkxODpcdFx0XHRjb21wX3JldCA9IDA7XG4gOTE5Olx0XHRcdGRsZW4gPSBQQUdFX1NJWkU7XG4gOTIwOlx0XHRcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiA5MjE6XHRcdFx0bWFwcGVkID0gdHJ1ZTtcbiA5MjI6XHRcdH1cbiA5MjM6XHRcbiA5MjQ6XHRcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XG4gOTI1Olx0XHRoYW5kbGUgPSB6c19tYWxsb2MocG9vbC1cdTAwM2V6c19wb29sLCBkbGVuLCBnZnAsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbiA5MjY6XHRcdGlmIChJU19FUlJfVkFMVUUoaGFuZGxlKSkge1xuIDkyNzpcdFx0XHRhbGxvY19yZXQgPSBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcbiA5Mjg6XHRcdFx0Z290byB1bmxvY2s7XG4gOTI5Olx0XHR9XG4gOTMwOlx0XG4gOTMxOlx0XHR6c19vYmpfd3JpdGUocG9vbC1cdTAwM2V6c19wb29sLCBoYW5kbGUsIGRzdCwgZGxlbik7XG4gOTMyOlx0XHRlbnRyeS1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4gOTMzOlx0XHRlbnRyeS1cdTAwM2VsZW5ndGggPSBkbGVuO1xuIDkzNDpcdFxuIDkzNTpcdHVubG9jazpcbiA5MzY6XHRcdGlmIChtYXBwZWQpXG4gOTM3Olx0XHRcdGt1bm1hcF9sb2NhbChkc3QpO1xuIDkzODpcdFx0aWYgKGNvbXBfcmV0ID09IC1FTk9TUEMgfHwgYWxsb2NfcmV0ID09IC1FTk9TUEMpXG4gOTM5Olx0XHRcdHpzd2FwX3JlamVjdF9jb21wcmVzc19wb29yJiM0MzsmIzQzOztcbiA5NDA6XHRcdGVsc2UgaWYgKGNvbXBfcmV0KVxuIDk0MTpcdFx0XHR6c3dhcF9yZWplY3RfY29tcHJlc3NfZmFpbCYjNDM7JiM0Mzs7XG4gOTQyOlx0XHRlbHNlIGlmIChhbGxvY19yZXQpXG4gOTQzOlx0XHRcdHpzd2FwX3JlamVjdF9hbGxvY19mYWlsJiM0MzsmIzQzOztcbiA5NDQ6XHRcbiA5NDU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhY29tcF9jdHgtXHUwMDNlbXV0ZXgpO1xuIDk0NjpcdFx0cmV0dXJuIGNvbXBfcmV0ID09IDAgXHUwMDI2XHUwMDI2IGFsbG9jX3JldCA9PSAwO1xuIDk0NzpcdH1cbiA5NDg6XHRcbiA5NDk6XHRzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gOTUwOlx0e1xuIDk1MTpcdFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbiA5NTI6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXG4gOTUzOlx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xuIDk1NDpcdFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDkKCQkJCQkJCW91dHB1dDogMjU4CgkJCQkJCQl0aG91Z2h0czogOTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnN3YXAgUG9vbCBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhvdyB6c3dhcCBtYW5hZ2VzIGl0cyBwb29scyBhbmQgYXNzb2NpYXRlcyB0aGVtIHdpdGggZW50cmllcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIHNvbGlkIHJlZmFjdG9yIHdpdGggYSBjbGVhciBtZW1vcnkgb3B0aW1pemF0aW9uIGZvY3VzLgoKSSBzZWUgdGhhdCB0aGUgY29yZSBjaGFuZ2UgaXMgbW92aW5nIGZyb20gYSBsaW5rZWQgbGlzdCBvZiBgenN3YXBfcG9vbGAgc3RydWN0dXJlcyB3aXRoIGRpcmVjdCBwb2ludGVycyBpbiBgenN3YXBfZW50cnlgIHRvIGFuIFhBcnJheS1iYXNlZCBzeXN0ZW0gdXNpbmcgYSBgdTggcG9vbF9pZHhgLiBUaGUgaW1tZWRpYXRlIHdpbiBpcyBhIDctYnl0ZSBzYXZpbmcgcGVyIGB6c3dhcF9lbnRyeWAgZW50cnkgb24gNjQtYml0IHN5c3RlbXMsIHdoaWNoLCBtdWx0aXBsaWVkIGFjcm9zcyBtaWxsaW9ucyBvZiBlbnRyaWVzLCB3aWxsIG1ha2UgYSB0YW5naWJsZSBkaWZmZXJlbmNlLiBUaGUgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBYQXJyYXkgbG9va3VwIHdpdGggYHpzd2FwX2VudHJ5X3Bvb2woKWAgaXMgYSBzb3VuZCBkZXNpZ24gY2hvaWNlLCBhbmQgdGhlIHNoaWZ0IHRvIFJDVSB3b3JrIHF1ZXVlcyBmb3IgcG9vbCBkZXN0cnVjdGlvbiBpcyBjbGVhbmVyIHRoYW4gYHNjaGVkdWxlX3dvcmtgIGFuZCBgc3luY2hyb25pemVfcmN1KClgLiBUaGUgYFdBUk5fT05gIGNoZWNrcyBhcmUgYSBnb29kIHNhZmV0eSBuZXQgZm9yIGFueSBsb29rdXAgZmFpbHVyZXMuCgpMb29raW5nIGNsb3NlbHkgYXQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBpdCBhbGwgY2hlY2tzIG91dC4gVGhlIGBlbnRyeS0mZ3Q7cG9vbF9pZHggPSBwb29sLSZndDtpZHg7YCBhc3NpZ25tZW50IGhhcHBlbnMgKmJlZm9yZSogdGhlIGVudHJ5IGlzIHN0b3JlZCBpbiB0aGUgWEFycmF5LCBhbmQgdGhlIHBvb2wmIzM5O3MgaW5kZXggaXMgYXNzaWduZWQgdXBvbiBjcmVhdGlvbiwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhbmQgbm8gY29waWVzIHRvIHVzZXJzcGFjZSBvY2N1ciwgYXZvaWRpbmcgaW5mb2xlYWtzLiBUaGUgc2VxdWVuY2UgaW4gYHpzd2FwX3N0b3JlX3BhZ2UoKWAgbG9va3MgZmluZSB0b287IGV2ZXJ5IGZpZWxkIGluIGB6c3dhcF9lbnRyeWAgZ2V0cyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIFhBcnJheSB3cml0ZS4KCkkgd2VudCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLTVNBTiBjcml0ZXJpYSwgYW5kIGZyb20gd2hhdCBJIGNhbiBzZWUsIG5vbmUgb2YgdGhlIHR5cGljYWwgJiMzNDtOZWVkc0tNU0FOPXRydWUmIzM0OyBjb25kaXRpb25zIGFwcGx5IGhlcmUuIFRoZXJlJiMzOTtzIG5vIHBhc3Npbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgY3JpdGVyaWEgZm9yICYjMzQ7TmVlZHNLTVNBTj1mYWxzZSYjMzQ7IGFsbCBmaXQgYXMgd2VsbDsgdGhlIHByaW1hcnkgcmlza3MgaGVyZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIG9mIGFueSBjb25jdXJyZW50IGNvZGU6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGlzc3VlcywgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZ2VuZXJhbCBkZWJ1Z2dpbmcgdG9vbHMgd2lsbCBoYW5kbGUgdGhvc2UuCgpUaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgc291bmQuIE5vIEtNU0FOIGZsYWdzIGFyZSBuZWVkZWQuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHpzd2FwIHBvb2wgbWFuYWdlbWVudCBieSByZXBsYWNpbmcgdGhlIGxpbmtlZCBsaXN0IG9mIHBvb2xzIGFuZCA4LWJ5dGUgcG9vbCBwb2ludGVyIGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIHdpdGggYW4gWEFycmF5IGxvb2t1cCB0YWJsZSBhbmQgYSAxLWJ5dGUgcG9vbCBpbmRleCAoYHBvb2xfaWR4YCksIGFsb25nc2lkZSB0cmFuc2l0aW9uaW5nIHBvb2wgY2xlYW51cCB0byBgcmN1X3dvcmtgLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXG4yLiBVc2VyLXNwYWNlIEluZm8gTGVha3M6IE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgc3lzY2FsbCByZXR1cm4sIGV0Yy4pLlxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgcG9vbCBtYW5hZ2VtZW50IGJ5IHJlcGxhY2luZyB0aGUgbGlua2VkIGxpc3Qgb2YgcG9vbHMgYW5kIDgtYnl0ZSBwb29sIHBvaW50ZXIgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgd2l0aCBhbiBYQXJyYXkgbG9va3VwIHRhYmxlIGFuZCBhIDEtYnl0ZSBwb29sIGluZGV4IChgcG9vbF9pZHhgKSwgYWxvbmdzaWRlIHRyYW5zaXRpb25pbmcgcG9vbCBjbGVhbnVwIHRvIGByY3Vfd29ya2AuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgZmllbGRzIGluIGBzdHJ1Y3QgenN3YXBfZW50cnlgIGFuZCBgc3RydWN0IHpzd2FwX3Bvb2xgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIHB1Ymxpc2hlZCBvciBhY2Nlc3NlZC4gYHBvb2xfaWR4YCBpcyBzZXQgdXBvbiBjb21wcmVzc2lvbiBzdWNjZXNzIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeSBpbnRvIHRoZSBzd2FwIFhBcnJheS5cbjIuIFVzZXItc3BhY2UgSW5mbyBMZWFrczogTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBzeXNjYWxsIHJldHVybiwgZXRjLikuXG4zLiBSZWxldmFudCBCdWcgQ2xhc3NlczogQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGxpZmV0aW1lL2dyYWNlLXBlcmlvZCB0cmFja2luZywgWEFycmF5IGluZGV4aW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NDcuMzEwNDE1MjU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzMzk2NTU0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfdG90YWxfcGFnZXNcIixcbiAgICBcInpzd2FwX2VudHJ5X2ZyZWVcIixcbiAgICBcInpzd2FwX2RlY29tcHJlc3NcIixcbiAgICBcInpzd2FwX3N0b3JlX3BhZ2VcIixcbiAgICBcIl9fenN3YXBfcG9vbF9lbXB0eVwiLFxuICAgIFwiX196c3dhcF9wb29sX3JlbGVhc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBwb29sIG1hbmFnZW1lbnQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rZWQgbGlzdCBvZiBwb29scyBhbmQgOC1ieXRlIHBvb2wgcG9pbnRlciBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCB3aXRoIGFuIFhBcnJheSBsb29rdXAgdGFibGUgYW5kIGEgMS1ieXRlIHBvb2wgaW5kZXggKGBwb29sX2lkeGApLCBhbG9uZ3NpZGUgdHJhbnNpdGlvbmluZyBwb29sIGNsZWFudXAgdG8gYHJjdV93b3JrYC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXFxuMi4gVXNlci1zcGFjZSBJbmZvIExlYWtzOiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIHN5c2NhbGwgcmV0dXJuLCBldGMuKS5cXG4zLiBSZWxldmFudCBCdWcgQ2xhc3NlczogQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGxpZmV0aW1lL2dyYWNlLXBlcmlvZCB0cmFja2luZywgWEFycmF5IGluZGV4aW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGRpcmVjdCBwb29sIHBvaW50ZXJzIGluIHN0cnVjdCB6c3dhcF9lbnRyeSB3aXRoIHBvb2wgaW5kaWNlcyB0cmFja2VkIGluIGFuIFhBcnJheS4gSXQgdXBkYXRlcyBSQ1UtcHJvdGVjdGVkIHBvb2wgbG9va3VwcywgY2hhbmdlcyB0ZWFyZG93biB0byB1c2UgcmN1X3dvcmssIGFkanVzdHMgY29uY3VycmVuY3kgbG9ja2luZyB3aXRoIFhBcnJheSBsb2NrcywgYW5kIG1vZGlmaWVzIHRoZSBzdG9yZS9kZWNvbXByZXNzL2ZyZWUvd3JpdGViYWNrIGxpZmVjeWNsZSBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjQ3LjMxMDQyMDU1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwMjE1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDA0MWZlZGZhMmVjYWU2MDI2NTVjZGQxZmJiYmVlNDk3NTg0ZWM5YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDIzOjQ3OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggZjNhZTNjODFlNDhlYS4uMzFjZjBlZjQzZDIzNiAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0zNCw2ICszNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93cml0ZWJhY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvenNtYWxsb2MuaFxcdTAwM2VcXG4gXFxuQEAgLTE1NCwxMiArMTU1LDI0IEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcXG4gXFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XFxuIFxcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4IF9fcGVyY3B1ICphY29tcF9jdHg7XFxuIFxcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrO1xcbitcXHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcXG4gXFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcXG4rXFx0dTggaWR4O1xcbiBcXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xcbiB9O1xcbiBcXG4rLypcXG4rICogTGl2ZSBwb29scyBrZXllZCBieSBpZCAoMS4uWlNXQVBfTUFYX1BPT0xfSUQpLiAgWEFfRkxBR1NfQUxMT0MxIGtlZXBzXFxuKyAqIHRoZSByZXNlcnZlZCBpZCAwIHVuYWxsb2NhdGVkLCBzbyBsb29raW5nIGl0IHVwIG5ldmVyIGFsaWFzZXMgYSBsaXZlXFxuKyAqIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZSB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW5cXG4rICogZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tIGEgcGVyY3B1X3JlZiByZWxlYXNlXFxuKyAqIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cXG4rICovXFxuKyNkZWZpbmUgWlNXQVBfRklSU1RfUE9PTF9JRCAxXFxuKyNkZWZpbmUgWlNXQVBfTUFYX1BPT0xfSUQgVThfTUFYXFxuK3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTtcXG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sIF9fcmN1ICp6c3dhcF9jdXJyZW50X3Bvb2w7XFxuK1xcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXFxuIHN0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgenN3YXBfbGlzdF9scnU7XFxuIFxcbkBAIC0xODIsNyArMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XFxuICAqICAgICAgICAgICAgICB3cml0ZWJhY2sgbG9naWMuIFRoZSBlbnRyeSBpcyBvbmx5IHJlY2xhaW1lZCBieSB0aGUgd3JpdGViYWNrXFxuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXFxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0Llxcbi0gKiBwb29sIC0gdGhlIHpzd2FwX3Bvb2wgdGhlIGVudHJ5J3MgZGF0YSBpcyBpblxcbisgKiBwb29sX2lkeCAtIGlkIG9mIHRoZSB6c3dhcF9wb29sIHRoYXQgdGhlIGVudHJ5J3MgZGF0YSBpcyBpbi5cXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXFxuICAqIG9iamNnIC0gdGhlIG9ial9jZ3JvdXAgdGhhdCB0aGUgY29tcHJlc3NlZCBtZW1vcnkgaXMgY2hhcmdlZCB0b1xcbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cXG5AQCAtMTkxLDE5ICsyMDQsMzAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcXG4gXFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XFxuIFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuIFxcdGJvb2wgcmVmZXJlbmNlZDtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuK1xcdHU4IHBvb2xfaWR4O1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxydTtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcXG4rICogcmVmZXJlbmNlIHRvIGl0cyBwb29sICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuK3tcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHBvb2wgPSB4YV9sb2FkKFxcdTAwMjZ6c3dhcF9wb29scywgZW50cnktXFx1MDAzZXBvb2xfaWR4KTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcG9vbDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xcbiBcXG4tLyogUkNVLXByb3RlY3RlZCBpdGVyYXRpb24gKi9cXG4tc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7XFxuLS8qIHByb3RlY3RzIHpzd2FwX3Bvb2xzIGxpc3QgbW9kaWZpY2F0aW9uICovXFxuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfcG9vbHNfbG9jayk7XFxuIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqL1xcbiBzdGF0aWMgYXRvbWljX3QgenN3YXBfcG9vbHNfY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcXG4gXFxuQEAgLTI3NSw2ICsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbiBcXHRjaGFyIG5hbWVbMzhdOyAvKiAnenN3YXAnICsgMzIgY2hhciAobWF4KSBudW0gKyBcXFxcMCAqL1xcbiBcXHRpbnQgcmV0LCBjcHU7XFxuK1xcdHUzMiBpZDtcXG4gXFxuIFxcdGlmICghenN3YXBfaGFzX3Bvb2wgXFx1MDAyNlxcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC0zMjAsMTIgKzM0NSwyNCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXFxuIFxcdFxcdFxcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byByZWZfZmFpbDtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbitcXG4rXFx0cmV0ID0geGFfYWxsb2NfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzLCBcXHUwMDI2aWQsIHBvb2wsXFxuK1xcdFxcdFxcdCAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLFxcbitcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVCVVNZKVxcbitcXHRcXHRcXHRwcl9lcnIoXFxcImNhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBaU1dBUF9NQVhfUE9PTF9JRCAtIFpTV0FQX0ZJUlNUX1BPT0xfSUQgKyAxKTtcXG4rXFx0XFx0Z290byB4YV9mYWlsO1xcbitcXHR9XFxuK1xcdHBvb2wtXFx1MDAzZWlkeCA9IGlkO1xcbiBcXG4gXFx0enN3YXBfcG9vbF9kZWJ1ZyhcXFwiY3JlYXRlZFxcXCIsIHBvb2wpO1xcbiBcXG4gXFx0cmV0dXJuIHBvb2w7XFxuIFxcbit4YV9mYWlsOlxcbitcXHRwZXJjcHVfcmVmX2V4aXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZik7XFxuIHJlZl9mYWlsOlxcbiBcXHRjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfTU1fWlNXUF9QT09MX1BSRVBBUkUsIFxcdTAwMjZwb29sLVxcdTAwM2Vub2RlKTtcXG4gXFxuQEAgLTM3OSwxNiArNDE2LDE0IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4gXFxuIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKnBvb2wpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRyZWxlYXNlX3dvcmspO1xcbi1cXG4tXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdHlwZW9mKCpwb29sKSwgcmVsZWFzZV9yd29yayk7XFxuIFxcbiBcXHQvKiBub2JvZHkgc2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBhIHJlZi4uLiAqL1xcbiBcXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXFx1MDAyNnBvb2wtXFx1MDAzZXJlZikpO1xcbiBcXHRwZXJjcHVfcmVmX2V4aXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZik7XFxuIFxcbi1cXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXFxuK1xcdC8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXFxuIFxcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcXG4gfVxcbiBcXG5AQCAtNDAwLDE2ICs0MzUsMTYgQEAgc3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXFxuIFxcbiBcXHRwb29sID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpwb29sKSwgcmVmKTtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdHhhX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFxuIFxcdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XFxuIFxcbi1cXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbitcXHRfX3hhX2VyYXNlKFxcdTAwMjZ6c3dhcF9wb29scywgcG9vbC1cXHUwMDNlaWR4KTtcXG4gXFxuLVxcdElOSVRfV09SSyhcXHUwMDI2cG9vbC1cXHUwMDNlcmVsZWFzZV93b3JrLCBfX3pzd2FwX3Bvb2xfcmVsZWFzZSk7XFxuLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2Vfd29yayk7XFxuK1xcdElOSVRfUkNVX1dPUksoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcXG4rXFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmspO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbitcXHR4YV91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXFxuQEAgLTQzNSw3ICs0NzAsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuIFxcbi1cXHRwb29sID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcXHUwMDI2enN3YXBfcG9vbHMsIHR5cGVvZigqcG9vbCksIGxpc3QpO1xcbitcXHRwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCxcXG4rXFx0XFx0XFx0XFx0ICAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spKTtcXG4gXFx0V0FSTl9PTkNFKCFwb29sIFxcdTAwMjZcXHUwMDI2IHpzd2FwX2hhc19wb29sLFxcbiBcXHRcXHQgIFxcXCIlczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbkBAIC00NDQsNyArNDgwLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbiBcXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZClcXG4ge1xcbi1cXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xcbiB9XFxuQEAgLTQ2NCwxNCArNTAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxcbiBcXHRyZXR1cm4gcG9vbDtcXG4gfVxcbiBcXG4tLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xcbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXFxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxcbiB7XFxuIFxcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4tXFx0YXNzZXJ0X3NwaW5fbG9ja2VkKFxcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jayk7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNnpzd2FwX3Bvb2xzLCBpZCwgcG9vbCkge1xcbiBcXHRcXHRpZiAoc3RyY21wKHBvb2wtXFx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cXG5AQCAtNDk3LDkgKzUzNCwxNSBAQCB1bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogcmN1X3JlYWRfbG9jaygpIGlzIHJlcXVpcmVkIGhlcmUsIG5vdCBqdXN0IGZvciB4YV9mb3JfZWFjaCgpOiBpdCBhbHNvXFxuK1xcdCAqIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSB3aGlsZSBpdCBpcyBkZXJlZmVyZW5jZWQsIHNpbmNlIGEgY29uY3VycmVudGx5XFxuK1xcdCAqIHJldGlyZWQgcG9vbCBpcyBmcmVlZCB2aWEgcXVldWVfcmN1X3dvcmsoKSBhZnRlciBhIGdyYWNlIHBlcmlvZC5cXG4rXFx0ICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxcbiBcXHRcXHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cXHUwMDNlenNfcG9vbCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNTU2LDIwICs1OTksMTcgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuLVxcbitcXHR4YV9sb2NrX2JoKFxcdTAwMjZ6c3dhcF9wb29scyk7XFxuIFxcdHBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpO1xcbiBcXHRpZiAocG9vbCkge1xcbiBcXHRcXHR6c3dhcF9wb29sX2RlYnVnKFxcXCJ1c2luZyBleGlzdGluZ1xcXCIsIHBvb2wpO1xcbiBcXHRcXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xcbi1cXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QpO1xcbiBcXHR9XFxuK1xcdHhhX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHMpO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xcbi1cXG4tXFx0aWYgKCFwb29sKVxcbitcXHRpZiAoIXBvb2wpIHtcXG4gXFx0XFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xcbi1cXHRlbHNlIHtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogUmVzdG9yZSB0aGUgaW5pdGlhbCByZWYgZHJvcHBlZCBieSBwZXJjcHVfcmVmX2tpbGwoKVxcbiBcXHRcXHQgKiB3aGVuIHRoZSBwb29sIHdhcyBkZWNvbW1pc3Npb25lZCBhbmQgc3dpdGNoIGl0IGFnYWluXFxuQEAgLTU4NiwyMyArNjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdHhhX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XFxuLVxcdFxcdGxpc3RfYWRkX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XFxuIFxcdFxcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcXG4gXFx0fSBlbHNlIGlmIChwb29sKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEFkZCB0aGUgcG9zc2libHkgcHJlLWV4aXN0aW5nIHBvb2wgdG8gdGhlIGVuZCBvZiB0aGUgcG9vbHNcXG4tXFx0XFx0ICogbGlzdDsgaWYgaXQncyBuZXcgKGFuZCBlbXB0eSkgdGhlbiBpdCdsbCBiZSByZW1vdmVkIGFuZFxcbi1cXHRcXHQgKiBkZXN0cm95ZWQgYnkgdGhlIHB1dCBhZnRlciB3ZSBkcm9wIHRoZSBsb2NrXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG4gXFx0XFx0cHV0X3Bvb2wgPSBwb29sO1xcbiBcXHR9XFxuIFxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XFxuK1xcdHhhX3VubG9ja19iaChcXHUwMDI2enN3YXBfcG9vbHMpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRHJvcCB0aGUgcmVmIGZyb20gZWl0aGVyIHRoZSBvbGQgY3VycmVudCBwb29sLFxcbkBAIC03NTEsOSArNzg1LDEzIEBAIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4gICovXFxuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4ge1xcbitcXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xcbitcXG4gXFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XFxuLVxcdHpzX2ZyZWUoZW50cnktXFx1MDAzZXBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbi1cXHR6c3dhcF9wb29sX3B1dChlbnRyeS1cXHUwMDNlcG9vbCk7XFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKCFwb29sKSkge1xcbitcXHRcXHR6c19mcmVlKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbitcXHRcXHR6c3dhcF9wb29sX3B1dChwb29sKTtcXG4rXFx0fVxcbiBcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKSB7XFxuIFxcdFxcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXFx1MDAzZW9iamNnLCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG4gXFx0XFx0b2JqX2Nncm91cF9wdXQoZW50cnktXFx1MDAzZW9iamNnKTtcXG5AQCAtOTEwLDEyICs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cXHUwMDNlcG9vbDtcXG4rXFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IGlucHV0WzJdOyAvKiB6c21hbGxvYyByZXR1cm5zIGFuIFNHIGxpc3QgMS0yIGVudHJpZXMgKi9cXG4gXFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcXG4gXFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG4gXFx0aW50IHJldCA9IDAsIGRsZW47XFxuIFxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwb29sKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2VtdXRleCk7XFxuIFxcdHpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUsIGlucHV0LCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG5AQCAtOTUxLDcgKzk5Miw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXFxcIkRlY29tcHJlc3Npb24gZXJyb3IgZnJvbSB6c3dhcCAoJWQ6JWx1ICVzICV1LVxcdTAwM2UlZClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF90eXBlKGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN3cF9vZmZzZXQoZW50cnktXFx1MDAzZXN3cGVudHJ5KSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZXBvb2wtXFx1MDAzZXRmbV9uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwb29sLVxcdTAwM2V0Zm1fbmFtZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZWxlbmd0aCwgZGxlbik7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xNDA5LDYgKzE0NTAsMTYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXFxuIFxcdFxcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeTogY29tcHJlc3Npb24gaGFzXFxuK1xcdCAqIHN1Y2NlZWRlZCBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBwaW5uZWQgYnkgdGhpcyBzdG9yZSwgc28gdGhlIGlkIGlzXFxuK1xcdCAqIGZpbmFsLiAgRG9pbmcgaXQgaGVyZSAocmF0aGVyIHRoYW4gYWZ0ZXIgeGFfc3RvcmUoKSkgbWVhbnMgdGhlIGVudHJ5XFxuK1xcdCAqIGlzIG5ldmVyIGJyaWVmbHkgdmlzaWJsZSB3aXRoIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBvdmVyIGZyb20gc2xhYlxcbitcXHQgKiByZXVzZSwgd2hpY2ggenN3YXBfZW50cnlfcG9vbCgpIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIHRvIGFuXFxuK1xcdCAqIHVucmVsYXRlZCBsaXZlIHBvb2wuXFxuK1xcdCAqL1xcbitcXHRlbnRyeS1cXHUwMDNlcG9vbF9pZHggPSBwb29sLVxcdTAwM2VpZHg7XFxuK1xcbiBcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuIFxcdFxcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxcbiBcXHRcXHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xcbkBAIC0xNDU0LDcgKzE1MDUsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXFxuIFxcdCAqICAgIGFuIGluY29oZXJlbnQgZW50cnkuXFxuIFxcdCAqL1xcbi1cXHRlbnRyeS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuIFxcdGVudHJ5LVxcdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XFxuIFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbiBcXHRlbnRyeS1cXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XFxuQEAgLTE3OTAsNyArMTg0MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4gXFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcXG4gXFx0aWYgKHBvb2wpIHtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibG9hZGVkIHVzaW5nIHBvb2wgJXNcXFxcblxcXCIsIHBvb2wtXFx1MDAzZXRmbV9uYW1lKTtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxpc3QsIFxcdTAwMjZ6c3dhcF9wb29scyk7XFxuK1xcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xcbiBcXHRcXHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XFxuIFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZ6c3dhcF9ldmVyX2VuYWJsZWQpO1xcbiBcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0Nzo0Ny42OTE0MDQxMjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNTk0NjAxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2xvYWRcIixcbiAgICBcInpzd2FwX2ludmFsaWRhdGVcIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiLFxuICAgIFwienN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRcIixcbiAgICBcInpzd2FwX3RvdGFsX3BhZ2VzXCIsXG4gICAgXCJ6c3dhcF9lbnRyeV9mcmVlXCIsXG4gICAgXCJ6c3dhcF9kZWNvbXByZXNzXCIsXG4gICAgXCJ6c3dhcF9zdG9yZV9wYWdlXCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfZW1wdHlcIixcbiAgICBcIl9fenN3YXBfcG9vbF9yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0venN3YXAuYyBieSByZXBsYWNpbmcgZGlyZWN0IHBvb2wgcG9pbnRlcnMgaW4gc3RydWN0IHpzd2FwX2VudHJ5IHdpdGggcG9vbCBpbmRpY2VzIHRyYWNrZWQgaW4gYW4gWEFycmF5LiBJdCB1cGRhdGVzIFJDVS1wcm90ZWN0ZWQgcG9vbCBsb29rdXBzLCBjaGFuZ2VzIHRlYXJkb3duIHRvIHVzZSByY3Vfd29yaywgYWRqdXN0cyBjb25jdXJyZW5jeSBsb2NraW5nIHdpdGggWEFycmF5IGxvY2tzLCBhbmQgbW9kaWZpZXMgdGhlIHN0b3JlL2RlY29tcHJlc3MvZnJlZS93cml0ZWJhY2sgbGlmZWN5Y2xlIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDQxZmVkZmEyZWNhZTYwMjY1NWNkZDFmYmJiZWU0OTc1ODRlYzliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMzo0Nzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmM2FlM2M4MWU0OGVhLi4zMWNmMGVmNDNkMjM2IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTM0LDYgKzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTE1NCwxMiArMTU1LDI0IEBAIHN0cnVjdCB6c3dhcF9wb29sIHtcbiBcdHN0cnVjdCB6c19wb29sICp6c19wb29sO1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggX19wZXJjcHUgKmFjb21wX2N0eDtcbiBcdHN0cnVjdCBwZXJjcHVfcmVmIHJlZjtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcmVsZWFzZV9yd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XG4rXHR1OCBpZHg7XG4gXHRjaGFyIHRmbV9uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdO1xuIH07XG4gXG4rLypcbisgKiBMaXZlIHBvb2xzIGtleWVkIGJ5IGlkICgxLi5aU1dBUF9NQVhfUE9PTF9JRCkuICBYQV9GTEFHU19BTExPQzEga2VlcHNcbisgKiB0aGUgcmVzZXJ2ZWQgaWQgMCB1bmFsbG9jYXRlZCwgc28gbG9va2luZyBpdCB1cCBuZXZlciBhbGlhc2VzIGEgbGl2ZVxuKyAqIHBvb2wuICBYQV9GTEFHU19MT0NLX0JIIG1ha2VzIHRoZSB4YV9sb2NrIHNvZnRpcnEtc2FmZTogaXQgaXMgdGFrZW5cbisgKiBmcm9tIF9fenN3YXBfcG9vbF9lbXB0eSgpLCB3aGljaCBydW5zIGZyb20gYSBwZXJjcHVfcmVmIHJlbGVhc2VcbisgKiBjYWxsYmFjayBpbiBzb2Z0aXJxIGNvbnRleHQuXG4rICovXG4rI2RlZmluZSBaU1dBUF9GSVJTVF9QT09MX0lEIDFcbisjZGVmaW5lIFpTV0FQX01BWF9QT09MX0lEIFU4X01BWFxuK3N0YXRpYyBERUZJTkVfWEFSUkFZX0ZMQUdTKHpzd2FwX3Bvb2xzLCBYQV9GTEFHU19BTExPQzEgfCBYQV9GTEFHU19MT0NLX0JIKTtcbitzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgX19yY3UgKnpzd2FwX2N1cnJlbnRfcG9vbDtcbitcbiAvKiBHbG9iYWwgTFJVIGxpc3RzIHNoYXJlZCBieSBhbGwgenN3YXAgcG9vbHMuICovXG4gc3RhdGljIHN0cnVjdCBsaXN0X2xydSB6c3dhcF9saXN0X2xydTtcbiBcbkBAIC0xODIsNyArMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4gICogICAgICAgICAgICAgIHdyaXRlYmFjayBsb2dpYy4gVGhlIGVudHJ5IGlzIG9ubHkgcmVjbGFpbWVkIGJ5IHRoZSB3cml0ZWJhY2tcbiAgKiAgICAgICAgICAgICAgbG9naWMgaWYgcmVmZXJlbmNlZCBpcyB1bnNldC4gU2VlIGNvbW1lbnRzIGluIHRoZSBzaHJpbmtlclxuICAqICAgICAgICAgICAgICBzZWN0aW9uIGZvciBjb250ZXh0LlxuLSAqIHBvb2wgLSB0aGUgenN3YXBfcG9vbCB0aGUgZW50cnkncyBkYXRhIGlzIGluXG4rICogcG9vbF9pZHggLSBpZCBvZiB0aGUgenN3YXBfcG9vbCB0aGF0IHRoZSBlbnRyeSdzIGRhdGEgaXMgaW4uXG4gICogaGFuZGxlIC0genNtYWxsb2MgYWxsb2NhdGlvbiBoYW5kbGUgdGhhdCBzdG9yZXMgdGhlIGNvbXByZXNzZWQgcGFnZSBkYXRhXG4gICogb2JqY2cgLSB0aGUgb2JqX2Nncm91cCB0aGF0IHRoZSBjb21wcmVzc2VkIG1lbW9yeSBpcyBjaGFyZ2VkIHRvXG4gICogbHJ1IC0gaGFuZGxlIHRvIHRoZSBwb29sJ3MgbHJ1IHVzZWQgdG8gZXZpY3QgcGFnZXMuXG5AQCAtMTkxLDE5ICsyMDQsMzAgQEAgc3RydWN0IHpzd2FwX2VudHJ5IHtcbiBcdHN3cF9lbnRyeV90IHN3cGVudHJ5O1xuIFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiBcdGJvb2wgcmVmZXJlbmNlZDtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1x0dTggcG9vbF9pZHg7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbHJ1O1xuIH07XG4gXG4rLypcbisgKiBUaGUgcG9vbCBzdGF5cyBhbGl2ZSBhZnRlciB0aGlzIHJldHVybnMgYmVjYXVzZSBhIHN0b3JlZCBlbnRyeSBob2xkcyBhXG4rICogcmVmZXJlbmNlIHRvIGl0cyBwb29sICh0YWtlbiBpbiB6c3dhcF9zdG9yZV9wYWdlKCkpLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfZW50cnlfcG9vbChzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuK3tcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cG9vbCA9IHhhX2xvYWQoXHUwMDI2enN3YXBfcG9vbHMsIGVudHJ5LVx1MDAzZXBvb2xfaWR4KTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHBvb2w7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgeGFycmF5ICp6c3dhcF90cmVlc1tNQVhfU1dBUEZJTEVTXTtcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3pzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIFxuLS8qIFJDVS1wcm90ZWN0ZWQgaXRlcmF0aW9uICovXG4tc3RhdGljIExJU1RfSEVBRCh6c3dhcF9wb29scyk7XG4tLyogcHJvdGVjdHMgenN3YXBfcG9vbHMgbGlzdCBtb2RpZmljYXRpb24gKi9cbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpzd2FwX3Bvb2xzX2xvY2spO1xuIC8qIHBvb2wgY291bnRlciB0byBwcm92aWRlIHVuaXF1ZSBuYW1lcyB0byB6c21hbGxvYyAqL1xuIHN0YXRpYyBhdG9taWNfdCB6c3dhcF9wb29sc19jb3VudCA9IEFUT01JQ19JTklUKDApO1xuIFxuQEAgLTI3NSw2ICsyOTksNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3JlYXRlKGNoYXIgKmNvbXByZXNzb3IpXG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdGNoYXIgbmFtZVszOF07IC8qICd6c3dhcCcgKyAzMiBjaGFyIChtYXgpIG51bSArIFxcMCAqL1xuIFx0aW50IHJldCwgY3B1O1xuK1x0dTMyIGlkO1xuIFxuIFx0aWYgKCF6c3dhcF9oYXNfcG9vbCBcdTAwMjZcdTAwMjYgIXN0cmNtcChjb21wcmVzc29yLCBaU1dBUF9QQVJBTV9VTlNFVCkpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTMyMCwxMiArMzQ1LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdFx0XHQgICAgICBQRVJDUFVfUkVGX0FMTE9XX1JFSU5JVCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHJlZl9mYWlsO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcbitcdHJldCA9IHhhX2FsbG9jX2JoKFx1MDAyNnpzd2FwX3Bvb2xzLCBcdTAwMjZpZCwgcG9vbCxcbitcdFx0XHQgIFhBX0xJTUlUKFpTV0FQX0ZJUlNUX1BPT0xfSUQsIFpTV0FQX01BWF9QT09MX0lEKSxcbitcdFx0XHQgIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAocmV0ID09IC1FQlVTWSlcbitcdFx0XHRwcl9lcnIoXCJjYW5ub3QgYWxsb2NhdGUgcG9vbCBpZCAobWF4ICVkIGxpdmUgcG9vbHMpXFxuXCIsXG4rXHRcdFx0ICAgICAgIFpTV0FQX01BWF9QT09MX0lEIC0gWlNXQVBfRklSU1RfUE9PTF9JRCArIDEpO1xuK1x0XHRnb3RvIHhhX2ZhaWw7XG4rXHR9XG4rXHRwb29sLVx1MDAzZWlkeCA9IGlkO1xuIFxuIFx0enN3YXBfcG9vbF9kZWJ1ZyhcImNyZWF0ZWRcIiwgcG9vbCk7XG4gXG4gXHRyZXR1cm4gcG9vbDtcbiBcbit4YV9mYWlsOlxuK1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiByZWZfZmFpbDpcbiBcdGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZShDUFVIUF9NTV9aU1dQX1BPT0xfUFJFUEFSRSwgXHUwMDI2cG9vbC1cdTAwM2Vub2RlKTtcbiBcbkBAIC0zNzksMTYgKzQxNiwxNCBAQCBzdGF0aWMgdm9pZCB6c3dhcF9wb29sX2Rlc3Ryb3koc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG4gXG4gc3RhdGljIHZvaWQgX196c3dhcF9wb29sX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqcG9vbCksXG4tXHRcdFx0XHRcdFx0cmVsZWFzZV93b3JrKTtcbi1cbi1cdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICB0eXBlb2YoKnBvb2wpLCByZWxlYXNlX3J3b3JrKTtcbiBcbiBcdC8qIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGEgcmVmLi4uICovXG4gXHRXQVJOX09OKCFwZXJjcHVfcmVmX2lzX3plcm8oXHUwMDI2cG9vbC1cdTAwM2VyZWYpKTtcbiBcdHBlcmNwdV9yZWZfZXhpdChcdTAwMjZwb29sLVx1MDAzZXJlZik7XG4gXG4tXHQvKiBwb29sIGlzIG5vdyBvZmYgenN3YXBfcG9vbHMgbGlzdCBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4rXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xuIFx0enN3YXBfcG9vbF9kZXN0cm95KHBvb2wpO1xuIH1cbiBcbkBAIC00MDAsMTYgKzQzNSwxNiBAQCBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbiBcbiBcdHBvb2wgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnBvb2wpLCByZWYpO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuIFxuLVx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4rXHRfX3hhX2VyYXNlKFx1MDAyNnpzd2FwX3Bvb2xzLCBwb29sLVx1MDAzZWlkeCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK1x0SU5JVF9SQ1VfV09SSyhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcbitcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yayk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbitcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHpzd2FwX3Bvb2xfdHJ5Z2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxuQEAgLTQzNSw3ICs0NzAsOCBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4gXG4tXHRwb29sID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcdTAwMjZ6c3dhcF9wb29scywgdHlwZW9mKCpwb29sKSwgbGlzdCk7XG4rXHRwb29sID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHpzd2FwX2N1cnJlbnRfcG9vbCxcbitcdFx0XHRcdCAgICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spKTtcbiBcdFdBUk5fT05DRSghcG9vbCBcdTAwMjZcdTAwMjYgenN3YXBfaGFzX3Bvb2wsXG4gXHRcdCAgXCIlczogbm8gcGFnZSBzdG9yYWdlIHBvb2whXFxuXCIsIF9fZnVuY19fKTtcbiBcbkBAIC00NDQsNyArNDgwLDcgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxuIFxuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4ge1xuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKTtcbiBcbiBcdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xuIH1cbkBAIC00NjQsMTQgKzUwMCwxNSBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcbiBcdHJldHVybiBwb29sO1xuIH1cbiBcbi0vKiB0eXBlIGFuZCBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4rLyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xuIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbi1cdGFzc2VydF9zcGluX2xvY2tlZChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jayk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb29sLCBcdTAwMjZ6c3dhcF9wb29scywgbGlzdCkge1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKSB7XG4gXHRcdGlmIChzdHJjbXAocG9vbC1cdTAwM2V0Zm1fbmFtZSwgY29tcHJlc3NvcikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cbkBAIC00OTcsOSArNTM0LDE1IEBAIHVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBpZDtcbiBcbitcdC8qXG4rXHQgKiByY3VfcmVhZF9sb2NrKCkgaXMgcmVxdWlyZWQgaGVyZSwgbm90IGp1c3QgZm9yIHhhX2Zvcl9lYWNoKCk6IGl0IGFsc29cbitcdCAqIGtlZXBzIGVhY2ggcG9vbCBhbGl2ZSB3aGlsZSBpdCBpcyBkZXJlZmVyZW5jZWQsIHNpbmNlIGEgY29uY3VycmVudGx5XG4rXHQgKiByZXRpcmVkIHBvb2wgaXMgZnJlZWQgdmlhIHF1ZXVlX3JjdV93b3JrKCkgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXG4rXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KVxuK1x0eGFfZm9yX2VhY2goXHUwMDI2enN3YXBfcG9vbHMsIGlkLCBwb29sKVxuIFx0XHR0b3RhbCArPSB6c19nZXRfdG90YWxfcGFnZXMocG9vbC1cdTAwM2V6c19wb29sKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuQEAgLTU1NiwyMCArNTk5LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuLVxuK1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcbiBcdGlmIChwb29sKSB7XG4gXHRcdHpzd2FwX3Bvb2xfZGVidWcoXCJ1c2luZyBleGlzdGluZ1wiLCBwb29sKTtcbiBcdFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcbi1cdFx0bGlzdF9kZWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCk7XG4gXHR9XG4rXHR4YV91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHMpO1xuIFxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4tXHRpZiAoIXBvb2wpXG4rXHRpZiAoIXBvb2wpIHtcbiBcdFx0cG9vbCA9IHpzd2FwX3Bvb2xfY3JlYXRlKHMpO1xuLVx0ZWxzZSB7XG4rXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBSZXN0b3JlIHRoZSBpbml0aWFsIHJlZiBkcm9wcGVkIGJ5IHBlcmNwdV9yZWZfa2lsbCgpXG4gXHRcdCAqIHdoZW4gdGhlIHBvb2wgd2FzIGRlY29tbWlzc2lvbmVkIGFuZCBzd2l0Y2ggaXQgYWdhaW5cbkBAIC01ODYsMjMgKzYyNiwxNyBAQCBzdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbVxuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfbG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHRpZiAoIXJldCkge1xuIFx0XHRwdXRfcG9vbCA9IHpzd2FwX3Bvb2xfY3VycmVudCgpO1xuLVx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKHBvb2wpIHtcbi1cdFx0Lypcbi1cdFx0ICogQWRkIHRoZSBwb3NzaWJseSBwcmUtZXhpc3RpbmcgcG9vbCB0byB0aGUgZW5kIG9mIHRoZSBwb29sc1xuLVx0XHQgKiBsaXN0OyBpZiBpdCdzIG5ldyAoYW5kIGVtcHR5KSB0aGVuIGl0J2xsIGJlIHJlbW92ZWQgYW5kXG4tXHRcdCAqIGRlc3Ryb3llZCBieSB0aGUgcHV0IGFmdGVyIHdlIGRyb3AgdGhlIGxvY2tcbi1cdFx0ICovXG4tXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBvb2wtXHUwMDNlbGlzdCwgXHUwMDI2enN3YXBfcG9vbHMpO1xuIFx0XHRwdXRfcG9vbCA9IHBvb2w7XG4gXHR9XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbitcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4gXHQvKlxuIFx0ICogRHJvcCB0aGUgcmVmIGZyb20gZWl0aGVyIHRoZSBvbGQgY3VycmVudCBwb29sLFxuQEAgLTc1MSw5ICs3ODUsMTMgQEAgc3RhdGljIHZvaWQgenN3YXBfZW50cnlfY2FjaGVfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuICAqL1xuIHN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbiB7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IHpzd2FwX2VudHJ5X3Bvb2woZW50cnkpO1xuK1xuIFx0enN3YXBfbHJ1X2RlbChlbnRyeSk7XG4tXHR6c19mcmVlKGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlKTtcbi1cdHpzd2FwX3Bvb2xfcHV0KGVudHJ5LVx1MDAzZXBvb2wpO1xuK1x0aWYgKCFXQVJOX09OX09OQ0UoIXBvb2wpKSB7XG4rXHRcdHpzX2ZyZWUocG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuK1x0XHR6c3dhcF9wb29sX3B1dChwb29sKTtcbitcdH1cbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZykge1xuIFx0XHRvYmpfY2dyb3VwX3VuY2hhcmdlX3pzd2FwKGVudHJ5LVx1MDAzZW9iamNnLCBlbnRyeS1cdTAwM2VsZW5ndGgpO1xuIFx0XHRvYmpfY2dyb3VwX3B1dChlbnRyeS1cdTAwM2VvYmpjZyk7XG5AQCAtOTEwLDEyICs5NDgsMTUgQEAgc3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0gZW50cnktXHUwMDNlcG9vbDtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW5wdXRbMl07IC8qIHpzbWFsbG9jIHJldHVybnMgYW4gU0cgbGlzdCAxLTIgZW50cmllcyAqL1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IG91dHB1dDtcbiBcdHN0cnVjdCBjcnlwdG9fYWNvbXBfY3R4ICphY29tcF9jdHg7XG4gXHRpbnQgcmV0ID0gMCwgZGxlbjtcbiBcbitcdGlmIChXQVJOX09OX09OQ0UoIXBvb2wpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRhY29tcF9jdHggPSByYXdfY3B1X3B0cihwb29sLVx1MDAzZWFjb21wX2N0eCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmFjb21wX2N0eC1cdTAwM2VtdXRleCk7XG4gXHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5AQCAtOTUxLDcgKzk5Miw3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHByX2FsZXJ0X3JhdGVsaW1pdGVkKFwiRGVjb21wcmVzc2lvbiBlcnJvciBmcm9tIHpzd2FwICglZDolbHUgJXMgJXUtXHUwMDNlJWQpXFxuXCIsXG4gXHRcdFx0XHRcdFx0c3dwX3R5cGUoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuIFx0XHRcdFx0XHRcdHN3cF9vZmZzZXQoZW50cnktXHUwMDNlc3dwZW50cnkpLFxuLVx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZXBvb2wtXHUwMDNldGZtX25hbWUsXG4rXHRcdFx0XHRcdFx0cG9vbC1cdTAwM2V0Zm1fbmFtZSxcbiBcdFx0XHRcdFx0XHRlbnRyeS1cdTAwM2VsZW5ndGgsIGRsZW4pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xNDA5LDYgKzE0NTAsMTYgQEAgc3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdGlmICghenN3YXBfY29tcHJlc3MocGFnZSwgZW50cnksIHBvb2wpKVxuIFx0XHRnb3RvIGNvbXByZXNzX2ZhaWxlZDtcbiBcbitcdC8qXG4rXHQgKiBTZXQgcG9vbF9pZHggYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5OiBjb21wcmVzc2lvbiBoYXNcbitcdCAqIHN1Y2NlZWRlZCBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBwaW5uZWQgYnkgdGhpcyBzdG9yZSwgc28gdGhlIGlkIGlzXG4rXHQgKiBmaW5hbC4gIERvaW5nIGl0IGhlcmUgKHJhdGhlciB0aGFuIGFmdGVyIHhhX3N0b3JlKCkpIG1lYW5zIHRoZSBlbnRyeVxuK1x0ICogaXMgbmV2ZXIgYnJpZWZseSB2aXNpYmxlIHdpdGggYSBzdGFsZSBwb29sX2lkeCBsZWZ0IG92ZXIgZnJvbSBzbGFiXG4rXHQgKiByZXVzZSwgd2hpY2ggenN3YXBfZW50cnlfcG9vbCgpIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIHRvIGFuXG4rXHQgKiB1bnJlbGF0ZWQgbGl2ZSBwb29sLlxuK1x0ICovXG4rXHRlbnRyeS1cdTAwM2Vwb29sX2lkeCA9IHBvb2wtXHUwMDNlaWR4O1xuK1xuIFx0b2xkID0geGFfc3RvcmUoc3dhcF96c3dhcF90cmVlKHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSxcbiBcdFx0ICAgICAgIGVudHJ5LCBHRlBfS0VSTkVMKTtcbkBAIC0xNDU0LDcgKzE1MDUsNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xuIFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cbiBcdCAqL1xuLVx0ZW50cnktXHUwMDNlcG9vbCA9IHBvb2w7XG4gXHRlbnRyeS1cdTAwM2Vzd3BlbnRyeSA9IHBhZ2Vfc3dwZW50cnk7XG4gXHRlbnRyeS1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0ZW50cnktXHUwMDNlcmVmZXJlbmNlZCA9IHRydWU7XG5AQCAtMTc5MCw3ICsxODQwLDcgQEAgc3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxuIFx0cG9vbCA9IF9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2soKTtcbiBcdGlmIChwb29sKSB7XG4gXHRcdHByX2luZm8oXCJsb2FkZWQgdXNpbmcgcG9vbCAlc1xcblwiLCBwb29sLVx1MDAzZXRmbV9uYW1lKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih6c3dhcF9jdXJyZW50X3Bvb2wsIHBvb2wpO1xuIFx0XHR6c3dhcF9oYXNfcG9vbCA9IHRydWU7XG4gXHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XG4gXHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NDcuNjkxNDA1OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwODQzNTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzd2FwIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBtbS96c3dhcC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0J3MgdGhlIGtlcm5lbCdzIGNvbXByZXNzZWQgc3dhcCBhcmVhIGltcGxlbWVudGF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgYHpzd2FwX3Bvb2xgIGlzIGhhbmRsZWQuIEl0J3MgbW92aW5nIGZyb20gYSBkaXJlY3QgcG9pbnRlciB3aXRoaW4gYHpzd2FwX2VudHJ5YCAoYHN0cnVjdCB6c3dhcF9lbnRyeWApIHRvIGFuIGluZGV4IChgdTggcG9vbF9pZHhgKSByZWZlcmVuY2luZyBhbiB4YXJyYXkgKGB6c3dhcF9wb29sc2ApLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCEgU28gbm93LCBpbnN0ZWFkIG9mIGEgZGlyZWN0IHBvaW50ZXIsIHdlIGhhdmUgYW4gSUQgbG9va3VwLiBUaGlzIHN1Z2dlc3RzIHBvdGVudGlhbCBjaGFuZ2VzIGluIGhvdyBtZW1vcnkgaXMgYWNjZXNzZWQsIGFsbG9jYXRlZCwgYW5kIGZyZWVkIHdpdGhpbiB0aGUgenN3YXAgc3Vic3lzdGVtLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGB4YV9hbGxvY19iaGAsIGBfX3hhX2VyYXNlYCwgYHhhX2Zvcl9lYWNoYCwgYW5kIGB4YV9sb2FkYCwgYWxsIHVuZGVyIFJDVSBwcm90ZWN0aW9uLiBUaGUgaW50cm9kdWN0aW9uIG9mIGByY3Vfd29ya2AgYW5kIGByY3VfYXNzaWduX3BvaW50ZXJgIGlzIGFub3RoZXIga2V5IGRldGFpbC4gVGhpcyBoaW50cyBhdCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCB3ZSBjYW4gZXhwbG9pdCBkdXJpbmcgZnV6emluZy4gVGhlIGZ1bmN0aW9uIHJlcGxhY2VtZW50cyBhbHNvIGRlbWFuZCBjYXJlZnVsIGV4YW1pbmF0aW9uLiBgenN3YXBfZW50cnlfZnJlZWAsIGB6c3dhcF9kZWNvbXByZXNzYCwgYHpzd2FwX3N0b3JlX3BhZ2VgLCBgenN3YXBfcG9vbF9jcmVhdGVgLCBhbGwgb2YgdGhlc2UgYWx0ZXJlZCBmdW5jdGlvbnMsIGlmIG1pc2hhbmRsZWQsIGNvdWxkIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWZhY3RvcmluZyBpcyBwcm9iYWJseSBkb25lIGZvciBhIHJlYXNvbiwgcGVyaGFwcyB0byBzdXBwb3J0IG11bHRpcGxlIHBvb2xzIG9yIGltcHJvdmUgc2NhbGFiaWxpdHkuIFRoZSBzd2l0Y2ggdG8gYW4geGFycmF5IGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYmVjYXVzZSBpdCBpcyBhbiBpbnRyaWNhdGUgZGF0YSBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb29sIG1hbmFnZW1lbnQgY29kZSwgZXNwZWNpYWxseSB0aGUgbmV3IGhlbHBlciBgenN3YXBfZW50cnlfcG9vbGAsIHdoaWNoIGlzIGxpa2VseSBhIGtleSBwb2ludCBvZiBpbnRlcmFjdGlvbi5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB6c3dhcC4gSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgdXNlZC4gSSB3aWxsIHByb2JhYmx5IHJ1biBgZ3JlcHBlcmAgb3IgY2hlY2sgYG1tL0tjb25maWdgIGRpcmVjdGx5IHRvIGdhdGhlciB0aGUgcmVxdWlyZWQgaW5mby4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBwcmVjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGZvciB0aGUgenN3YXAgZnVuY3Rpb25hbGl0eSB0byBldmVuIGJlIGFjdGl2ZS4gV2l0aCB0aGF0LCBJJ2xsIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hhdCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBhcmVhIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZy4gVGhlbiBJIHdpbGwgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBgRm9jdXNTeW1ib2xzYCBhbmQgdGhlIGNvbmZpZ3MgSSBuZWVkIGZvciB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NTIuMTk5ODQzOTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTIxODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NTIuMjU3NzY4MjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU2NzUwMTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBaU1dBUCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBaU1dBUCdzIGRlcGVuZGVuY2llcy4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHB1bGwgdXAgdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBhbmQgc3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3LiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucyBhbmQgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIFpTV0FQLiBJJ20gbG9va2luZyBmb3IgYSBxdWljayBhbmQgZGlyZWN0IGhpdCwgbm90aGluZyBmYW5jeSwganVzdCB0aGUgYnVpbGRpbmcgYmxvY2tzLiBUaW1lIHRvIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjUzLjgyNTI3MTU3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0Nzo1My44MjUzNjkzNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQzNzk4MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIG9mIHpzd2FwLm8qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzd2FwLm9gIGlzIGJlaW5nIGNvbXBpbGVkLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgZGVmaW5lZCBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZHVsZXMsIGFuZCB1bmRvdWJ0ZWRseSB3aGVyZSB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBjb21waWxpbmcgYHpzd2FwLm9gIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBmbGFncywgaW5jbHVkZSBwYXRocywgYW5kIGFueSBsaW5rIGRlcGVuZGVuY2llcyBsYWlkIG91dCB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCBJIGNhbiBsZWFybi4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBjb21waWxlciBjaG9pY2VzIG1hZGUgZm9yIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjU1LjM2OTE3MDMyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE3NzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03OT1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo4MDpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgxLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0Nzo1NS40MTkzNTAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDcxNzI4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpzd2FwIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19aU1dBUGAgYW5kIGBDT05GSUdfU1dBUGAg4oCTIGVzc2VudGlhbGx5LCBgWlNXQVBgIOKAkyBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgYSB3aG9sZSBzbGV3IG9mIGZ1bmN0aW9ucywgbW9zdGx5IHN0YXRpYywgZGlyZWN0bHkgcmVsYXRlZCB0byBwb29sIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSBJIHNlZSB0aGUgZm9sbG93aW5nOiBgenN3YXBfZW50cnlfcG9vbGAsIGB6c3dhcF9wb29sX2NyZWF0ZWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGBfX3pzd2FwX3Bvb2xfZW1wdHlgLCBgX196c3dhcF9wb29sX2N1cnJlbnRgLCBgenN3YXBfcG9vbF9jdXJyZW50YCwgYHpzd2FwX3Bvb2xfY3VycmVudF9nZXRgLCBgenN3YXBfcG9vbF9maW5kX2dldGAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGFuZCBgenN3YXBfZW50cnlfZnJlZWAuIFRoZXNlIGFyZSBsaWtlbHkgYWxsIHBhcnQgb2YgdGhlIHpzd2FwIGRhdGEgc3RydWN0dXJlIG9yIGNvcmUgenN3YXAgb3BlcmF0aW9uLCBsaWtlbHkgdG8gaW5jbHVkZSBhbiBpbnRlcm5hbCBwb29sLiBJJ20gYWxzbyBzZWVpbmcgYHpzd2FwX3RvdGFsX3BhZ2VzYC5cblxuSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSB6c3dhcCBwcm9jZXNzIGl0c2VsZiwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGludGVyYWN0IHdpdGggdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBhbHNvIHNlZSBgenN3YXBfZGVjb21wcmVzc2AsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYW5kIGB6c3dhcF9zZXR1cGAuIEkgc2VlIGEgY291cGxlIG9mIG90aGVycyBhcyB3ZWxsLCBidXQgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAgYW5kIGB6c3dhcF9lbnRyeV9mcmVlYCBhcmUgbGlrZWx5IGtleSB0byB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBhbmQgc3RvcmFnZSBsaWZlY3ljbGUuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgKmhvdyogdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMgYXJvdW5kIGB6c3dhcF9zdG9yZV9wYWdlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NDcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDc6NTguNDY2NTI0OTIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF9zdG9yZXx6c3dhcF9sb2FkfHpzd2FwX2ludmFsaWRhdGV8enN3YXBfcG9vbF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jLTQ3LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDg6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNDktLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo1MDpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNTEtXFxuLS1cXG5tbS96c3dhcC5jLTU5LS8qIFBvb2wgbGltaXQgd2FzIGhpdCAoc2VlIHpzd2FwX21heF9wb29sX3BlcmNlbnQpICovXFxubW0venN3YXAuYzo2MDpzdGF0aWMgdTY0IHpzd2FwX3Bvb2xfbGltaXRfaGl0O1xcbm1tL3pzd2FwLmMtNjEtLyogUGFnZXMgd3JpdHRlbiBiYWNrIHdoZW4gcG9vbCBsaW1pdCB3YXMgcmVhY2hlZCAqL1xcbi0tXFxubW0venN3YXAuYz03Nz1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNocmlua193cTtcXG5tbS96c3dhcC5jLTc4LS8qIFBvb2wgbGltaXQgd2FzIGhpdCwgd2UgbmVlZCB0byBjYWxtIGRvd24gKi9cXG5tbS96c3dhcC5jOjc5OnN0YXRpYyBib29sIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xcbm1tL3pzd2FwLmMtODAtXFxuLS1cXG5tbS96c3dhcC5jPTE1ND1zdHJ1Y3QgenN3YXBfcG9vbCB7XFxuLS1cXG5tbS96c3dhcC5jLTE2Ny0gKiBwb29sLiAgWEFfRkxBR1NfTE9DS19CSCBtYWtlcyB0aGUgeGFfbG9jayBzb2Z0aXJxLXNhZmU6IGl0IGlzIHRha2VuXFxubW0venN3YXAuYzoxNjg6ICogZnJvbSBfX3pzd2FwX3Bvb2xfZW1wdHkoKSwgd2hpY2ggcnVucyBmcm9tIGEgcGVyY3B1X3JlZiByZWxlYXNlXFxubW0venN3YXAuYy0xNjktICogY2FsbGJhY2sgaW4gc29mdGlycSBjb250ZXh0Llxcbi0tXFxubW0venN3YXAuYz0yMDM9c3RydWN0IHpzd2FwX2VudHJ5IHtcXG4tLVxcbm1tL3pzd2FwLmMtMjE0LSAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcXG5tbS96c3dhcC5jOjIxNTogKiByZWZlcmVuY2UgdG8gaXRzIHBvb2wgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSkuXFxubW0venN3YXAuYy0yMTYtICovXFxuLS1cXG5tbS96c3dhcC5jPTI1NT1zdGF0aWMgaW5saW5lIHN0cnVjdCB4YXJyYXkgKnN3YXBfenN3YXBfdHJlZShzd3BfZW50cnlfdCBzd3ApXFxuLS1cXG5tbS96c3dhcC5jLTI2MC1cXG5tbS96c3dhcC5jOjI2MTojZGVmaW5lIHpzd2FwX3Bvb2xfZGVidWcobXNnLCBwKVxcdFxcdFxcdFxcXFxcXG5tbS96c3dhcC5jLTI2Mi1cXHRwcl9kZWJ1ZyhcXFwiJXMgcG9vbCAlc1xcXFxuXFxcIiwgbXNnLCAocCktXFx1MDAzZXRmbV9uYW1lKVxcbi0tXFxubW0venN3YXAuYy0yNjYtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjI2NzpzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfZW1wdHkoc3RydWN0IHBlcmNwdV9yZWYgKnJlZik7XFxubW0venN3YXAuYy0yNjgtXFxubW0venN3YXAuYz0yNjk9c3RhdGljIHZvaWQgYWNvbXBfY3R4X2ZyZWUoc3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eClcXG4tLVxcbm1tL3pzd2FwLmMtMjk2LVxcbm1tL3pzd2FwLmM6Mjk3OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcXG5tbS96c3dhcC5jLTI5OC17XFxuLS1cXG5tbS96c3dhcC5jLTM0My1cXHQgKi9cXG5tbS96c3dhcC5jOjM0NDpcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNnBvb2wtXFx1MDAzZXJlZiwgX196c3dhcF9wb29sX2VtcHR5LFxcbm1tL3pzd2FwLmMtMzQ1LVxcdFxcdFxcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcXG4tLVxcbm1tL3pzd2FwLmMtMzU5LVxcbm1tL3pzd2FwLmM6MzYwOlxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImNyZWF0ZWRcXFwiLCBwb29sKTtcXG5tbS96c3dhcC5jLTM2MS1cXG4tLVxcbm1tL3pzd2FwLmMtMzgwLVxcbm1tL3pzd2FwLmM6MzgxOnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbm1tL3pzd2FwLmMtMzgyLXtcXG4tLVxcbm1tL3pzd2FwLmMtMzk2LVxcbm1tL3pzd2FwLmM6Mzk3OlxcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jLTM5OC19XFxubW0venN3YXAuYy0zOTktXFxubW0venN3YXAuYzo0MDA6c3RhdGljIHZvaWQgenN3YXBfcG9vbF9kZXN0cm95KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDAxLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDAzLVxcbm1tL3pzd2FwLmM6NDA0OlxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcImRlc3Ryb3lpbmdcXFwiLCBwb29sKTtcXG5tbS96c3dhcC5jLTQwNS1cXG4tLVxcbm1tL3pzd2FwLmMtNDE2LVxcbm1tL3pzd2FwLmM6NDE3OnN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5tbS96c3dhcC5jLTQxOC17XFxuLS1cXG5tbS96c3dhcC5jLTQyNi1cXHQvKiBUaGUgcG9vbCBpcyBubyBsb25nZXIgaW4genN3YXBfcG9vbHMgYW5kIGhhcyBubyByZWZlcmVuY2VzLiAqL1xcbm1tL3pzd2FwLmM6NDI3OlxcdHpzd2FwX3Bvb2xfZGVzdHJveShwb29sKTtcXG5tbS96c3dhcC5jLTQyOC19XFxubW0venN3YXAuYy00MjktXFxubW0venN3YXAuYzo0MzA6c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZCk7XFxubW0venN3YXAuYy00MzEtXFxubW0venN3YXAuYzo0MzI6c3RhdGljIHZvaWQgX196c3dhcF9wb29sX2VtcHR5KHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXFxubW0venN3YXAuYy00MzMte1xcbi0tXFxubW0venN3YXAuYy00MzktXFxubW0venN3YXAuYzo0NDA6XFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG5tbS96c3dhcC5jLTQ0MS1cXG4tLVxcbm1tL3pzd2FwLmMtNDQzLVxcbm1tL3pzd2FwLmM6NDQ0OlxcdElOSVRfUkNVX1dPUksoXFx1MDAyNnBvb2wtXFx1MDAzZXJlbGVhc2VfcndvcmssIF9fenN3YXBfcG9vbF9yZWxlYXNlKTtcXG5tbS96c3dhcC5jLTQ0NS1cXHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCBcXHUwMDI2cG9vbC1cXHUwMDNlcmVsZWFzZV9yd29yayk7XFxuLS1cXG5tbS96c3dhcC5jLTQ0OS1cXG5tbS96c3dhcC5jOjQ1MDpzdGF0aWMgaW50IF9fbXVzdF9jaGVjayB6c3dhcF9wb29sX3RyeWdldChzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG5tbS96c3dhcC5jLTQ1MS17XFxuLS1cXG5tbS96c3dhcC5jLTQ1OC0vKiBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIGEgcmVmZXJlbmNlLiAqL1xcbm1tL3pzd2FwLmM6NDU5OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZ2V0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDYwLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDYzLVxcbm1tL3pzd2FwLmM6NDY0OnN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfcHV0KHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbm1tL3pzd2FwLmMtNDY1LXtcXG4tLVxcbm1tL3pzd2FwLmMtNDY4LVxcbm1tL3pzd2FwLmM6NDY5OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcXG5tbS96c3dhcC5jLTQ3MC17XFxuLS1cXG5tbS96c3dhcC5jLTQ4MC1cXG5tbS96c3dhcC5jOjQ4MTpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudCh2b2lkKVxcbm1tL3pzd2FwLmMtNDgyLXtcXG4tLVxcbm1tL3pzd2FwLmMtNDg0LVxcbm1tL3pzd2FwLmM6NDg1OlxcdHJldHVybiBfX3pzd2FwX3Bvb2xfY3VycmVudCgpO1xcbm1tL3pzd2FwLmMtNDg2LX1cXG5tbS96c3dhcC5jLTQ4Ny1cXG5tbS96c3dhcC5jOjQ4ODpzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKnpzd2FwX3Bvb2xfY3VycmVudF9nZXQodm9pZClcXG5tbS96c3dhcC5jLTQ4OS17XFxuLS1cXG5tbS96c3dhcC5jLTQ5My1cXG5tbS96c3dhcC5jOjQ5NDpcXHRwb29sID0gX196c3dhcF9wb29sX2N1cnJlbnQoKTtcXG5tbS96c3dhcC5jOjQ5NTpcXHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxcbm1tL3pzd2FwLmMtNDk2LVxcdFxcdHBvb2wgPSBOVUxMO1xcbi0tXFxubW0venN3YXAuYy01MDMtLyogY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqL1xcbm1tL3pzd2FwLmM6NTA0OnN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9maW5kX2dldChjaGFyICpjb21wcmVzc29yKVxcbm1tL3pzd2FwLmMtNTA1LXtcXG4tLVxcbm1tL3pzd2FwLmMtNTE0LVxcdFxcdC8qIGlmIHdlIGNhbid0IGdldCBpdCwgaXQncyBhYm91dCB0byBiZSBkZXN0cm95ZWQgKi9cXG5tbS96c3dhcC5jOjUxNTpcXHRcXHRpZiAoIXpzd2FwX3Bvb2xfdHJ5Z2V0KHBvb2wpKVxcbm1tL3pzd2FwLmMtNTE2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0venN3YXAuYz01NTI9c3RhdGljIGJvb2wgenN3YXBfY2hlY2tfbGltaXRzKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTU1Ny1cXHRpZiAoY3VyX3BhZ2VzIFxcdTAwM2U9IG1heF9wYWdlcykge1xcbm1tL3pzd2FwLmM6NTU4OlxcdFxcdHpzd2FwX3Bvb2xfbGltaXRfaGl0Kys7XFxubW0venN3YXAuYzo1NTk6XFx0XFx0enN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwgPSB0cnVlO1xcbm1tL3pzd2FwLmM6NTYwOlxcdH0gZWxzZSBpZiAoenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwgXFx1MDAyNlxcdTAwMjZcXG5tbS96c3dhcC5jLTU2MS1cXHRcXHQgICBjdXJfcGFnZXMgXFx1MDAzYz0genN3YXBfYWNjZXB0X3Rocl9wYWdlcygpKSB7XFxubW0venN3YXAuYzo1NjI6XFx0XFx0XFx0enN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwgPSBmYWxzZTtcXG5tbS96c3dhcC5jLTU2My1cXHR9XFxubW0venN3YXAuYzo1NjQ6XFx0cmV0dXJuIHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsO1xcbm1tL3pzd2FwLmMtNTY1LX1cXG4tLVxcbm1tL3pzd2FwLmM9NTcxPXN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL3pzd2FwLmMtNjAyLVxcdHhhX2xvY2tfYmgoXFx1MDAyNnpzd2FwX3Bvb2xzKTtcXG5tbS96c3dhcC5jOjYwMzpcXHRwb29sID0genN3YXBfcG9vbF9maW5kX2dldChzKTtcXG5tbS96c3dhcC5jLTYwNC1cXHRpZiAocG9vbCkge1xcbm1tL3pzd2FwLmM6NjA1OlxcdFxcdHpzd2FwX3Bvb2xfZGVidWcoXFxcInVzaW5nIGV4aXN0aW5nXFxcIiwgcG9vbCk7XFxubW0venN3YXAuYzo2MDY6XFx0XFx0V0FSTl9PTihwb29sID09IHpzd2FwX3Bvb2xfY3VycmVudCgpKTtcXG5tbS96c3dhcC5jLTYwNy1cXHR9XFxuLS1cXG5tbS96c3dhcC5jLTYxMC1cXHRpZiAoIXBvb2wpIHtcXG5tbS96c3dhcC5jOjYxMTpcXHRcXHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XFxubW0venN3YXAuYy02MTItXFx0fSBlbHNlIHtcXG4tLVxcbm1tL3pzd2FwLmMtNjE5LVxcbm1tL3pzd2FwLmM6NjIwOlxcdFxcdC8qIERyb3AgdGhlIHJlZiBmcm9tIHpzd2FwX3Bvb2xfZmluZF9nZXQoKS4gKi9cXG5tbS96c3dhcC5jOjYyMTpcXHRcXHR6c3dhcF9wb29sX3B1dChwb29sKTtcXG5tbS96c3dhcC5jLTYyMi1cXHR9XFxuLS1cXG5tbS96c3dhcC5jLTYzMS1cXHRpZiAoIXJldCkge1xcbm1tL3pzd2FwLmM6NjMyOlxcdFxcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XFxubW0venN3YXAuYy02MzMtXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XFxuLS1cXG5tbS96c3dhcC5jPTc4Nj1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc5Mi1cXHRcXHR6c19mcmVlKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGVudHJ5LVxcdTAwM2VoYW5kbGUpO1xcbm1tL3pzd2FwLmM6NzkzOlxcdFxcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xcbm1tL3pzd2FwLmMtNzk0LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmMtNzk5LVxcdGlmIChlbnRyeS1cXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcXG5tbS96c3dhcC5jOjgwMDpcXHRcXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy04MDEtXFx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYzo4MDI6XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbm1tL3pzd2FwLmMtODAzLX1cXG4tLVxcbm1tL3pzd2FwLmM9OTQ5PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTAwOS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjEwMTA6ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxcbm1tL3pzd2FwLmMtMTAxMS0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cXG4tLVxcbm1tL3pzd2FwLmM9MTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMjU0LVxcdFxcdG5yX2JhY2tpbmcgPSB6c3dhcF90b3RhbF9wYWdlcygpO1xcbm1tL3pzd2FwLmM6MTI1NTpcXHRcXHRucl9zdG9yZWQgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTI1Ni1cXHR9XFxuLS1cXG5tbS96c3dhcC5jPTEzNDU9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS96c3dhcC5jLTE0MzUtXFxubW0venN3YXAuYzoxNDM2OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0venN3YXAuYy0xNDM3LVxcdFxcdFxcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0venN3YXAuYy0xNDg0LVxcdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcXG5tbS96c3dhcC5jOjE0ODU6XFx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXFxubW0venN3YXAuYy0xNDg2LVxcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxcbi0tXFxubW0venN3YXAuYy0xNDg4LVxcdCAqL1xcbm1tL3pzd2FwLmM6MTQ4OTpcXHR6c3dhcF9wb29sX2dldChwb29sKTtcXG5tbS96c3dhcC5jLTE0OTAtXFx0aWYgKG9iamNnKSB7XFxuLS1cXG5tbS96c3dhcC5jLTE0OTMtXFx0fVxcbm1tL3pzd2FwLmM6MTQ5NDpcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xNDk1LVxcdGlmIChlbnRyeS1cXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcXG5tbS96c3dhcC5jOjE0OTY6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTQ5Ny1cXG4tLVxcbm1tL3pzd2FwLmMtMTUyNC1cXG5tbS96c3dhcC5jOjE1MjU6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTUyNi17XFxuLS1cXG5tbS96c3dhcC5jLTE1NTMtXFxubW0venN3YXAuYzoxNTU0OlxcdHBvb2wgPSB6c3dhcF9wb29sX2N1cnJlbnRfZ2V0KCk7XFxubW0venN3YXAuYy0xNTU1LVxcdGlmICghcG9vbClcXG4tLVxcbm1tL3pzd2FwLmMtMTU2OS1cXG5tbS96c3dhcC5jOjE1NzA6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE1NzEtXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmMtMTU4MS1wdXRfcG9vbDpcXG5tbS96c3dhcC5jOjE1ODI6XFx0enN3YXBfcG9vbF9wdXQocG9vbCk7XFxubW0venN3YXAuYy0xNTgzLXB1dF9vYmpjZzpcXG5tbS96c3dhcC5jLTE1ODQtXFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xcbm1tL3pzd2FwLmM6MTU4NTpcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiB6c3dhcF9wb29sX3JlYWNoZWRfZnVsbClcXG5tbS96c3dhcC5jLTE1ODYtXFx0XFx0cXVldWVfd29yayhzaHJpbmtfd3EsIFxcdTAwMjZ6c3dhcF9zaHJpbmtfd29yayk7XFxuLS1cXG5tbS96c3dhcC5jLTE2MTEtLyoqXFxubW0venN3YXAuYzoxNjEyOiAqIHpzd2FwX2xvYWQoKSAtIGxvYWQgYSBmb2xpbyBmcm9tIHpzd2FwXFxubW0venN3YXAuYy0xNjEzLSAqIEBmb2xpbzogZm9saW8gdG8gbG9hZFxcbi0tXFxubW0venN3YXAuYy0xNjMwLSAqL1xcbm1tL3pzd2FwLmM6MTYzMTppbnQgenN3YXBfbG9hZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTYzMi17XFxuLS1cXG5tbS96c3dhcC5jLTE2ODMtXFxubW0venN3YXAuYzoxNjg0OnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXFxubW0venN3YXAuYy0xNjg1LXtcXG4tLVxcbm1tL3pzd2FwLmM9MTc1MD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE3NTEte1xcbm1tL3pzd2FwLmM6MTc1MjpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE3NTMtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE3NTc9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzU4LXtcXG5tbS96c3dhcC5jOjE3NTk6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNzYwLVxcdHJldHVybiAwO1xcbi0tXFxubW0venN3YXAuYz0xNzY1PXN0YXRpYyBpbnQgenN3YXBfZGVidWdmc19pbml0KHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE3NzItXFx0ZGVidWdmc19jcmVhdGVfdTY0KFxcXCJwb29sX2xpbWl0X2hpdFxcXCIsIDA0NDQsXFxubW0venN3YXAuYzoxNzczOlxcdFxcdFxcdCAgIHpzd2FwX2RlYnVnZnNfcm9vdCwgXFx1MDAyNnpzd2FwX3Bvb2xfbGltaXRfaGl0KTtcXG5tbS96c3dhcC5jLTE3NzQtXFx0ZGVidWdmc19jcmVhdGVfdTY0KFxcXCJyZWplY3RfcmVjbGFpbV9mYWlsXFxcIiwgMDQ0NCxcXG4tLVxcbm1tL3pzd2FwLmM9MTgwOD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE4MzktXFxubW0venN3YXAuYzoxODQwOlxcdHBvb2wgPSBfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKCk7XFxubW0venN3YXAuYy0xODQxLVxcdGlmIChwb29sKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ3OjU4LjUxNTI1ODEyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDEwMTk4NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGNoYW5nZSBpbiBjb2RlIHdlIGNhbiBhY3R1YWxseSBnZXQgYXQgdGhyb3VnaCBmdXp6aW5nPyBZZXMsIGFic29sdXRlbHkuIFRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB3aXRoaW4gYG1tL3pzd2FwLmNgIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0J3MgdXNlZCB3aGVuIHN3YXAgb3IgenN3YXAgaXMgYWN0aXZlLCB3aGljaCBpcyBjb21tb24gaW4gYm90aCBRRU1VIGFuZCBzdGFuZGFyZCBlbnZpcm9ubWVudHMsIHNvIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkZ1cnRoZXJtb3JlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBkYXRhIHN0cnVjdHVyZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVwbGFjaW5nIGEgcG9pbnRlciBpbiBgenN3YXBfZW50cnlgIChzcGVjaWZpY2FsbHksIGEgcG9pbnRlciB0byBgenN3YXBfcG9vbGApIHdpdGggYSBgcG9vbF9pZHhgLCBzdG9yaW5nIHBvb2xzIGluIGFuIHhhcnJheSBjYWxsZWQgYHpzd2FwX3Bvb2xzYCwgdXNpbmcgYHJjdV93b3JrYCBmb3IgYXN5bmNocm9ub3VzIHBvb2wgcmVsZWFzZSwgYW5kIG1vc3Qgc2lnbmlmaWNhbnRseSwgY2hhbmdpbmcgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbCB3aXRoIGB4YV9sb2NrX2JoYCwgYHJjdV9kZXJlZmVyZW5jZV9jaGVja2AsIGFuZCBgcmN1X2Fzc2lnbl9wb2ludGVyYC4gIFdlIGFsc28gc2VlIGNoYW5nZXMgdG8gZXJyb3IgcGF0aHMgYW5kIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVja3MuIFRoaXMgbGV2ZWwgb2YgcmVzdHJ1Y3R1cmluZyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbG9uZyB3aXRoIGNvbmN1cnJlbmN5IGNoYW5nZXMsICpzY3JlYW1zKiBcInBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYnVncyFcIiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgd2UgbmVlZCB0byBpZGVudGlmeSBGb2N1c1N5bWJvbHMg4oCTIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0YXJnZXQgb3VyIGZ1enppbmcgZWZmb3J0cy4gIEkgd2FudCB0byBmb2N1cyBvbiBmdW5jdGlvbnMgKmRpcmVjdGx5KiBpbXBsZW1lbnRpbmcgb3IgZXhlcmNpc2luZyB0aGUgYWx0ZXJlZCBsb2dpYy4gTGV0J3Mgc2VlLi4uIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmU6XG5cbiogICBgenN3YXBfc3RvcmVgIChvciBgenN3YXBfc3RvcmVfcGFnZWApXG4qICAgYHpzd2FwX2xvYWRgIChjcnVjaWFsbHksIHRoaXMgY2FsbHMgYHpzd2FwX2RlY29tcHJlc3NgLCBhbmQgYHpzd2FwX2VudHJ5X2ZyZWVgKVxuKiAgIGB6c3dhcF9pbnZhbGlkYXRlYCAod2hpY2ggYWxzbyBjYWxscyBgenN3YXBfZW50cnlfZnJlZWApXG4qICAgYHpzd2FwX3RvdGFsX3BhZ2VzYFxuKiAgIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGBcbiogICBgenN3YXBfcG9vbF9jcmVhdGVgXG4qICAgYF9fenN3YXBfcG9vbF9lbXB0eWBcbiogICBgX196c3dhcF9wb29sX3JlbGVhc2VgXG4qICAgYHpzd2FwX2VudHJ5X2ZyZWVgXG4qICAgYHpzd2FwX2RlY29tcHJlc3NgXG4qICAgYHpzd2FwX2VudHJ5X3Bvb2xgXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCBjYWxsYWJsZSBhbmQgZmluZGFibGUuICBMb29raW5nIGF0IHRoZSBzeW1ib2xzOlxuXG4qICAgVGhlICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCwgYW5kIGFyZSBhdmFpbGFibGUgZm9yIHVzIHRvIGNhbGwsIGFyZSBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYW5kIGB6c3dhcF90b3RhbF9wYWdlc2AuICBUaGVzZSBhcmUgZ29vZCBjYW5kaWRhdGVzLlxuKiAgIFRoZSAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfZW50cnlfcG9vbGAsIGB6c3dhcF9zdG9yZV9wYWdlYCwgYF9fenN3YXBfcG9vbF9lbXB0eWAsIGBfX3pzd2FwX3Bvb2xfcmVsZWFzZWAsIGFuZCBgenN3YXBfcG9vbF9jcmVhdGVgLiBXaGlsZSB0aGV5IG1heSBiZSBtb3JlIGRpZmZpY3VsdCB0byBjYWxsIGRpcmVjdGx5LCB3ZSBzdGlsbCBuZWVkIHRvIHRha2UgdGhlbSBpbnRvIGNvbnNpZGVyYXRpb24sIGFzIHRoZXkgbWF5IGJlIGNhbGxlZCBmcm9tIGZ1bmN0aW9ucyB0aGF0ICphcmUqIGV4cG9zZWQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBmb3IgY2FsbHMgdG8gYHpzd2FwX2VudHJ5X2ZyZWVgLCBgenN3YXBfZGVjb21wcmVzc2AsIGFuZCBzbyBvbiwgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgenN3YXAgc3lzdGVtLiBMZXQncyBleGFtaW5lIGlmIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGhhcyBhbnkgYmVhcmluZyBvbiB0aGUgZm9jdXMgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MDQuOTI1NDU5OTI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQxODA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTk0OT1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTEwMTQtICovXFxubW0venN3YXAuYzoxMDE1OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxubW0venN3YXAuYy0xMDE2LVxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmM9MTExOD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbi0tXFxubW0venN3YXAuYy0xMTQxLVxcdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcXG5tbS96c3dhcC5jOjExNDI6XFx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxcbm1tL3pzd2FwLmMtMTE0My1cXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSdzXFxuLS1cXG5tbS96c3dhcC5jLTExNzYtXFxubW0venN3YXAuYzoxMTc3OlxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG5tbS96c3dhcC5jLTExNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjA0Ljk3NTg4MTgzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQzODA5NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpzd2FwIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgdGltZSB0byByZWFsbHkgZGlnIGludG8gdGhpcyBac3dhcCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZXhhbWluZSBhIGZldyBrZXkgbWV0cmljczogSSBuZWVkIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgYHpzd2FwX2xvYWRgLCBgenN3YXBfc3RvcmVgLCBgenN3YXBfaW52YWxpZGF0ZWAsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXRgLCBhbmQgYHpzd2FwX3RvdGFsX3BhZ2VzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uYWwgc3RhdHVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgIGFuZCB0aGVuIGRyaWxsIGRvd24gaW50byBgbW0vS2NvbmZpZ2AgdG8gZ2V0IHRoZSBjb3JlIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCBgQ09ORklHX1pTV0FQYCBpcyB0aGUgcHJpbWFyeSBvcHRpb24sIGFuZCB0aGF0IGl0IGRlcGVuZHMgb24gYENPTkZJR19TV0FQYC4gSXQgYWxzbyAqc2VsZWN0cyogYENPTkZJR19DUllQVE9gIGFuZCBgQ09ORklHX1pTTUFMTE9DYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1pTV0FQYCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvbiBgQ09ORklHX1NXQVBgLCBgQ09ORklHX0NSWVBUT2AgYW5kIGBDT05GSUdfWlNNQUxMT0NgIGFyZSAqYWxsKiB0aGF0J3MgcmVxdWlyZWQsIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCBtYWtlcyBzZW5zZSwgb2YgY291cnNlLCB0aGF0IGBaU1dBUGAgZGVwZW5kcyBvbiBgU1dBUGAsIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBjZXJ0YWluLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGZvciBhbnkgb3RoZXIgcG9zc2libGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEknbGwgbmVlZCB0byBsb29rIHRocm91Z2ggYG1tL3pzd2FwLmNgIGFuZCBzZWFyY2ggZm9yIGFueSBvdGhlciBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgdHJpZ2dlciBvdGhlciBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgaW1wYWN0IG15IGFuYWx5c2lzIG9yIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MDcuODE5Njk0MjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2MDI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmfCNpZiBJU19FTkFCTEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz0xNzE4PXZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG4tLVxcbm1tL3pzd2FwLmMtMTczNy0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm1tL3pzd2FwLmM6MTczODojaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0venN3YXAuYy0xNzM5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjA4LjA3MDMwNTk4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTM2NTE5MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyaWFnZSBSZXZpZXc6IFpTV0FQIFBhdGNoKipcblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFllcCwgXCJTV0FQXCIgYW5kIFwiWlNXQVBcIiBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGNvbmZpZ3MgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBsZXR0ZXIuXG5cbkFscmlnaHQsIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zLi4uIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNoYW5nZXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGl04oCZcyB0b3VjaGluZyBgbW0venN3YXAuY2AgYW5kIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IHpzd2FwIHBvb2xzIGFyZSBtYW5hZ2VkLiBFc3NlbnRpYWxseSwgd2UncmUgbW92aW5nIGZyb20gZGlyZWN0IHBvaW50ZXJzIHdpdGhpbiBgenN3YXBfZW50cnlgIHRvIHBvb2wgaW5kaWNlcyB2aWEgYW4gWEFycmF5LiBUaGF0IGFsc28gaW5jbHVkZXMgYWx0ZXJpbmcgUkNVLXByb3RlY3RlZCBsb29rdXAgYW5kIHRlYXJkb3duIHdpdGggYHJjdV93b3JrYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHBhdGhzLiBTb3VuZHMgbGlrZSBhIGdvb2QgdGFyZ2V0LlxuXG5FbmFibGVDb25maWdzIGNvbmZpcm1zIHdoYXQgSSBhbHJlYWR5IHN1c3BlY3RlZCwgYW5kIHRoZSBGb2N1c1N5bWJvbHMgbGlzdCBoaXRzIGFsbCB0aGUgY3JpdGljYWwgenN3YXAgZnVuY3Rpb25zOiBgenN3YXBfc3RvcmVgLCBgenN3YXBfbG9hZGAsIGB6c3dhcF9pbnZhbGlkYXRlYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldGAsIGB6c3dhcF90b3RhbF9wYWdlc2AsIGB6c3dhcF9lbnRyeV9mcmVlYCwgYHpzd2FwX2RlY29tcHJlc3NgLCBgenN3YXBfc3RvcmVfcGFnZWAsIGBfX3pzd2FwX3Bvb2xfZW1wdHlgLCBhbmQgYF9fenN3YXBfcG9vbF9yZWxlYXNlYC4gVGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCwgY292ZXJpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgenN3YXAgcG9vbCBtYW5hZ2VtZW50LlxuXG5SaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MzcsIk91dHB1dFRva2VucyI6MjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjExLjIwNjgyODQ2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTc0MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCIsXG4gICAgXCJ6c3dhcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgICBcInpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0XCIsXG4gICAgXCJ6c3dhcF90b3RhbF9wYWdlc1wiLFxuICAgIFwienN3YXBfZW50cnlfZnJlZVwiLFxuICAgIFwienN3YXBfZGVjb21wcmVzc1wiLFxuICAgIFwienN3YXBfc3RvcmVfcGFnZVwiLFxuICAgIFwiX196c3dhcF9wb29sX2VtcHR5XCIsXG4gICAgXCJfX3pzd2FwX3Bvb2xfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3pzd2FwLmMgYnkgcmVwbGFjaW5nIGRpcmVjdCBwb29sIHBvaW50ZXJzIGluIHN0cnVjdCB6c3dhcF9lbnRyeSB3aXRoIHBvb2wgaW5kaWNlcyB0cmFja2VkIGluIGFuIFhBcnJheS4gSXQgdXBkYXRlcyBSQ1UtcHJvdGVjdGVkIHBvb2wgbG9va3VwcywgY2hhbmdlcyB0ZWFyZG93biB0byB1c2UgcmN1X3dvcmssIGFkanVzdHMgY29uY3VycmVuY3kgbG9ja2luZyB3aXRoIFhBcnJheSBsb2NrcywgYW5kIG1vZGlmaWVzIHRoZSBzdG9yZS9kZWNvbXByZXNzL2ZyZWUvd3JpdGViYWNrIGxpZmVjeWNsZSBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiLFxuICAgIFwienN3YXBfaW52YWxpZGF0ZVwiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gICAgXCJ6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldFwiLFxuICAgIFwienN3YXBfdG90YWxfcGFnZXNcIixcbiAgICBcInpzd2FwX2VudHJ5X2ZyZWVcIixcbiAgICBcInpzd2FwX2RlY29tcHJlc3NcIixcbiAgICBcInpzd2FwX3N0b3JlX3BhZ2VcIixcbiAgICBcIl9fenN3YXBfcG9vbF9lbXB0eVwiLFxuICAgIFwiX196c3dhcF9wb29sX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS96c3dhcC5jIGJ5IHJlcGxhY2luZyBkaXJlY3QgcG9vbCBwb2ludGVycyBpbiBzdHJ1Y3QgenN3YXBfZW50cnkgd2l0aCBwb29sIGluZGljZXMgdHJhY2tlZCBpbiBhbiBYQXJyYXkuIEl0IHVwZGF0ZXMgUkNVLXByb3RlY3RlZCBwb29sIGxvb2t1cHMsIGNoYW5nZXMgdGVhcmRvd24gdG8gdXNlIHJjdV93b3JrLCBhZGp1c3RzIGNvbmN1cnJlbmN5IGxvY2tpbmcgd2l0aCBYQXJyYXkgbG9ja3MsIGFuZCBtb2RpZmllcyB0aGUgc3RvcmUvZGVjb21wcmVzcy9mcmVlL3dyaXRlYmFjayBsaWZlY3ljbGUgcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0ODoxMS4yODYwMTAxNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzY0MDUxMDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MTEuMjg2NDg5MDYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgzNjM1NjkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6c3dhcCBwb29sIG1hbmFnZW1lbnQgYnkgcmVwbGFjaW5nIHRoZSBsaW5rZWQgbGlzdCBvZiBwb29scyBhbmQgOC1ieXRlIHBvb2wgcG9pbnRlciBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCB3aXRoIGFuIFhBcnJheSBsb29rdXAgdGFibGUgYW5kIGEgMS1ieXRlIHBvb2wgaW5kZXggKGBwb29sX2lkeGApLCBhbG9uZ3NpZGUgdHJhbnNpdGlvbmluZyBwb29sIGNsZWFudXAgdG8gYHJjdV93b3JrYC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIGZpZWxkcyBpbiBgc3RydWN0IHpzd2FwX2VudHJ5YCBhbmQgYHN0cnVjdCB6c3dhcF9wb29sYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBwdWJsaXNoZWQgb3IgYWNjZXNzZWQuIGBwb29sX2lkeGAgaXMgc2V0IHVwb24gY29tcHJlc3Npb24gc3VjY2VzcyBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnkgaW50byB0aGUgc3dhcCBYQXJyYXkuXFxuMi4gVXNlci1zcGFjZSBJbmZvIExlYWtzOiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIChgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIHN5c2NhbGwgcmV0dXJuLCBldGMuKS5cXG4zLiBSZWxldmFudCBCdWcgQ2xhc3NlczogQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGxpZmV0aW1lL2dyYWNlLXBlcmlvZCB0cmFja2luZywgWEFycmF5IGluZGV4aW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwNDFmZWRmYTJlY2FlNjAyNjU1Y2RkMWZiYmJlZTQ5NzU4NGVjOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDIzOjQ3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGYzYWUzYzgxZTQ4ZWEuLjMxY2YwZWY0M2QyMzYgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC96c21hbGxvYy5oXHUwMDNlXG4gXG5AQCAtMTU0LDEyICsxNTUsMjQgQEAgc3RydWN0IHpzd2FwX3Bvb2wge1xuIFx0c3RydWN0IHpzX3Bvb2wgKnpzX3Bvb2w7XG4gXHRzdHJ1Y3QgY3J5cHRvX2Fjb21wX2N0eCBfX3BlcmNwdSAqYWNvbXBfY3R4O1xuIFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbitcdHN0cnVjdCByY3Vfd29yayByZWxlYXNlX3J3b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbitcdHU4IGlkeDtcbiBcdGNoYXIgdGZtX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07XG4gfTtcbiBcbisvKlxuKyAqIExpdmUgcG9vbHMga2V5ZWQgYnkgaWQgKDEuLlpTV0FQX01BWF9QT09MX0lEKS4gIFhBX0ZMQUdTX0FMTE9DMSBrZWVwc1xuKyAqIHRoZSByZXNlcnZlZCBpZCAwIHVuYWxsb2NhdGVkLCBzbyBsb29raW5nIGl0IHVwIG5ldmVyIGFsaWFzZXMgYSBsaXZlXG4rICogcG9vbC4gIFhBX0ZMQUdTX0xPQ0tfQkggbWFrZXMgdGhlIHhhX2xvY2sgc29mdGlycS1zYWZlOiBpdCBpcyB0YWtlblxuKyAqIGZyb20gX196c3dhcF9wb29sX2VtcHR5KCksIHdoaWNoIHJ1bnMgZnJvbSBhIHBlcmNwdV9yZWYgcmVsZWFzZVxuKyAqIGNhbGxiYWNrIGluIHNvZnRpcnEgY29udGV4dC5cbisgKi9cbisjZGVmaW5lIFpTV0FQX0ZJUlNUX1BPT0xfSUQgMVxuKyNkZWZpbmUgWlNXQVBfTUFYX1BPT0xfSUQgVThfTUFYXG4rc3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoenN3YXBfcG9vbHMsIFhBX0ZMQUdTX0FMTE9DMSB8IFhBX0ZMQUdTX0xPQ0tfQkgpO1xuK3N0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCBfX3JjdSAqenN3YXBfY3VycmVudF9wb29sO1xuK1xuIC8qIEdsb2JhbCBMUlUgbGlzdHMgc2hhcmVkIGJ5IGFsbCB6c3dhcCBwb29scy4gKi9cbiBzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IHpzd2FwX2xpc3RfbHJ1O1xuIFxuQEAgLTE4Miw3ICsxOTUsNyBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9zaHJpbmtlcjtcbiAgKiAgICAgICAgICAgICAgd3JpdGViYWNrIGxvZ2ljLiBUaGUgZW50cnkgaXMgb25seSByZWNsYWltZWQgYnkgdGhlIHdyaXRlYmFja1xuICAqICAgICAgICAgICAgICBsb2dpYyBpZiByZWZlcmVuY2VkIGlzIHVuc2V0LiBTZWUgY29tbWVudHMgaW4gdGhlIHNocmlua2VyXG4gICogICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGNvbnRleHQuXG4tICogcG9vbCAtIHRoZSB6c3dhcF9wb29sIHRoZSBlbnRyeSdzIGRhdGEgaXMgaW5cbisgKiBwb29sX2lkeCAtIGlkIG9mIHRoZSB6c3dhcF9wb29sIHRoYXQgdGhlIGVudHJ5J3MgZGF0YSBpcyBpbi5cbiAgKiBoYW5kbGUgLSB6c21hbGxvYyBhbGxvY2F0aW9uIGhhbmRsZSB0aGF0IHN0b3JlcyB0aGUgY29tcHJlc3NlZCBwYWdlIGRhdGFcbiAgKiBvYmpjZyAtIHRoZSBvYmpfY2dyb3VwIHRoYXQgdGhlIGNvbXByZXNzZWQgbWVtb3J5IGlzIGNoYXJnZWQgdG9cbiAgKiBscnUgLSBoYW5kbGUgdG8gdGhlIHBvb2wncyBscnUgdXNlZCB0byBldmljdCBwYWdlcy5cbkBAIC0xOTEsMTkgKzIwNCwzMCBAQCBzdHJ1Y3QgenN3YXBfZW50cnkge1xuIFx0c3dwX2VudHJ5X3Qgc3dwZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xuIFx0Ym9vbCByZWZlcmVuY2VkO1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1OCBwb29sX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBscnU7XG4gfTtcbiBcbisvKlxuKyAqIFRoZSBwb29sIHN0YXlzIGFsaXZlIGFmdGVyIHRoaXMgcmV0dXJucyBiZWNhdXNlIGEgc3RvcmVkIGVudHJ5IGhvbGRzIGFcbisgKiByZWZlcmVuY2UgdG8gaXRzIHBvb2wgKHRha2VuIGluIHpzd2FwX3N0b3JlX3BhZ2UoKSkuXG4rICovXG4rc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9lbnRyeV9wb29sKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4re1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwb29sID0geGFfbG9hZChcdTAwMjZ6c3dhcF9wb29scywgZW50cnktXHUwMDNlcG9vbF9pZHgpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcG9vbDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB4YXJyYXkgKnpzd2FwX3RyZWVzW01BWF9TV0FQRklMRVNdO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfenN3YXBfdHJlZXNbTUFYX1NXQVBGSUxFU107XG4gXG4tLyogUkNVLXByb3RlY3RlZCBpdGVyYXRpb24gKi9cbi1zdGF0aWMgTElTVF9IRUFEKHpzd2FwX3Bvb2xzKTtcbi0vKiBwcm90ZWN0cyB6c3dhcF9wb29scyBsaXN0IG1vZGlmaWNhdGlvbiAqL1xuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soenN3YXBfcG9vbHNfbG9jayk7XG4gLyogcG9vbCBjb3VudGVyIHRvIHByb3ZpZGUgdW5pcXVlIG5hbWVzIHRvIHpzbWFsbG9jICovXG4gc3RhdGljIGF0b21pY190IHpzd2FwX3Bvb2xzX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7XG4gXG5AQCAtMjc1LDYgKzI5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jcmVhdGUoY2hhciAqY29tcHJlc3NvcilcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFx0Y2hhciBuYW1lWzM4XTsgLyogJ3pzd2FwJyArIDMyIGNoYXIgKG1heCkgbnVtICsgXFwwICovXG4gXHRpbnQgcmV0LCBjcHU7XG4rXHR1MzIgaWQ7XG4gXG4gXHRpZiAoIXpzd2FwX2hhc19wb29sIFx1MDAyNlx1MDAyNiAhc3RyY21wKGNvbXByZXNzb3IsIFpTV0FQX1BBUkFNX1VOU0VUKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMzIwLDEyICszNDUsMjQgQEAgc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2NyZWF0ZShjaGFyICpjb21wcmVzc29yKVxuIFx0XHRcdCAgICAgIFBFUkNQVV9SRUZfQUxMT1dfUkVJTklULCBHRlBfS0VSTkVMKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gcmVmX2ZhaWw7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb29sLVx1MDAzZWxpc3QpO1xuK1xuK1x0cmV0ID0geGFfYWxsb2NfYmgoXHUwMDI2enN3YXBfcG9vbHMsIFx1MDAyNmlkLCBwb29sLFxuK1x0XHRcdCAgWEFfTElNSVQoWlNXQVBfRklSU1RfUE9PTF9JRCwgWlNXQVBfTUFYX1BPT0xfSUQpLFxuK1x0XHRcdCAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuK1x0XHRcdHByX2VycihcImNhbm5vdCBhbGxvY2F0ZSBwb29sIGlkIChtYXggJWQgbGl2ZSBwb29scylcXG5cIixcbitcdFx0XHQgICAgICAgWlNXQVBfTUFYX1BPT0xfSUQgLSBaU1dBUF9GSVJTVF9QT09MX0lEICsgMSk7XG4rXHRcdGdvdG8geGFfZmFpbDtcbitcdH1cbitcdHBvb2wtXHUwMDNlaWR4ID0gaWQ7XG4gXG4gXHR6c3dhcF9wb29sX2RlYnVnKFwiY3JlYXRlZFwiLCBwb29sKTtcbiBcbiBcdHJldHVybiBwb29sO1xuIFxuK3hhX2ZhaWw6XG4rXHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2cG9vbC1cdTAwM2VyZWYpO1xuIHJlZl9mYWlsOlxuIFx0Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKENQVUhQX01NX1pTV1BfUE9PTF9QUkVQQVJFLCBcdTAwMjZwb29sLVx1MDAzZW5vZGUpO1xuIFxuQEAgLTM3OSwxNiArNDE2LDE0IEBAIHN0YXRpYyB2b2lkIHpzd2FwX3Bvb2xfZGVzdHJveShzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcbiBcbiBzdGF0aWMgdm9pZCBfX3pzd2FwX3Bvb2xfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpwb29sKSxcbi1cdFx0XHRcdFx0XHRyZWxlYXNlX3dvcmspO1xuLVxuLVx0c3luY2hyb25pemVfcmN1KCk7XG4rXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbitcdFx0XHRcdFx0ICAgICAgIHR5cGVvZigqcG9vbCksIHJlbGVhc2VfcndvcmspO1xuIFxuIFx0Lyogbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gYWJsZSB0byBnZXQgYSByZWYuLi4gKi9cbiBcdFdBUk5fT04oIXBlcmNwdV9yZWZfaXNfemVybyhcdTAwMjZwb29sLVx1MDAzZXJlZikpO1xuIFx0cGVyY3B1X3JlZl9leGl0KFx1MDAyNnBvb2wtXHUwMDNlcmVmKTtcbiBcbi1cdC8qIHBvb2wgaXMgbm93IG9mZiB6c3dhcF9wb29scyBsaXN0IGFuZCBoYXMgbm8gcmVmZXJlbmNlcy4gKi9cbitcdC8qIFRoZSBwb29sIGlzIG5vIGxvbmdlciBpbiB6c3dhcF9wb29scyBhbmQgaGFzIG5vIHJlZmVyZW5jZXMuICovXG4gXHR6c3dhcF9wb29sX2Rlc3Ryb3kocG9vbCk7XG4gfVxuIFxuQEAgLTQwMCwxNiArNDM1LDE2IEBAIHN0YXRpYyB2b2lkIF9fenN3YXBfcG9vbF9lbXB0eShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuIFxuIFx0cG9vbCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqcG9vbCksIHJlZik7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcbiBcdFdBUk5fT04ocG9vbCA9PSB6c3dhcF9wb29sX2N1cnJlbnQoKSk7XG4gXG4tXHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbitcdF9feGFfZXJhc2UoXHUwMDI2enN3YXBfcG9vbHMsIHBvb2wtXHUwMDNlaWR4KTtcbiBcbi1cdElOSVRfV09SSyhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2Vfd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuLVx0c2NoZWR1bGVfd29yayhcdTAwMjZwb29sLVx1MDAzZXJlbGVhc2Vfd29yayk7XG4rXHRJTklUX1JDVV9XT1JLKFx1MDAyNnBvb2wtXHUwMDNlcmVsZWFzZV9yd29yaywgX196c3dhcF9wb29sX3JlbGVhc2UpO1xuK1x0cXVldWVfcmN1X3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2cG9vbC1cdTAwM2VyZWxlYXNlX3J3b3JrKTtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX211c3RfY2hlY2sgenN3YXBfcG9vbF90cnlnZXQoc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wpXG5AQCAtNDM1LDcgKzQ3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtcbiBcbi1cdHBvb2wgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnpzd2FwX3Bvb2xzLCB0eXBlb2YoKnBvb2wpLCBsaXN0KTtcbitcdHBvb2wgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soenN3YXBfY3VycmVudF9wb29sLFxuK1x0XHRcdFx0ICAgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2enN3YXBfcG9vbHMueGFfbG9jaykpO1xuIFx0V0FSTl9PTkNFKCFwb29sIFx1MDAyNlx1MDAyNiB6c3dhcF9oYXNfcG9vbCxcbiBcdFx0ICBcIiVzOiBubyBwYWdlIHN0b3JhZ2UgcG9vbCFcXG5cIiwgX19mdW5jX18pO1xuIFxuQEAgLTQ0NCw3ICs0ODAsNyBAQCBzdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jdXJyZW50KHZvaWQpXG4gXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2N1cnJlbnQodm9pZClcbiB7XG4tXHRhc3NlcnRfc3Bpbl9sb2NrZWQoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpzd2FwX3Bvb2xzLnhhX2xvY2spO1xuIFxuIFx0cmV0dXJuIF9fenN3YXBfcG9vbF9jdXJyZW50KCk7XG4gfVxuQEAgLTQ2NCwxNCArNTAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqenN3YXBfcG9vbF9jdXJyZW50X2dldCh2b2lkKVxuIFx0cmV0dXJuIHBvb2w7XG4gfVxuIFxuLS8qIHR5cGUgYW5kIGNvbXByZXNzb3IgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi9cbisvKiBjb21wcmVzc29yIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkICovXG4gc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKmNvbXByZXNzb3IpXG4ge1xuIFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7XG4rXHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuLVx0YXNzZXJ0X3NwaW5fbG9ja2VkKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6c3dhcF9wb29scy54YV9sb2NrKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsIFx1MDAyNnpzd2FwX3Bvb2xzLCBsaXN0KSB7XG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpIHtcbiBcdFx0aWYgKHN0cmNtcChwb29sLVx1MDAzZXRmbV9uYW1lLCBjb21wcmVzc29yKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgd2UgY2FuJ3QgZ2V0IGl0LCBpdCdzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqL1xuQEAgLTQ5Nyw5ICs1MzQsMTUgQEAgdW5zaWduZWQgbG9uZyB6c3dhcF90b3RhbF9wYWdlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sO1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGlkO1xuIFxuK1x0LypcbitcdCAqIHJjdV9yZWFkX2xvY2soKSBpcyByZXF1aXJlZCBoZXJlLCBub3QganVzdCBmb3IgeGFfZm9yX2VhY2goKTogaXQgYWxzb1xuK1x0ICoga2VlcHMgZWFjaCBwb29sIGFsaXZlIHdoaWxlIGl0IGlzIGRlcmVmZXJlbmNlZCwgc2luY2UgYSBjb25jdXJyZW50bHlcbitcdCAqIHJldGlyZWQgcG9vbCBpcyBmcmVlZCB2aWEgcXVldWVfcmN1X3dvcmsoKSBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbitcdCAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9vbCwgXHUwMDI2enN3YXBfcG9vbHMsIGxpc3QpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZ6c3dhcF9wb29scywgaWQsIHBvb2wpXG4gXHRcdHRvdGFsICs9IHpzX2dldF90b3RhbF9wYWdlcyhwb29sLVx1MDAzZXpzX3Bvb2wpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG5AQCAtNTU2LDIwICs1OTksMTcgQEAgc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4tXG4rXHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcdHBvb2wgPSB6c3dhcF9wb29sX2ZpbmRfZ2V0KHMpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0enN3YXBfcG9vbF9kZWJ1ZyhcInVzaW5nIGV4aXN0aW5nXCIsIHBvb2wpO1xuIFx0XHRXQVJOX09OKHBvb2wgPT0genN3YXBfcG9vbF9jdXJyZW50KCkpO1xuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0KTtcbiBcdH1cbitcdHhhX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29scyk7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ6c3dhcF9wb29sc19sb2NrKTtcbi1cbi1cdGlmICghcG9vbClcbitcdGlmICghcG9vbCkge1xuIFx0XHRwb29sID0genN3YXBfcG9vbF9jcmVhdGUocyk7XG4tXHRlbHNlIHtcbitcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFJlc3RvcmUgdGhlIGluaXRpYWwgcmVmIGRyb3BwZWQgYnkgcGVyY3B1X3JlZl9raWxsKClcbiBcdFx0ICogd2hlbiB0aGUgcG9vbCB3YXMgZGVjb21taXNzaW9uZWQgYW5kIHN3aXRjaCBpdCBhZ2FpblxuQEAgLTU4NiwyMyArNjI2LDE3IEBAIHN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtXG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2enN3YXBfcG9vbHNfbG9jayk7XG4rXHR4YV9sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdHB1dF9wb29sID0genN3YXBfcG9vbF9jdXJyZW50KCk7XG4tXHRcdGxpc3RfYWRkX3JjdShcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAocG9vbCkge1xuLVx0XHQvKlxuLVx0XHQgKiBBZGQgdGhlIHBvc3NpYmx5IHByZS1leGlzdGluZyBwb29sIHRvIHRoZSBlbmQgb2YgdGhlIHBvb2xzXG4tXHRcdCAqIGxpc3Q7IGlmIGl0J3MgbmV3IChhbmQgZW1wdHkpIHRoZW4gaXQnbGwgYmUgcmVtb3ZlZCBhbmRcbi1cdFx0ICogZGVzdHJveWVkIGJ5IHRoZSBwdXQgYWZ0ZXIgd2UgZHJvcCB0aGUgbG9ja1xuLVx0XHQgKi9cbi1cdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2VsaXN0LCBcdTAwMjZ6c3dhcF9wb29scyk7XG4gXHRcdHB1dF9wb29sID0gcG9vbDtcbiBcdH1cbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzX2xvY2spO1xuK1x0eGFfdW5sb2NrX2JoKFx1MDAyNnpzd2FwX3Bvb2xzKTtcbiBcbiBcdC8qXG4gXHQgKiBEcm9wIHRoZSByZWYgZnJvbSBlaXRoZXIgdGhlIG9sZCBjdXJyZW50IHBvb2wsXG5AQCAtNzUxLDkgKzc4NSwxMyBAQCBzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4gICovXG4gc3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuIHtcbitcdHN0cnVjdCB6c3dhcF9wb29sICpwb29sID0genN3YXBfZW50cnlfcG9vbChlbnRyeSk7XG4rXG4gXHR6c3dhcF9scnVfZGVsKGVudHJ5KTtcbi1cdHpzX2ZyZWUoZW50cnktXHUwMDNlcG9vbC1cdTAwM2V6c19wb29sLCBlbnRyeS1cdTAwM2VoYW5kbGUpO1xuLVx0enN3YXBfcG9vbF9wdXQoZW50cnktXHUwMDNlcG9vbCk7XG4rXHRpZiAoIVdBUk5fT05fT05DRSghcG9vbCkpIHtcbitcdFx0enNfZnJlZShwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSk7XG4rXHRcdHpzd2FwX3Bvb2xfcHV0KHBvb2wpO1xuK1x0fVxuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKSB7XG4gXHRcdG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoZW50cnktXHUwMDNlb2JqY2csIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHRcdG9ial9jZ3JvdXBfcHV0KGVudHJ5LVx1MDAzZW9iamNnKTtcbkBAIC05MTAsMTIgKzk0OCwxNSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSBlbnRyeS1cdTAwM2Vwb29sO1xuK1x0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xuIFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcbiBcdGludCByZXQgPSAwLCBkbGVuO1xuIFxuK1x0aWYgKFdBUk5fT05fT05DRSghcG9vbCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGFjb21wX2N0eCA9IHJhd19jcHVfcHRyKHBvb2wtXHUwMDNlYWNvbXBfY3R4KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2YWNvbXBfY3R4LVx1MDAzZW11dGV4KTtcbiBcdHpzX29ial9yZWFkX3NnX2JlZ2luKHBvb2wtXHUwMDNlenNfcG9vbCwgZW50cnktXHUwMDNlaGFuZGxlLCBpbnB1dCwgZW50cnktXHUwMDNlbGVuZ3RoKTtcbkBAIC05NTEsNyArOTkyLDcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cHJfYWxlcnRfcmF0ZWxpbWl0ZWQoXCJEZWNvbXByZXNzaW9uIGVycm9yIGZyb20genN3YXAgKCVkOiVsdSAlcyAldS1cdTAwM2UlZClcXG5cIixcbiBcdFx0XHRcdFx0XHRzd3BfdHlwZShlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4gXHRcdFx0XHRcdFx0c3dwX29mZnNldChlbnRyeS1cdTAwM2Vzd3BlbnRyeSksXG4tXHRcdFx0XHRcdFx0ZW50cnktXHUwMDNlcG9vbC1cdTAwM2V0Zm1fbmFtZSxcbitcdFx0XHRcdFx0XHRwb29sLVx1MDAzZXRmbV9uYW1lLFxuIFx0XHRcdFx0XHRcdGVudHJ5LVx1MDAzZWxlbmd0aCwgZGxlbik7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTE0MDksNiArMTQ1MCwxNiBAQCBzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0aWYgKCF6c3dhcF9jb21wcmVzcyhwYWdlLCBlbnRyeSwgcG9vbCkpXG4gXHRcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xuIFxuK1x0LypcbitcdCAqIFNldCBwb29sX2lkeCBiZWZvcmUgcHVibGlzaGluZyB0aGUgZW50cnk6IGNvbXByZXNzaW9uIGhhc1xuK1x0ICogc3VjY2VlZGVkIGFuZCB0aGUgcG9vbCBpcyBhbHJlYWR5IHBpbm5lZCBieSB0aGlzIHN0b3JlLCBzbyB0aGUgaWQgaXNcbitcdCAqIGZpbmFsLiAgRG9pbmcgaXQgaGVyZSAocmF0aGVyIHRoYW4gYWZ0ZXIgeGFfc3RvcmUoKSkgbWVhbnMgdGhlIGVudHJ5XG4rXHQgKiBpcyBuZXZlciBicmllZmx5IHZpc2libGUgd2l0aCBhIHN0YWxlIHBvb2xfaWR4IGxlZnQgb3ZlciBmcm9tIHNsYWJcbitcdCAqIHJldXNlLCB3aGljaCB6c3dhcF9lbnRyeV9wb29sKCkgd291bGQgb3RoZXJ3aXNlIHJlc29sdmUgdG8gYW5cbitcdCAqIHVucmVsYXRlZCBsaXZlIHBvb2wuXG4rXHQgKi9cbitcdGVudHJ5LVx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cdTAwM2VpZHg7XG4rXG4gXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXG4gXHRcdCAgICAgICBzd3Bfb2Zmc2V0KHBhZ2Vfc3dwZW50cnkpLFxuIFx0XHQgICAgICAgZW50cnksIEdGUF9LRVJORUwpO1xuQEAgLTE0NTQsNyArMTUwNSw2IEBAIHN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiAgICBUaGUgcHVibGlzaGluZyBvcmRlciBtYXR0ZXJzIHRvIHByZXZlbnQgd3JpdGViYWNrIGZyb20gc2VlaW5nXG4gXHQgKiAgICBhbiBpbmNvaGVyZW50IGVudHJ5LlxuIFx0ICovXG4tXHRlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtcbiBcdGVudHJ5LVx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcbiBcdGVudHJ5LVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRlbnRyeS1cdTAwM2VyZWZlcmVuY2VkID0gdHJ1ZTtcbkBAIC0xNzkwLDcgKzE4NDAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4gXHRwb29sID0gX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjaygpO1xuIFx0aWYgKHBvb2wpIHtcbiBcdFx0cHJfaW5mbyhcImxvYWRlZCB1c2luZyBwb29sICVzXFxuXCIsIHBvb2wtXHUwMDNldGZtX25hbWUpO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZwb29sLVx1MDAzZWxpc3QsIFx1MDAyNnpzd2FwX3Bvb2xzKTtcbitcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHpzd2FwX2N1cnJlbnRfcG9vbCwgcG9vbCk7XG4gXHRcdHpzd2FwX2hhc19wb29sID0gdHJ1ZTtcbiBcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0ODoxMS4yODY0ODk4MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNDE5NDE0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyB6c3dhcCBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaWYgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhlIHVzdWFsIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmFjdHVhbGx5KiBjaGFuZ2luZy5cblxuQWxyaWdodCwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGluIGBtbS96c3dhcC5jYC4gRnJvbSBhIHF1aWNrIG92ZXJ2aWV3LCBpdCBsb29rcyBsaWtlIHRoZXkncmUgcmVzdHJ1Y3R1cmluZyBob3cgenN3YXAgcG9vbHMgYXJlIG1hbmFnZWQuIEluc3RlYWQgb2YgdGhlIG9sZCBsaW5rZWQgbGlzdCBhbmQgcG9pbnRlciBzeXN0ZW0sIHdlJ3JlIG5vdyBpbmRleGluZyB0aGUgcG9vbHMgd2l0aCBhbiB4YXJyYXkgKGB6c3dhcF9wb29sc2ApIGFuZCB1c2luZyBhbiBpbmRleCAoYHU4IGlkeGApIHdpdGhpbiB0aGUgYHpzd2FwX2VudHJ5YCBzdHJ1Y3R1cmUuIFNvLCB0aGF0IGBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbDtgIGluIGB6c3dhcF9lbnRyeWAgaXMgZ29uZSwgcmVwbGFjZWQgYnkgYHU4IHBvb2xfaWR4O2AuIFRoZSBvbGQgbGlzdCBhbmQgd29yayBzdHJ1Y3QgaW4gdGhlIGB6c3dhcF9wb29sYCBoYXZlIGFsc28gYmVlbiBzdHJlYW1saW5lZCwgc3dpdGNoaW5nIHRvIGFuIGByY3Vfd29ya2AgYW5kIHRoZSBpbmRleCwgYHU4IGlkeGAuIE5hdHVyYWxseSwgYWxsIHRoZSBsaXN0IGl0ZXJhdGlvbiBhbmQgbG9ja2luZyBhcmUgZ29pbmcgdGhlIHdheSBvZiB0aGUgZG9kbywgYmVpbmcgcmVwbGFjZWQgd2l0aCB0aGUgdXN1YWwgeGFycmF5IGlkaW9tczogYHhhX2FsbG9jX2JoYCwgYHhhX2Zvcl9lYWNoYCwgYW5kIGB4YV9lcmFzZWAuXG5cbk5vdywgZGlnZ2luZyBpbnRvIHRoZSBgenN3YXBfc3RvcmVfcGFnZWAgY2hhbmdlcywgSSBzZWUgdGhhdCBgZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtgIGlzIHNldCAqYmVmb3JlKiB0aGUgYHhhX3N0b3JlYCBjYWxsIGludG8gYHN3YXBfenN3YXBfdHJlZWAsIGFuZCB0aGF0IGBlbnRyeS1cdTAwM2Vwb29sID0gcG9vbDtgIGhhcyBiZWVuIHJlbW92ZWQuIEZ1cnRoZXIsIGB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KWAgaXMgbm93IGRvaW5nIGEgcmVhZCBsb2NrIGFuZCBsb2FkcyBhIHBvb2wgZnJvbSB0aGUgYHpzd2FwX3Bvb2xzYCBhcnJheSB1c2luZyB0aGUgc3RvcmVkIGluZGV4LlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiBob3cgYHpzd2FwX2VudHJ5YCBpcyBhbGxvY2F0ZWQgYW5kIHVzZWQgdG8gYXNzZXNzIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGFsbG9jYXRpb24gYW5kIHVzYWdlIG9mIHRoZXNlIGB6c3dhcF9lbnRyeWAgc3RydWN0dXJlcy4gTGV0IG1lIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGB6c3dhcF9lbnRyeV9jYWNoZV9hbGxvY2AgYW5kIGhvdyBgenN3YXBfc3RvcmVfcGFnZWAgaW50ZXJhY3RzIHdpdGggdGhhdC4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgSSdsbCBiZSBhYmxlIHRvIGRlY2lkZSB3aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvZGUgY2hhbmdlIHRoYXQncyBiZW5pZ24gZW5vdWdoIGZvciByZWd1bGFyIHRlc3Rpbmcgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgbW9yZSByaWdvcm91cyBLTVNBTi1mb2N1c2VkIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzo0ODoyNS4zMjg0MzM1ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjgxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2VudHJ5X2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz03NTE9dm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0venN3YXAuYy03NjUtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5tbS96c3dhcC5jOjc2NjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnpzd2FwX2VudHJ5X2NhY2hlO1xcbm1tL3pzd2FwLmMtNzY3LVxcbm1tL3pzd2FwLmM6NzY4OnN0YXRpYyBzdHJ1Y3QgenN3YXBfZW50cnkgKnpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKGdmcF90IGdmcCwgaW50IG5pZClcXG5tbS96c3dhcC5jLTc2OS17XFxubW0venN3YXAuYy03NzAtXFx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeTtcXG5tbS96c3dhcC5jOjc3MTpcXHRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSh6c3dhcF9lbnRyeV9jYWNoZSwgZ2ZwLCBuaWQpO1xcbm1tL3pzd2FwLmMtNzcyLVxcdGlmICghZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc3Ni1cXG5tbS96c3dhcC5jOjc3NzpzdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxubW0venN3YXAuYy03Nzgte1xcbm1tL3pzd2FwLmM6Nzc5OlxcdGttZW1fY2FjaGVfZnJlZSh6c3dhcF9lbnRyeV9jYWNoZSwgZW50cnkpO1xcbm1tL3pzd2FwLmMtNzgwLX1cXG4tLVxcbm1tL3pzd2FwLmM9Nzg2PXN0YXRpYyB2b2lkIHpzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmMtODAwLVxcdFxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcXG5tbS96c3dhcC5jOjgwMTpcXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jLTgwMi1cXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxuLS1cXG5tbS96c3dhcC5jPTE0MzY9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3pzd2FwLmMtMTQ0My1cXHQvKiBhbGxvY2F0ZSBlbnRyeSAqL1xcbm1tL3pzd2FwLmM6MTQ0NDpcXHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5tbS96c3dhcC5jLTE0NDUtXFx0aWYgKCFlbnRyeSkge1xcbi0tXFxubW0venN3YXAuYy0xNTIwLWNvbXByZXNzX2ZhaWxlZDpcXG5tbS96c3dhcC5jOjE1MjE6XFx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XFxubW0venN3YXAuYy0xNTIyLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3pzd2FwLmM9MTgwOD1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE4MTItXFxubW0venN3YXAuYzoxODEzOlxcdHpzd2FwX2VudHJ5X2NhY2hlID0gS01FTV9DQUNIRSh6c3dhcF9lbnRyeSwgMCk7XFxubW0venN3YXAuYzoxODE0OlxcdGlmICghenN3YXBfZW50cnlfY2FjaGUpIHtcXG5tbS96c3dhcC5jLTE4MTUtXFx0XFx0cHJfZXJyKFxcXCJlbnRyeSBjYWNoZSBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxubW0venN3YXAuYy0xODYyLWhwX2ZhaWw6XFxubW0venN3YXAuYzoxODYzOlxcdGttZW1fY2FjaGVfZGVzdHJveSh6c3dhcF9lbnRyeV9jYWNoZSk7XFxubW0venN3YXAuYy0xODY0LWNhY2hlX2ZhaWw6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI1LjM4MTExOTc1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE4MzMxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHpzd2FwX3N0b3JlX3BhZ2VgKipcblxuT2theSwgdGltZSB0byByZWFsbHkgZGlnIGludG8gYHpzd2FwX3N0b3JlX3BhZ2VgLiBJJ20gZ29pbmcgdG8gbGFzZXIgaW4gb24gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lIDE0MzYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqcmVhbGx5KiBoYXBwZW5pbmcgdGhlcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgenN3YXAgcHJvY2VzcywgYW5kIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgZ3Jhc3Agb2YgdGhlIGNvZGUncyBiZWhhdmlvci4gSSdtIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZCBiZWZvcmUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MjYuOTk5NDUzNTI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MzUsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MzU6XFx0XFxuMTQzNjpcXHRzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbjE0Mzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuMTQzODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbjE0Mzk6XFx0e1xcbjE0NDA6XFx0XFx0c3dwX2VudHJ5X3QgcGFnZV9zd3BlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcXG4xNDQxOlxcdFxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksICpvbGQ7XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdFxcdC8qIGFsbG9jYXRlIGVudHJ5ICovXFxuMTQ0NDpcXHRcXHRlbnRyeSA9IHpzd2FwX2VudHJ5X2NhY2hlX2FsbG9jKEdGUF9LRVJORUwsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG4xNDQ1OlxcdFxcdGlmICghZW50cnkpIHtcXG4xNDQ2OlxcdFxcdFxcdHpzd2FwX3JlamVjdF9rbWVtY2FjaGVfZmFpbCsrO1xcbjE0NDc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0NDg6XFx0XFx0fVxcbjE0NDk6XFx0XFxuMTQ1MDpcXHRcXHRpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSlcXG4xNDUxOlxcdFxcdFxcdGdvdG8gY29tcHJlc3NfZmFpbGVkO1xcbjE0NTI6XFx0XFxuMTQ1MzpcXHRcXHQvKlxcbjE0NTQ6XFx0XFx0ICogU2V0IHBvb2xfaWR4IGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBlbnRyeTogY29tcHJlc3Npb24gaGFzXFxuMTQ1NTpcXHRcXHQgKiBzdWNjZWVkZWQgYW5kIHRoZSBwb29sIGlzIGFscmVhZHkgcGlubmVkIGJ5IHRoaXMgc3RvcmUsIHNvIHRoZSBpZCBpc1xcbjE0NTY6XFx0XFx0ICogZmluYWwuICBEb2luZyBpdCBoZXJlIChyYXRoZXIgdGhhbiBhZnRlciB4YV9zdG9yZSgpKSBtZWFucyB0aGUgZW50cnlcXG4xNDU3OlxcdFxcdCAqIGlzIG5ldmVyIGJyaWVmbHkgdmlzaWJsZSB3aXRoIGEgc3RhbGUgcG9vbF9pZHggbGVmdCBvdmVyIGZyb20gc2xhYlxcbjE0NTg6XFx0XFx0ICogcmV1c2UsIHdoaWNoIHpzd2FwX2VudHJ5X3Bvb2woKSB3b3VsZCBvdGhlcndpc2UgcmVzb2x2ZSB0byBhblxcbjE0NTk6XFx0XFx0ICogdW5yZWxhdGVkIGxpdmUgcG9vbC5cXG4xNDYwOlxcdFxcdCAqL1xcbjE0NjE6XFx0XFx0ZW50cnktXFx1MDAzZXBvb2xfaWR4ID0gcG9vbC1cXHUwMDNlaWR4O1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRvbGQgPSB4YV9zdG9yZShzd2FwX3pzd2FwX3RyZWUocGFnZV9zd3BlbnRyeSksXFxuMTQ2NDpcXHRcXHRcXHQgICAgICAgc3dwX29mZnNldChwYWdlX3N3cGVudHJ5KSxcXG4xNDY1OlxcdFxcdFxcdCAgICAgICBlbnRyeSwgR0ZQX0tFUk5FTCk7XFxuMTQ2NjpcXHRcXHRpZiAoeGFfaXNfZXJyKG9sZCkpIHtcXG4xNDY3OlxcdFxcdFxcdGludCBlcnIgPSB4YV9lcnIob2xkKTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0XFx0V0FSTl9PTkNFKGVyciAhPSAtRU5PTUVNLCBcXFwidW5leHBlY3RlZCB4YXJyYXkgZXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbjE0NzA6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2FsbG9jX2ZhaWwrKztcXG4xNDcxOlxcdFxcdFxcdGdvdG8gc3RvcmVfZmFpbGVkO1xcbjE0NzI6XFx0XFx0fVxcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHQvKlxcbjE0NzU6XFx0XFx0ICogV2UgbWF5IGhhdmUgaGFkIGFuIGV4aXN0aW5nIGVudHJ5IHRoYXQgYmVjYW1lIHN0YWxlIHdoZW5cXG4xNDc2OlxcdFxcdCAqIHRoZSBmb2xpbyB3YXMgcmVkaXJ0aWVkIGFuZCBub3cgdGhlIG5ldyB2ZXJzaW9uIGlzIGJlaW5nXFxuMTQ3NzpcXHRcXHQgKiBzd2FwcGVkIG91dC4gR2V0IHJpZCBvZiB0aGUgb2xkLlxcbjE0Nzg6XFx0XFx0ICovXFxuMTQ3OTpcXHRcXHRpZiAob2xkKVxcbjE0ODA6XFx0XFx0XFx0enN3YXBfZW50cnlfZnJlZShvbGQpO1xcbjE0ODE6XFx0XFxuMTQ4MjpcXHRcXHQvKlxcbjE0ODM6XFx0XFx0ICogVGhlIGVudHJ5IGlzIHN1Y2Nlc3NmdWxseSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gdGhlIHRyZWUsIHRoZXJlIGlzXFxuMTQ4NDpcXHRcXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxuMTQ4NTpcXHRcXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG4xNDg2OlxcdFxcdCAqIFRoZSBvcHBvc2l0ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHpzd2FwX2VudHJ5X2ZyZWUoKVxcbjE0ODc6XFx0XFx0ICogd2hlbiB0aGUgZW50cnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLlxcbjE0ODg6XFx0XFx0ICovXFxuMTQ4OTpcXHRcXHR6c3dhcF9wb29sX2dldChwb29sKTtcXG4xNDkwOlxcdFxcdGlmIChvYmpjZykge1xcbjE0OTE6XFx0XFx0XFx0b2JqX2Nncm91cF9nZXQob2JqY2cpO1xcbjE0OTI6XFx0XFx0XFx0b2JqX2Nncm91cF9jaGFyZ2VfenN3YXAob2JqY2csIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbjE0OTM6XFx0XFx0fVxcbjE0OTQ6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xcbjE0OTU6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbjE0OTY6XFx0XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbjE0OTc6XFx0XFxuMTQ5ODpcXHRcXHQvKlxcbjE0OTk6XFx0XFx0ICogV2UgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZW50cnkgd2hpbGUgaXQncyBhbHJlYWR5IGluIHhhcnJheS5cXG4xNTAwOlxcdFxcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlOlxcbjE1MDE6XFx0XFx0ICpcXG4xNTAyOlxcdFxcdCAqIDEuIENvbmN1cnJlbnQgc3RvcmVzIGFuZCBpbnZhbGlkYXRpb25zIGFyZSBleGNsdWRlZCBieSBmb2xpbyBsb2NrLlxcbjE1MDM6XFx0XFx0ICpcXG4xNTA0OlxcdFxcdCAqIDIuIFdyaXRlYmFjayBpcyBleGNsdWRlZCBieSB0aGUgZW50cnkgbm90IGJlaW5nIG9uIHRoZSBMUlUgeWV0LlxcbjE1MDU6XFx0XFx0ICogICAgVGhlIHB1Ymxpc2hpbmcgb3JkZXIgbWF0dGVycyB0byBwcmV2ZW50IHdyaXRlYmFjayBmcm9tIHNlZWluZ1xcbjE1MDY6XFx0XFx0ICogICAgYW4gaW5jb2hlcmVudCBlbnRyeS5cXG4xNTA3OlxcdFxcdCAqL1xcbjE1MDg6XFx0XFx0ZW50cnktXFx1MDAzZXN3cGVudHJ5ID0gcGFnZV9zd3BlbnRyeTtcXG4xNTA5OlxcdFxcdGVudHJ5LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbjE1MTA6XFx0XFx0ZW50cnktXFx1MDAzZXJlZmVyZW5jZWQgPSB0cnVlO1xcbjE1MTE6XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGgpIHtcXG4xNTEyOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlbnRyeS1cXHUwMDNlbHJ1KTtcXG4xNTEzOlxcdFxcdFxcdHpzd2FwX2xydV9hZGQoZW50cnkpO1xcbjE1MTQ6XFx0XFx0fVxcbjE1MTU6XFx0XFxuMTUxNjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0c3RvcmVfZmFpbGVkOlxcbjE1MTk6XFx0XFx0enNfZnJlZShwb29sLVxcdTAwM2V6c19wb29sLCBlbnRyeS1cXHUwMDNlaGFuZGxlKTtcXG4xNTIwOlxcdGNvbXByZXNzX2ZhaWxlZDpcXG4xNTIxOlxcdFxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbjE1MjI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MjM6XFx0fVxcbjE1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI2Ljk5OTU3NDI1OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ5NzExNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgenN3YXBfY29tcHJlc3NgKipcblxuUmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIGNoZWNrbGlzdCBoYXMgbGVkIG1lIHRvIGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGB6c3dhcF9jb21wcmVzc2AuIFRoaXMgaXMgYSBjcnVjaWFsIHNldHRpbmcgd2hlbiBjb25zaWRlcmluZyB6c3dhcCBiZWhhdmlvciwgcmlnaHQ/IEl0J3Mgb25lIG9mIHRob3NlIHRoaW5ncyB5b3UgY2FuJ3QganVzdCBnbG9zcyBvdmVyLiBJdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlZCBieSB6c3dhcCwgYW5kIHRodXMsIGl0cyBlZmZlY3RpdmVuZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBjaG9zZW4gYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIG9uIG1lbW9yeSB1c2FnZS4gRnJvbSBoZXJlIEkgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHdvcmtsb2FkLiBUaGUgaW1wbGljYXRpb25zIG9uIENQVSBvdmVyaGVhZCBhcmUgYWxzbyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI4Ljc0OTI4ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjkxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2NvbXByZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTEwMC0vKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYzoxMDI6c3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxubW0venN3YXAuYy0xMDMtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTtcXG5tbS96c3dhcC5jOjEwNDpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMgPSB7XFxubW0venN3YXAuYzoxMDU6XFx0LnNldCA9XFx0XFx0enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQsXFxubW0venN3YXAuYy0xMDYtXFx0LmdldCA9XFx0XFx0cGFyYW1fZ2V0X2NoYXJwLFxcbi0tXFxubW0venN3YXAuYy0xMDgtfTtcXG5tbS96c3dhcC5jOjEwOTptb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxcbm1tL3pzd2FwLmM6MTEwOlxcdFxcdFxcdTAwMjZ6c3dhcF9jb21wcmVzc29yLCAwNjQ0KTtcXG5tbS96c3dhcC5jLTExMS1cXG4tLVxcbm1tL3pzd2FwLmM9MzgxPXN0YXRpYyBzdHJ1Y3QgenN3YXBfcG9vbCAqX196c3dhcF9wb29sX2NyZWF0ZV9mYWxsYmFjayh2b2lkKVxcbm1tL3pzd2FwLmMtMzgyLXtcXG5tbS96c3dhcC5jOjM4MzpcXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXFx1MDAyNlxcdTAwMjZcXG5tbS96c3dhcC5jOjM4NDpcXHQgICAgc3RyY21wKHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpKSB7XFxubW0venN3YXAuYy0zODUtXFx0XFx0cHJfZXJyKFxcXCJjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXFxcblxcXCIsXFxubW0venN3YXAuYzozODY6XFx0XFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xcbm1tL3pzd2FwLmM6Mzg3OlxcdFxcdHBhcmFtX2ZyZWVfY2hhcnAoXFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmM6Mzg4OlxcdFxcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xcbm1tL3pzd2FwLmMtMzg5LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmMtMzkxLVxcdC8qIERlZmF1bHQgY29tcHJlc3NvciBzaG91bGQgYmUgYXZhaWxhYmxlLiBLY29uZmlnIGJ1Zz8gKi9cXG5tbS96c3dhcC5jOjM5MjpcXHRpZiAoV0FSTl9PTl9PTkNFKCFjcnlwdG9faGFzX2Fjb21wKHpzd2FwX2NvbXByZXNzb3IsIDAsIDApKSkge1xcbm1tL3pzd2FwLmM6MzkzOlxcdFxcdHpzd2FwX2NvbXByZXNzb3IgPSBaU1dBUF9QQVJBTV9VTlNFVDtcXG5tbS96c3dhcC5jLTM5NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL3pzd2FwLmMtMzk2LVxcbm1tL3pzd2FwLmM6Mzk3OlxcdHJldHVybiB6c3dhcF9wb29sX2NyZWF0ZSh6c3dhcF9jb21wcmVzc29yKTtcXG5tbS96c3dhcC5jLTM5OC19XFxuLS1cXG5tbS96c3dhcC5jPTU1Mj1zdGF0aWMgYm9vbCB6c3dhcF9jaGVja19saW1pdHModm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtNTcwLVxcbm1tL3pzd2FwLmM6NTcxOnN0YXRpYyBpbnQgenN3YXBfY29tcHJlc3Nvcl9wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS96c3dhcC5jLTU3Mi17XFxuLS1cXG5tbS96c3dhcC5jPTgwOD1zdGF0aWMgaW50IHpzd2FwX2NwdV9jb21wX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5tbS96c3dhcC5jLTg2NC1cXG5tbS96c3dhcC5jOjg2NTpzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTg2Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgenN3YXBfcG9vbCAqcG9vbClcXG4tLVxcbm1tL3pzd2FwLmM9MTQzNj1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0venN3YXAuYy0xNDQ5LVxcbm1tL3pzd2FwLmM6MTQ1MDpcXHRpZiAoIXpzd2FwX2NvbXByZXNzKHBhZ2UsIGVudHJ5LCBwb29sKSlcXG5tbS96c3dhcC5jLTE0NTEtXFx0XFx0Z290byBjb21wcmVzc19mYWlsZWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjQ4OjI4Ljc5Njk4NTg3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzEzNDUzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHpzd2FwX2NvbXByZXNzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYHpzd2FwX2NvbXByZXNzYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBjb21wcmVzc2lvbiBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnMgYW5kIGhvdyBpdCdzIG9wdGltaXplZCBmb3IgdGhlIHNwZWNpZmljIGNvbnN0cmFpbnRzIG9mIGluLW1lbW9yeSBjb21wcmVzc2lvbiBmb3Igc3dhcC4gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQgdG8gZWZmaWNpZW50bHkgbWFuYWdlIHRoZSBjb21wcmVzc2lvbiBjb250ZXh0LCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhbmQgdGhlaXIgc3BlY2lmaWMgcGFyYW1ldGVycywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBlcnJvcnMgb3IgY29ybmVyIGNhc2VzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIHNwZWNpZmljIG51YW5jZXMgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgd2l0aCBteSB3b3JrIG9uLi4uIFtjb250aW51ZSB3aXRoIHlvdXIgcmVsZXZhbnQgd29ya10uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzEuMTEwNDQyMjA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2NTpcXHRzdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gODY2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCB6c3dhcF9wb29sICpwb29sKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG4gODY5OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dCwgb3V0cHV0O1xcbiA4NzA6XFx0XFx0aW50IGNvbXBfcmV0ID0gMCwgYWxsb2NfcmV0ID0gMDtcXG4gODcxOlxcdFxcdHVuc2lnbmVkIGludCBkbGVuID0gUEFHRV9TSVpFO1xcbiA4NzI6XFx0XFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIDg3MzpcXHRcXHRnZnBfdCBnZnA7XFxuIDg3NDpcXHRcXHR1OCAqZHN0O1xcbiA4NzU6XFx0XFx0Ym9vbCBtYXBwZWQgPSBmYWxzZTtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0YWNvbXBfY3R4ID0gcmF3X2NwdV9wdHIocG9vbC1cXHUwMDNlYWNvbXBfY3R4KTtcXG4gODc4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmFjb21wX2N0eC1cXHUwMDNlbXV0ZXgpO1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRkc3QgPSBhY29tcF9jdHgtXFx1MDAzZWJ1ZmZlcjtcXG4gODgxOlxcdFxcdHNnX2luaXRfdGFibGUoXFx1MDAyNmlucHV0LCAxKTtcXG4gODgyOlxcdFxcdHNnX3NldF9wYWdlKFxcdTAwMjZpbnB1dCwgcGFnZSwgUEFHRV9TSVpFLCAwKTtcXG4gODgzOlxcdFxcbiA4ODQ6XFx0XFx0c2dfaW5pdF9vbmUoXFx1MDAyNm91dHB1dCwgZHN0LCBQQUdFX1NJWkUpO1xcbiA4ODU6XFx0XFx0YWNvbXBfcmVxdWVzdF9zZXRfcGFyYW1zKGFjb21wX2N0eC1cXHUwMDNlcmVxLCBcXHUwMDI2aW5wdXQsIFxcdTAwMjZvdXRwdXQsIFBBR0VfU0laRSwgZGxlbik7XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdC8qXFxuIDg4ODpcXHRcXHQgKiBpdCBtYXliZSBsb29rcyBhIGxpdHRsZSBiaXQgc2lsbHkgdGhhdCB3ZSBzZW5kIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0LFxcbiA4ODk6XFx0XFx0ICogdGhlbiB3YWl0IGZvciBpdHMgY29tcGxldGlvbiBzeW5jaHJvbm91c2x5LiBUaGlzIG1ha2VzIHRoZSBwcm9jZXNzIGxvb2tcXG4gODkwOlxcdFxcdCAqIHN5bmNocm9ub3VzIGluIGZhY3QuXFxuIDg5MTpcXHRcXHQgKiBUaGVvcmV0aWNhbGx5LCBhY29tcCBzdXBwb3J0cyB1c2VycyBzZW5kIG11bHRpcGxlIGFjb21wIHJlcXVlc3RzIGluIG9uZVxcbiA4OTI6XFx0XFx0ICogYWNvbXAgaW5zdGFuY2UsIHRoZW4gZ2V0IHRob3NlIHJlcXVlc3RzIGRvbmUgc2ltdWx0YW5lb3VzbHkuIGJ1dCBpbiB0aGlzXFxuIDg5MzpcXHRcXHQgKiBjYXNlLCB6c3dhcCBhY3R1YWxseSBkb2VzIHN0b3JlIGFuZCBsb2FkIHBhZ2UgYnkgcGFnZSwgdGhlcmUgaXMgbm9cXG4gODk0OlxcdFxcdCAqIGV4aXN0aW5nIG1ldGhvZCB0byBzZW5kIHRoZSBzZWNvbmQgcGFnZSBiZWZvcmUgdGhlIGZpcnN0IHBhZ2UgaXMgZG9uZVxcbiA4OTU6XFx0XFx0ICogaW4gb25lIHRocmVhZCBkb2luZyB6c3dhcC5cXG4gODk2OlxcdFxcdCAqIGJ1dCBpbiBkaWZmZXJlbnQgdGhyZWFkcyBydW5uaW5nIG9uIGRpZmZlcmVudCBjcHUsIHdlIGhhdmUgZGlmZmVyZW50XFxuIDg5NzpcXHRcXHQgKiBhY29tcCBpbnN0YW5jZSwgc28gbXVsdGlwbGUgdGhyZWFkcyBjYW4gZG8gKGRlKWNvbXByZXNzaW9uIGluIHBhcmFsbGVsLlxcbiA4OTg6XFx0XFx0ICovXFxuIDg5OTpcXHRcXHRjb21wX3JldCA9IGNyeXB0b193YWl0X3JlcShjcnlwdG9fYWNvbXBfY29tcHJlc3MoYWNvbXBfY3R4LVxcdTAwM2VyZXEpLCBcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2V3YWl0KTtcXG4gOTAwOlxcdFxcdGRsZW4gPSBhY29tcF9jdHgtXFx1MDAzZXJlcS1cXHUwMDNlZGxlbjtcXG4gOTAxOlxcdFxcbiA5MDI6XFx0XFx0LypcXG4gOTAzOlxcdFxcdCAqIElmIGEgcGFnZSBjYW5ub3QgYmUgY29tcHJlc3NlZCBpbnRvIGEgc2l6ZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFLFxcbiA5MDQ6XFx0XFx0ICogc2F2ZSB0aGUgY29udGVudCBhcyBpcyB3aXRob3V0IGEgY29tcHJlc3Npb24sIHRvIGtlZXAgdGhlIExSVSBvcmRlclxcbiA5MDU6XFx0XFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XFxuIDkwNjpcXHRcXHQgKiBvbmx5IGFkZHMgbWV0YWRhdGEgb3ZlcmhlYWQuICBzd2FwX3dyaXRlb3V0KCkgd2lsbCBwdXQgdGhlIHBhZ2UgYmFja1xcbiA5MDc6XFx0XFx0ICogdG8gdGhlIGFjdGl2ZSBMUlUgbGlzdCBpbiB0aGUgY2FzZS5cXG4gOTA4OlxcdFxcdCAqL1xcbiA5MDk6XFx0XFx0aWYgKGNvbXBfcmV0IHx8ICFkbGVuIHx8IGRsZW4gXFx1MDAzZT0gUEFHRV9TSVpFKSB7XFxuIDkxMDpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDkxMTpcXHRcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoXFxuIDkxMjpcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19tZW1jZyhwYWdlX2ZvbGlvKHBhZ2UpKSkpIHtcXG4gOTEzOlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA5MTQ6XFx0XFx0XFx0XFx0Y29tcF9yZXQgPSBjb21wX3JldCA/IGNvbXBfcmV0IDogLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzEuMTEwNjEzODY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjE1MDMyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB6c3dhcF9jb21wcmVzc2AgZnVuY3Rpb24uIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgenN3YXAgY29uY2VwdCwgc28gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjb21wcmVzc2lvbiBhbGdvcml0aG0gZGV0YWlscyBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSB6c3dhcCBmcmFtZXdvcmsuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgY29tcHJlc3Npb24gb3BlcmF0aW9uIGl0c2VsZiAtIHRoZSBkYXRhIGhhbmRsaW5nLCBlcnJvciBjaGVja2luZywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHpzd2FwLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBjb21tb24gY29tcHJlc3Npb24gbGlicmFyaWVzIGFuZCB3YW50IHRvIHVuZGVyc3RhbmQgYW55IHpzd2FwLXNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgdXNlZC4gTGV0J3MgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzIuNjMyMTE5NTQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c3dhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNTpcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gOTE2OlxcdFxcdFxcdH1cXG4gOTE3OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA5MTg6XFx0XFx0XFx0Y29tcF9yZXQgPSAwO1xcbiA5MTk6XFx0XFx0XFx0ZGxlbiA9IFBBR0VfU0laRTtcXG4gOTIwOlxcdFxcdFxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gOTIxOlxcdFxcdFxcdG1hcHBlZCA9IHRydWU7XFxuIDkyMjpcXHRcXHR9XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XFxuIDkyNTpcXHRcXHRoYW5kbGUgPSB6c19tYWxsb2MocG9vbC1cXHUwMDNlenNfcG9vbCwgZGxlbiwgZ2ZwLCBwYWdlX3RvX25pZChwYWdlKSk7XFxuIDkyNjpcXHRcXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG4gOTI3OlxcdFxcdFxcdGFsbG9jX3JldCA9IFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbiA5Mjg6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDkyOTpcXHRcXHR9XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdHpzX29ial93cml0ZShwb29sLVxcdTAwM2V6c19wb29sLCBoYW5kbGUsIGRzdCwgZGxlbik7XFxuIDkzMjpcXHRcXHRlbnRyeS1cXHUwMDNlaGFuZGxlID0gaGFuZGxlO1xcbiA5MzM6XFx0XFx0ZW50cnktXFx1MDAzZWxlbmd0aCA9IGRsZW47XFxuIDkzNDpcXHRcXG4gOTM1OlxcdHVubG9jazpcXG4gOTM2OlxcdFxcdGlmIChtYXBwZWQpXFxuIDkzNzpcXHRcXHRcXHRrdW5tYXBfbG9jYWwoZHN0KTtcXG4gOTM4OlxcdFxcdGlmIChjb21wX3JldCA9PSAtRU5PU1BDIHx8IGFsbG9jX3JldCA9PSAtRU5PU1BDKVxcbiA5Mzk6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2NvbXByZXNzX3Bvb3IrKztcXG4gOTQwOlxcdFxcdGVsc2UgaWYgKGNvbXBfcmV0KVxcbiA5NDE6XFx0XFx0XFx0enN3YXBfcmVqZWN0X2NvbXByZXNzX2ZhaWwrKztcXG4gOTQyOlxcdFxcdGVsc2UgaWYgKGFsbG9jX3JldClcXG4gOTQzOlxcdFxcdFxcdHpzd2FwX3JlamVjdF9hbGxvY19mYWlsKys7XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2VtdXRleCk7XFxuIDk0NjpcXHRcXHRyZXR1cm4gY29tcF9yZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiBhbGxvY19yZXQgPT0gMDtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdFxcbiA5NDk6XFx0c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA5NTA6XFx0e1xcbiA5NTE6XFx0XFx0c3RydWN0IHpzd2FwX3Bvb2wgKnBvb2wgPSB6c3dhcF9lbnRyeV9wb29sKGVudHJ5KTtcXG4gOTUyOlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBpbnB1dFsyXTsgLyogenNtYWxsb2MgcmV0dXJucyBhbiBTRyBsaXN0IDEtMiBlbnRyaWVzICovXFxuIDk1MzpcXHRcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgb3V0cHV0O1xcbiA5NTQ6XFx0XFx0c3RydWN0IGNyeXB0b19hY29tcF9jdHggKmFjb21wX2N0eDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzIuNjMyMzI3OTA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMTc3MTExNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQb29sIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhvdyB6c3dhcCBtYW5hZ2VzIGl0cyBwb29scyBhbmQgYXNzb2NpYXRlcyB0aGVtIHdpdGggZW50cmllcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIHNvbGlkIHJlZmFjdG9yIHdpdGggYSBjbGVhciBtZW1vcnkgb3B0aW1pemF0aW9uIGZvY3VzLlxuXG5JIHNlZSB0aGF0IHRoZSBjb3JlIGNoYW5nZSBpcyBtb3ZpbmcgZnJvbSBhIGxpbmtlZCBsaXN0IG9mIGB6c3dhcF9wb29sYCBzdHJ1Y3R1cmVzIHdpdGggZGlyZWN0IHBvaW50ZXJzIGluIGB6c3dhcF9lbnRyeWAgdG8gYW4gWEFycmF5LWJhc2VkIHN5c3RlbSB1c2luZyBhIGB1OCBwb29sX2lkeGAuIFRoZSBpbW1lZGlhdGUgd2luIGlzIGEgNy1ieXRlIHNhdmluZyBwZXIgYHpzd2FwX2VudHJ5YCBlbnRyeSBvbiA2NC1iaXQgc3lzdGVtcywgd2hpY2gsIG11bHRpcGxpZWQgYWNyb3NzIG1pbGxpb25zIG9mIGVudHJpZXMsIHdpbGwgbWFrZSBhIHRhbmdpYmxlIGRpZmZlcmVuY2UuIFRoZSBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIFhBcnJheSBsb29rdXAgd2l0aCBgenN3YXBfZW50cnlfcG9vbCgpYCBpcyBhIHNvdW5kIGRlc2lnbiBjaG9pY2UsIGFuZCB0aGUgc2hpZnQgdG8gUkNVIHdvcmsgcXVldWVzIGZvciBwb29sIGRlc3RydWN0aW9uIGlzIGNsZWFuZXIgdGhhbiBgc2NoZWR1bGVfd29ya2AgYW5kIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoZSBgV0FSTl9PTmAgY2hlY2tzIGFyZSBhIGdvb2Qgc2FmZXR5IG5ldCBmb3IgYW55IGxvb2t1cCBmYWlsdXJlcy5cblxuTG9va2luZyBjbG9zZWx5IGF0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgaXQgYWxsIGNoZWNrcyBvdXQuIFRoZSBgZW50cnktXHUwMDNlcG9vbF9pZHggPSBwb29sLVx1MDAzZWlkeDtgIGFzc2lnbm1lbnQgaGFwcGVucyAqYmVmb3JlKiB0aGUgZW50cnkgaXMgc3RvcmVkIGluIHRoZSBYQXJyYXksIGFuZCB0aGUgcG9vbCdzIGluZGV4IGlzIGFzc2lnbmVkIHVwb24gY3JlYXRpb24sIHNvIHRoZXJlJ3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhbmQgbm8gY29waWVzIHRvIHVzZXJzcGFjZSBvY2N1ciwgYXZvaWRpbmcgaW5mb2xlYWtzLiBUaGUgc2VxdWVuY2UgaW4gYHpzd2FwX3N0b3JlX3BhZ2UoKWAgbG9va3MgZmluZSB0b287IGV2ZXJ5IGZpZWxkIGluIGB6c3dhcF9lbnRyeWAgZ2V0cyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIFhBcnJheSB3cml0ZS5cblxuSSB3ZW50IHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOIGNyaXRlcmlhLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHNlZSwgbm9uZSBvZiB0aGUgdHlwaWNhbCBcIk5lZWRzS01TQU49dHJ1ZVwiIGNvbmRpdGlvbnMgYXBwbHkgaGVyZS4gVGhlcmUncyBubyBwYXNzaW5nIG9mIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlIGNyaXRlcmlhIGZvciBcIk5lZWRzS01TQU49ZmFsc2VcIiBhbGwgZml0IGFzIHdlbGw7IHRoZSBwcmltYXJ5IHJpc2tzIGhlcmUgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBvZiBhbnkgY29uY3VycmVudCBjb2RlOiBvdXQtb2YtYm91bmRzIGFjY2VzcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBpc3N1ZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGdlbmVyYWwgZGVidWdnaW5nIHRvb2xzIHdpbGwgaGFuZGxlIHRob3NlLlxuXG5UaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgc291bmQuIE5vIEtNU0FOIGZsYWdzIGFyZSBuZWVkZWQuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDksIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6NDg6MzkuNjUwMDQxMDA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgcG9vbCBtYW5hZ2VtZW50IGJ5IHJlcGxhY2luZyB0aGUgbGlua2VkIGxpc3Qgb2YgcG9vbHMgYW5kIDgtYnl0ZSBwb29sIHBvaW50ZXIgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgd2l0aCBhbiBYQXJyYXkgbG9va3VwIHRhYmxlIGFuZCBhIDEtYnl0ZSBwb29sIGluZGV4IChgcG9vbF9pZHhgKSwgYWxvbmdzaWRlIHRyYW5zaXRpb25pbmcgcG9vbCBjbGVhbnVwIHRvIGByY3Vfd29ya2AuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBmaWVsZHMgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgYW5kIGBzdHJ1Y3QgenN3YXBfcG9vbGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgcHVibGlzaGVkIG9yIGFjY2Vzc2VkLiBgcG9vbF9pZHhgIGlzIHNldCB1cG9uIGNvbXByZXNzaW9uIHN1Y2Nlc3MgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5IGludG8gdGhlIHN3YXAgWEFycmF5LlxcbjIuIFVzZXItc3BhY2UgSW5mbyBMZWFrczogTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBzeXNjYWxsIHJldHVybiwgZXRjLikuXFxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgenN3YXAgcG9vbCBtYW5hZ2VtZW50IGJ5IHJlcGxhY2luZyB0aGUgbGlua2VkIGxpc3Qgb2YgcG9vbHMgYW5kIDgtYnl0ZSBwb29sIHBvaW50ZXIgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgd2l0aCBhbiBYQXJyYXkgbG9va3VwIHRhYmxlIGFuZCBhIDEtYnl0ZSBwb29sIGluZGV4IChgcG9vbF9pZHhgKSwgYWxvbmdzaWRlIHRyYW5zaXRpb25pbmcgcG9vbCBjbGVhbnVwIHRvIGByY3Vfd29ya2AuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBmaWVsZHMgaW4gYHN0cnVjdCB6c3dhcF9lbnRyeWAgYW5kIGBzdHJ1Y3QgenN3YXBfcG9vbGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgcHVibGlzaGVkIG9yIGFjY2Vzc2VkLiBgcG9vbF9pZHhgIGlzIHNldCB1cG9uIGNvbXByZXNzaW9uIHN1Y2Nlc3MgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGVudHJ5IGludG8gdGhlIHN3YXAgWEFycmF5LlxcbjIuIFVzZXItc3BhY2UgSW5mbyBMZWFrczogTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAoYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBzeXNjYWxsIHJldHVybiwgZXRjLikuXFxuMy4gUmVsZXZhbnQgQnVnIENsYXNzZXM6IEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBsaWZldGltZS9ncmFjZS1wZXJpb2QgdHJhY2tpbmcsIFhBcnJheSBpbmRleGluZywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workfloww79gh[1] Phase: Succeeded StartedAt: 2026-09-05 23:48:50 +0000 UTC FinishedAt: 2026-09-05 23:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 23:48:50 +0000 UTC FinishedAt: 2026-09-05 23:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2] Phase: Succeeded StartedAt: 2026-09-05 23:48:50 +0000 UTC FinishedAt: 2026-09-06 03:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 23:48:50 +0000 UTC FinishedAt: 2026-09-06 03:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 23:48:50 +0000 UTC FinishedAt: 2026-09-05 23:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 23:48:50 +0000 UTC FinishedAt: 2026-09-05 23:48:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workfloww79gh/series-workfloww79gh-convert-artifact-3118076209/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 23:49:00 +0000 UTC FinishedAt: 2026-09-06 00:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 23:49:00 +0000 UTC FinishedAt: 2026-09-06 00:05:11 +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:*7b8be091-9e65-4dc4-906d-b33eccda8596,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-workfloww79gh/series-workfloww79gh-convert-artifact-3118076209/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": "ae4ef9a0-fb51-4dd5-ad6d-2689ec97fb14", "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-workfloww79gh/series-workfloww79gh-build-action-3385765727/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 23:49:00 +0000 UTC FinishedAt: 2026-09-06 00:05:01 +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:*7b8be091-9e65-4dc4-906d-b33eccda8596,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-workfloww79gh/series-workfloww79gh-convert-artifact-3118076209/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": "ae4ef9a0-fb51-4dd5-ad6d-2689ec97fb14", "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-workfloww79gh/series-workfloww79gh-build-action-3385765727/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 00:05:11 +0000 UTC FinishedAt: 2026-09-06 00:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 00:05:11 +0000 UTC FinishedAt: 2026-09-06 00:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 00:05:11 +0000 UTC FinishedAt: 2026-09-06 00:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 00:05:11 +0000 UTC FinishedAt: 2026-09-06 00:05:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workfloww79gh/series-workfloww79gh-convert-artifact-3671156356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 00:05:22 +0000 UTC FinishedAt: 2026-09-06 00:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 00:05:22 +0000 UTC FinishedAt: 2026-09-06 00:07:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae4ef9a0-fb51-4dd5-ad6d-2689ec97fb14,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-workfloww79gh/series-workfloww79gh-build-action-3385765727/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-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 00:07:16 +0000 UTC FinishedAt: 2026-09-06 00:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 00:07:16 +0000 UTC FinishedAt: 2026-09-06 00:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 00:07:16 +0000 UTC FinishedAt: 2026-09-06 00:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 00:07:16 +0000 UTC FinishedAt: 2026-09-06 00:23:48 +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:*7b8be091-9e65-4dc4-906d-b33eccda8596,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-workfloww79gh/series-workfloww79gh-convert-artifact-3671156356/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": "14c3be04-f178-48d2-a891-20b3fbbb93d9", "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-workfloww79gh/series-workfloww79gh-build-action-3156697232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 00:07:16 +0000 UTC FinishedAt: 2026-09-06 00:23:38 +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:*7b8be091-9e65-4dc4-906d-b33eccda8596,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-workfloww79gh/series-workfloww79gh-convert-artifact-3671156356/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": "14c3be04-f178-48d2-a891-20b3fbbb93d9", "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-workfloww79gh/series-workfloww79gh-build-action-3156697232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 00:23:48 +0000 UTC FinishedAt: 2026-09-06 00:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 00:23:48 +0000 UTC FinishedAt: 2026-09-06 00:23:48 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 00:23:48 +0000 UTC FinishedAt: 2026-09-06 00:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 00:23:48 +0000 UTC FinishedAt: 2026-09-06 00:25: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:*14c3be04-f178-48d2-a891-20b3fbbb93d9,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-workfloww79gh/series-workfloww79gh-build-action-3156697232/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-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 03:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 03:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ae4ef9a0-fb51-4dd5-ad6d-2689ec97fb14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14c3be04-f178-48d2-a891-20b3fbbb93d9,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-workfloww79gh/series-workfloww79gh-build-action-3385765727/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-workfloww79gh/series-workfloww79gh-build-action-3156697232/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 00:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 00:25:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww79gh/series-workfloww79gh-convert-artifact-292437389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 00:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 00:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 00:25:30 +0000 UTC FinishedAt: 2026-09-06 00:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 00:25:40 +0000 UTC FinishedAt: 2026-09-06 03:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww79gh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_store","zswap_load","zswap_invalidate","zswap_writeback_entry","zswap_compressor_param_set","zswap_total_pages","zswap_entry_free","zswap_decompress","zswap_store_page","__zswap_pool_empty","__zswap_pool_release"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20cab322c95cea0327215bb81a05df69336032dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP"],"series_id":"fc5ba4c7-72f9-4d7a-990a-bacc388b368b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 00:25:40 +0000 UTC FinishedAt: 2026-09-06 03:29:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae4ef9a0-fb51-4dd5-ad6d-2689ec97fb14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14c3be04-f178-48d2-a891-20b3fbbb93d9,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-workfloww79gh/series-workfloww79gh-build-action-3385765727/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-workfloww79gh/series-workfloww79gh-build-action-3156697232/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-workfloww79gh/series-workfloww79gh-convert-artifact-292437389/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,}