Name: series-workflow2lfv4 Phase: Running StartedAt: 2026-09-03 12:35:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[0] Phase: Succeeded StartedAt: 2026-09-03 12:35:04 +0000 UTC FinishedAt: 2026-09-03 12:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 12:35:04 +0000 UTC FinishedAt: 2026-09-03 12:38:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS" ], "series_id": "b4e67ed6-75ba-4808-8d7c-9977a18a3669" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_flow_offload_eval", "nf_flow_offload_forward", "nf_flow_offload_ipv6_forward", "nf_flow_offload_ip_hook", "nf_flow_offload_ipv6_hook", "nf_flow_rule_route_common", "nf_flow_rule_route_ipv4", "nf_flow_rule_route_ipv6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cbi0gVGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZCBsb2dpYyB0byBjYXB0dXJlIHBhY2tldCBwcmlvcml0eSBhbmQgcHJvcGFnYXRlIGl0IGR1cmluZyBzb2Z0d2FyZSBmbG93IHRhYmxlIGZvcndhcmRpbmcgKElQdjQvSVB2NikgYXMgd2VsbCBhcyBvZmZsb2FkIHJ1bGUgY29uc3RydWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIGZhc3RwYXRocyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGluIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMTM0MjljMTdjOWVkYWE2ZmQ1NzFlNzdiYTZhMmIwMjkwZTkwZjA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozNjoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XG5pbmRleCBkNzU3YzIxYzEwZjJkLi41ODQ0YWIxOWFlYzY2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XG5AQCAtNzEsNyAmIzQzOzcxLDkgQEAgZm9yd2FyZGluZyBwYXRoIGluY2x1ZGluZyB0aGUgTmV0ZmlsdGVyIGhvb2tzIGFuZCB0aGUgZmxvd3RhYmxlIGZhc3RwYXRoIGJ5cGFzcy5cbiBcbiBUaGUgZmxvd3RhYmxlIGVudHJ5IGFsc28gc3RvcmVzIHRoZSBOQVQgY29uZmlndXJhdGlvbiwgc28gYWxsIHBhY2tldHMgYXJlXG4gbWFuZ2xlZCBhY2NvcmRpbmcgdG8gdGhlIE5BVCBwb2xpY3kgdGhhdCBpcyBzcGVjaWZpZWQgZnJvbSB0aGUgY2xhc3NpYyBJUFxuLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWRcbiYjNDM7Zm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3dcbiYjNDM7YWxzbyBzdG9yZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBwYWNrZXQgdGhhdCBjcmVhdGVkIGl0LCBzbyBhIHByaW9yaXR5IHNldCBiZWZvcmVcbiYjNDM7YGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkXG4gdHJhZmZpYyBpcyBwYXNzZWQgdXAgdG8gZm9sbG93IHRoZSBjbGFzc2ljIElQIGZvcndhcmRpbmcgcGF0aCBnaXZlbiB0aGF0IHRoZVxuIHRyYW5zcG9ydCBoZWFkZXIgaXMgbWlzc2luZywgaW4gdGhpcyBjYXNlLCBmbG93dGFibGUgbG9va3VwcyBhcmUgbm90IHBvc3NpYmxlLlxuIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggOTI2MTE4MDI4MDFlYS4uMmFmY2U3NmFkMTMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0xMTYxLDYgJiM0MzsxMTYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4gXHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxuIFx0XHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fVkxBTl9QVVNIOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbmluZGV4IDk5YjI4YWFhN2NjNDcuLjRlZTk5ZThlNGEzNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC0zNzgsNiAmIzQzOzM3OCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbiBcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjIzMjE4YzhjYmMzZGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMjAyLDYgJiM0MzsyMDIsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkIHtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRcdGZsYWdzO1xuIFx0dTE2XHRcdFx0XHRcdHR5cGU7XG4gXHR1MzJcdFx0XHRcdFx0dGltZW91dDtcbiYjNDM7XHR1MzJcdFx0XHRcdFx0cHJpb3JpdHk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRcdHJjdV9oZWFkO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uYzg1ZTJkNjA4YzMyOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTUwOSw2ICYjNDM7NTA5LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aXBfZGVjcmVhc2VfdHRsKGlwaCk7XG4gXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gXG4mIzQzO1x0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpXG4mIzQzO1x0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuJiM0MztcbiBcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiBcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gXG5AQCAtMTEwNCw2ICYjNDM7MTEwNyw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aXA2aC1cdTAwM2Vob3BfbGltaXQtLTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbiYjNDM7XHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbiYjNDM7XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4mIzQzO1xuIFx0aWYgKGZsb3dfdGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxuIFx0XHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVx1MDAzZWN0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyLCBza2ItXHUwMDNlbGVuKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggODAxYTNkZDljZWVhMy4uY2FhYWRmZmMyNTYzZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbkBAIC02OTYsNiAmIzQzOzY5NiwxNyBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdCAgICBmbG93X29mZmxvYWRfZXRoX2RzdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuJiM0MztcdGlmIChmbG93LVx1MDAzZXByaW9yaXR5KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuJiM0MztcbiYjNDM7XHRcdGVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xuJiM0MztcdFx0aWYgKCFlbnRyeSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG4mIzQzO1x0XHRlbnRyeS1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHR1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1cGxlLVx1MDAzZWVuY2FwX251bTsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi5jYTkxOTI0YjRkZTNiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsMTEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdGlmICh0Y3BoKVxuIFx0XHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcbiBcbiYjNDM7XHQvKiBUaGUgcGFja2V0cyB0aGUgZmxvdyBmb3J3YXJkcyBpbiBpdHMgcGxhY2UgYnlwYXNzIHRoZSBydWxlcyB0aGF0XG4mIzQzO1x0ICogY2xhc3NpZmllZCB0aGlzIG9uZTsgY2FycnkgdGhlIHJlc3VsdCB3aXRoIHRoZSBmbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGZsb3ctXHUwMDNlcHJpb3JpdHkgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5O1xuJiM0MztcbiBcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLmFiNzczMjM1OGUxZDggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTQ1OCw2ICYjNDM7NDU4LDEwNiBAQCBmaVxuIFx0Y2hlY2tfZHNjcCBcJiMzNDtkc2NwX2Z3ZFwmIzM0OyBcJiMzNDskcG10dVwmIzM0O1xuIH1cbiBcbiYjNDM7Y2hlY2tfcHJpb3JpdHkoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgd2hhdD0kMVxuJiM0MztcdGxvY2FsIHBtdHU9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvaz0xXG4mIzQzO1xuJiM0MztcdGxvY2FsIGNvdW50ZXJcbiYjNDM7XHRjb3VudGVyPSQoaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8zIHwgZ3JlcCBwYWNrZXRzKVxuJiM0MztcdGxvY2FsIHBjMz0ke2NvdW50ZXIlKmJ5dGVzKn1cbiYjNDM7XHRwYzM9JHtwYzMjKnBhY2tldHN9XG4mIzQzO1xuJiM0MztcdGNvdW50ZXI9JChpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzAgfCBncmVwIHBhY2tldHMpXG4mIzQzO1x0bG9jYWwgcGMwPSR7Y291bnRlciUqYnl0ZXMqfVxuJiM0MztcdHBjMD0ke3BjMCMqcGFja2V0c31cbiYjNDM7XG4mIzQzO1x0bG9jYWwgZmFpbG1zZz1cJiMzNDtGQUlMOiBwbXR1ICRwbXR1OiAkd2hhdCBjb3VudGVycyBkbyBub3QgbWF0Y2gsIGV4cGVjdGVkXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGNhc2UgXCYjMzQ7JHdoYXRcJiMzNDsgaW5cbiYjNDM7XHRcJiMzNDtwcmlvX25vbmVcJiMzNDspXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyRwYzNcJiMzNDsgLWd0IDAgXSB8fCBbIFwmIzM0OyRwYzBcJiMzNDsgLWVxIDAgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0OyRmYWlsbXNnIHByaW8zID09IDAsIHByaW8wIFx1MDAzZSAwLCBidXQgZ290ICRwYzMsJHBjMFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0XHRyZXQ9MVxuJiM0MztcdFx0XHRvaz0wXG4mIzQzO1x0XHRmaVxuJiM0MztcdFx0OztcbiYjNDM7XHRcJiMzNDtwcmlvX2Z3ZFwmIzM0OylcbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JHBjM1wmIzM0OyAtZXEgMCBdIHx8IFsgXCYjMzQ7JHBjMFwmIzM0OyAtZ3QgMCBdOyB0aGVuXG4mIzQzO1x0XHRcdGVjaG8gXCYjMzQ7JGZhaWxtc2cgcHJpbzMgXHUwMDNlIDAsIHByaW8wID09IDAsIGJ1dCBnb3QgJHBjMywkcGMwXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRcdHJldD0xXG4mIzQzO1x0XHRcdG9rPTBcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHQ7O1xuJiM0MztcdCopXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRmYWlsbXNnOiBVbmtub3duIHByaW9yaXR5IGNoZWNrXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0b2s9MFxuJiM0MztcdGVzYWNcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDskb2tcJiMzNDsgLWVxIDEgXSA7dGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtQQVNTOiAkd2hhdDogcHJpb3JpdHkgcGFja2V0IGNvdW50ZXJzIG1hdGNoXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7dGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgcG10dT1cJiMzNDskM1wmIzM0O1xuJiM0MztcdGxvY2FsIHByb3RvPVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZHN0aXA9XCYjMzQ7JDVcJiMzNDtcbiYjNDM7XHRsb2NhbCBkc3Rwb3J0PVwmIzM0OyQ2XCYjMzQ7XG4mIzQzO1x0bG9jYWwgbHJldD0wXG4mIzQzO1xuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtZiAtIFx1MDAzY1x1MDAzY0VPRlxuJiM0Mzt0YWJsZSBuZXRkZXYgcHJpb2NoZWNrIHtcbiYjNDM7ICAgY291bnRlciBwcmlvMCB7IH1cbiYjNDM7ICAgY291bnRlciBwcmlvMyB7IH1cbiYjNDM7XG4mIzQzOyAgIGNoYWluIGVncmVzczAge1xuJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgXCYjMzQ7dmV0aDBcJiMzNDsgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxuJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSBcJiMzNDtwcmlvM1wmIzM0O1xuJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgbm9uZSBjb3VudGVyIG5hbWUgXCYjMzQ7cHJpbzBcJiMzNDtcbiYjNDM7ICAgfVxuJiM0MztcbiYjNDM7ICAgY2hhaW4gZWdyZXNzMSB7XG4mIzQzOyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSBcJiMzNDt2ZXRoMVwmIzM0OyBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0XG4mIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFwmIzM0O3ByaW8zXCYjMzQ7XG4mIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcJiMzNDtwcmlvMFwmIzM0O1xuJiM0MzsgICB9XG4mIzQzO31cbiYjNDM7RU9GXG4mIzQzO1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O1NLSVA6IENvdWxkIG5vdCBsb2FkIG5ldGRldjplZ3Jlc3MgZm9yIHZldGgwIGFuZCB2ZXRoMVwmIzM0O1xuJiM0MztcdFx0cmV0dXJuIDBcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgXCYjMzQ7JDFcJiMzNDsgXCYjMzQ7JDJcJiMzNDsgXCYjMzQ7JHBtdHVcJiMzNDsgXCYjMzQ7JHByb3RvXCYjMzQ7IFwmIzM0OyRkc3RpcFwmIzM0OyBcJiMzNDskZHN0cG9ydFwmIzM0OzsgdGhlblxuJiM0MztcdFx0bHJldD0xXG4mIzQzO1x0ZmlcbiYjNDM7XHRjaGVja19wcmlvcml0eSBcJiMzNDtwcmlvX25vbmVcJiMzNDsgXCYjMzQ7JHBtdHVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBUaGUgZmxvdyBzdG9yZXMgdGhlIHByaW9yaXR5IHNldCBiZWZvcmUgaXQgaXMgYWRkZWQsIHNvIHRoZSBwYWNrZXRzXG4mIzQzO1x0IyB0aGUgZmxvd3RhYmxlIGZvcndhcmRzIGxlYXZlIHdpdGggaXQgdG9vLCBpbiBib3RoIGRpcmVjdGlvbnMuXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjRU9GXG4mIzQzO3RhYmxlIGluZXQgcHJpb3NldCB7XG4mIzQzOyAgIGNoYWluIGZvcndhcmQge1xuJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHRcbiYjNDM7ICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozXG4mIzQzOyAgIH1cbiYjNDM7fVxuJiM0MztFT0ZcbiYjNDM7XHRpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgXCYjMzQ7JDFcJiMzNDsgXCYjMzQ7JDJcJiMzNDsgXCYjMzQ7JHBtdHVcJiMzNDsgXCYjMzQ7JHByb3RvXCYjMzQ7IFwmIzM0OyRkc3RpcFwmIzM0OyBcJiMzNDskZHN0cG9ydFwmIzM0OzsgdGhlblxuJiM0MztcdFx0bHJldD0xXG4mIzQzO1x0ZmlcbiYjNDM7XHRjaGVja19wcmlvcml0eSBcJiMzNDtwcmlvX2Z3ZFwmIzM0OyBcJiMzNDskcG10dVwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgZGVsZXRlIHRhYmxlIG5ldGRldiBwcmlvY2hlY2tcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICRscmV0XG4mIzQzO31cbiYjNDM7XG4gdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQoKVxuIHtcbiBcdGxvY2FsIG5zYT1cJiMzNDskMVwmIzM0O1xuQEAgLTUxNiw2ICYjNDM7NjE2LDExIEBAIGVsc2VcbiBcdHJldD0xXG4gZmlcbiBcbiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMCA2IFwmIzM0O1tkZWFkOjI6Ojk5XVwmIzM0OyAxMjM0NTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBwcmlvcml0eSB1cGRhdGVcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24mIzM5O3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cbkBAIC01NzIsNiAmIzQzOzY3NywxMSBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X2RzY3AgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbiBcdGV4aXQgMFxuIGZpXG4gXG4mIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSBhbmQgcG10dSBkaXNjb3ZlcnlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbiBcbiBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIFwmIzM0O1wmIzM0OzsgdGhlblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZCBsb2dpYyB0byBjYXB0dXJlIHBhY2tldCBwcmlvcml0eSBhbmQgcHJvcGFnYXRlIGl0IGR1cmluZyBzb2Z0d2FyZSBmbG93IHRhYmxlIGZvcndhcmRpbmcgKElQdjQvSVB2NikgYXMgd2VsbCBhcyBvZmZsb2FkIHJ1bGUgY29uc3RydWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIGZhc3RwYXRocyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGluIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMTM0MjljMTdjOWVkYWE2ZmQ1NzFlNzdiYTZhMmIwMjkwZTkwZjA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxMjozNjoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QKaW5kZXggZDc1N2MyMWMxMGYyZC4uNTg0NGFiMTlhZWM2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QKQEAgLTcxLDcgJiM0Mzs3MSw5IEBAIGZvcndhcmRpbmcgcGF0aCBpbmNsdWRpbmcgdGhlIE5ldGZpbHRlciBob29rcyBhbmQgdGhlIGZsb3d0YWJsZSBmYXN0cGF0aCBieXBhc3MuCiAKIFRoZSBmbG93dGFibGUgZW50cnkgYWxzbyBzdG9yZXMgdGhlIE5BVCBjb25maWd1cmF0aW9uLCBzbyBhbGwgcGFja2V0cyBhcmUKIG1hbmdsZWQgYWNjb3JkaW5nIHRvIHRoZSBOQVQgcG9saWN5IHRoYXQgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGNsYXNzaWMgSVAKLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWQKJiM0Mztmb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBUaGUgZmxvdwomIzQzO2Fsc28gc3RvcmVzIHRoZSBwcmlvcml0eSBvZiB0aGUgcGFja2V0IHRoYXQgY3JlYXRlZCBpdCwgc28gYSBwcmlvcml0eSBzZXQgYmVmb3JlCiYjNDM7YGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkCiB0cmFmZmljIGlzIHBhc3NlZCB1cCB0byBmb2xsb3cgdGhlIGNsYXNzaWMgSVAgZm9yd2FyZGluZyBwYXRoIGdpdmVuIHRoYXQgdGhlCiB0cmFuc3BvcnQgaGVhZGVyIGlzIG1pc3NpbmcsIGluIHRoaXMgY2FzZSwgZmxvd3RhYmxlIGxvb2t1cHMgYXJlIG5vdCBwb3NzaWJsZS4KIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IDkyNjExODAyODAxZWEuLjJhZmNlNzZhZDEzMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwpAQCAtMTE2MSw2ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQljYXNlIEZMT1dfQUNUSU9OX1JFRElSRUNUOgogCQkJb2RldiA9IGFjdC0mZ3Q7ZGV2OwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOgogCQljYXNlIEZMT1dfQUNUSU9OX0NTVU06CiAJCQlicmVhazsKIAkJY2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IDk5YjI4YWFhN2NjNDcuLjRlZTk5ZThlNGEzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCkBAIC0zNzgsNiAmIzQzOzM3OCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZiwKIAkJY2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDoKIAkJCW9kZXYgPSBhY3QtJmd0O2RldjsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBGTE9XX0FDVElPTl9QUklPUklUWToKIAkJY2FzZSBGTE9XX0FDVElPTl9DU1VNOgogCQkJYnJlYWs7CiAJCWNhc2UgRkxPV19BQ1RJT05fVkxBTl9QVVNIOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggZjJlMjc3MWYxODhmNC4uMjMyMThjOGNiYzNkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCkBAIC0yMDIsNiAmIzQzOzIwMiw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWQgewogCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7CiAJdTE2CQkJCQl0eXBlOwogCXUzMgkJCQkJdGltZW91dDsKJiM0MzsJdTMyCQkJCQlwcmlvcml0eTsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQkJcmN1X2hlYWQ7CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IGM4YzI5YTlhMTY4NDQuLmM4NWUyZDYwOGMzMjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCkBAIC01MDksNiAmIzQzOzUwOSw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlpcF9kZWNyZWFzZV90dGwoaXBoKTsKIAlza2JfY2xlYXJfdHN0YW1wKHNrYik7CiAKJiM0MzsJaWYgKGZsb3ctJmd0O3ByaW9yaXR5KQomIzQzOwkJc2tiLSZndDtwcmlvcml0eSA9IGZsb3ctJmd0O3ByaW9yaXR5OwomIzQzOwogCWlmIChmbG93X3RhYmxlLSZndDtmbGFncyAmYW1wOyBORl9GTE9XVEFCTEVfQ09VTlRFUikKIAkJbmZfY3RfYWNjdF91cGRhdGUoZmxvdy0mZ3Q7Y3QsIHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyLCBza2ItJmd0O2xlbik7CiAKQEAgLTExMDQsNiAmIzQzOzExMDcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlpcDZoLSZndDtob3BfbGltaXQtLTsKIAlza2JfY2xlYXJfdHN0YW1wKHNrYik7CiAKJiM0MzsJaWYgKGZsb3ctJmd0O3ByaW9yaXR5KQomIzQzOwkJc2tiLSZndDtwcmlvcml0eSA9IGZsb3ctJmd0O3ByaW9yaXR5OwomIzQzOwogCWlmIChmbG93X3RhYmxlLSZndDtmbGFncyAmYW1wOyBORl9GTE9XVEFCTEVfQ09VTlRFUikKIAkJbmZfY3RfYWNjdF91cGRhdGUoZmxvdy0mZ3Q7Y3QsIHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyLCBza2ItJmd0O2xlbik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCmluZGV4IDgwMWEzZGQ5Y2VlYTMuLmNhYWFkZmZjMjU2M2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwpAQCAtNjk2LDYgJiM0Mzs2OTYsMTcgQEAgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiAJICAgIGZsb3dfb2ZmbG9hZF9ldGhfZHN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpICZsdDsgMCkKIAkJcmV0dXJuIC0xOwogCiYjNDM7CWlmIChmbG93LSZndDtwcmlvcml0eSkgewomIzQzOwkJc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTsKJiM0MzsKJiM0MzsJCWVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpOwomIzQzOwkJaWYgKCFlbnRyeSkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CQllbnRyeS0mZ3Q7aWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTsKJiM0MzsJCWVudHJ5LSZndDtwcmlvcml0eSA9IGZsb3ctJmd0O3ByaW9yaXR5OwomIzQzOwl9CiYjNDM7CiAJdHVwbGUgPSAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHR1cGxlLSZndDtlbmNhcF9udW07IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCmluZGV4IDMyYjQyODEwMzhkZDMuLmNhOTE5MjRiNGRlM2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCkBAIC0xMTcsNiAmIzQzOzExNywxMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCWlmICh0Y3BoKQogCQlmbG93X29mZmxvYWRfY3RfdGNwKGN0KTsKIAomIzQzOwkvKiBUaGUgcGFja2V0cyB0aGUgZmxvdyBmb3J3YXJkcyBpbiBpdHMgcGxhY2UgYnlwYXNzIHRoZSBydWxlcyB0aGF0CiYjNDM7CSAqIGNsYXNzaWZpZWQgdGhpcyBvbmU7IGNhcnJ5IHRoZSByZXN1bHQgd2l0aCB0aGUgZmxvdy4KJiM0MzsJICovCiYjNDM7CWZsb3ctJmd0O3ByaW9yaXR5ID0gcGt0LSZndDtza2ItJmd0O3ByaW9yaXR5OwomIzQzOwogCV9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwogCXJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTsKIAlpZiAocmV0ICZsdDsgMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCA0NDljNTE4YmQ5NDdkLi5hYjc3MzIzNThlMWQ4IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCkBAIC00NTgsNiAmIzQzOzQ1OCwxMDYgQEAgZmkKIAljaGVja19kc2NwICYjMzQ7ZHNjcF9md2QmIzM0OyAmIzM0OyRwbXR1JiMzNDsKIH0KIAomIzQzO2NoZWNrX3ByaW9yaXR5KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHdoYXQ9JDEKJiM0MzsJbG9jYWwgcG10dT0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgb2s9MQomIzQzOwomIzQzOwlsb2NhbCBjb3VudGVyCiYjNDM7CWNvdW50ZXI9JChpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8zIHwgZ3JlcCBwYWNrZXRzKQomIzQzOwlsb2NhbCBwYzM9JHtjb3VudGVyJSpieXRlcyp9CiYjNDM7CXBjMz0ke3BjMyMqcGFja2V0c30KJiM0MzsKJiM0MzsJY291bnRlcj0kKGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzAgfCBncmVwIHBhY2tldHMpCiYjNDM7CWxvY2FsIHBjMD0ke2NvdW50ZXIlKmJ5dGVzKn0KJiM0MzsJcGMwPSR7cGMwIypwYWNrZXRzfQomIzQzOwomIzQzOwlsb2NhbCBmYWlsbXNnPSYjMzQ7RkFJTDogcG10dSAkcG10dTogJHdoYXQgY291bnRlcnMgZG8gbm90IG1hdGNoLCBleHBlY3RlZCYjMzQ7CiYjNDM7CiYjNDM7CWNhc2UgJiMzNDskd2hhdCYjMzQ7IGluCiYjNDM7CSYjMzQ7cHJpb19ub25lJiMzNDspCiYjNDM7CQlpZiBbICYjMzQ7JHBjMyYjMzQ7IC1ndCAwIF0gfHwgWyAmIzM0OyRwYzAmIzM0OyAtZXEgMCBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0OyRmYWlsbXNnIHByaW8zID09IDAsIHByaW8wICZndDsgMCwgYnV0IGdvdCAkcGMzLCRwYzAmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJb2s9MAomIzQzOwkJZmkKJiM0MzsJCTs7CiYjNDM7CSYjMzQ7cHJpb19md2QmIzM0OykKJiM0MzsJCWlmIFsgJiMzNDskcGMzJiMzNDsgLWVxIDAgXSB8fCBbICYjMzQ7JHBjMCYjMzQ7IC1ndCAwIF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7JGZhaWxtc2cgcHJpbzMgJmd0OyAwLCBwcmlvMCA9PSAwLCBidXQgZ290ICRwYzMsJHBjMCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQkJcmV0PTEKJiM0MzsJCQlvaz0wCiYjNDM7CQlmaQomIzQzOwkJOzsKJiM0MzsJKikKJiM0MzsJCWVjaG8gJiMzNDskZmFpbG1zZzogVW5rbm93biBwcmlvcml0eSBjaGVjayYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJb2s9MAomIzQzOwllc2FjCiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskb2smIzM0OyAtZXEgMSBdIDt0aGVuCiYjNDM7CQllY2hvICYjMzQ7UEFTUzogJHdoYXQ6IHByaW9yaXR5IHBhY2tldCBjb3VudGVycyBtYXRjaCYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO3Rlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X3ByaW9yaXR5KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBtdHU9JiMzNDskMyYjMzQ7CiYjNDM7CWxvY2FsIHByb3RvPSYjMzQ7JDQmIzM0OwomIzQzOwlsb2NhbCBkc3RpcD0mIzM0OyQ1JiMzNDsKJiM0MzsJbG9jYWwgZHN0cG9ydD0mIzM0OyQ2JiMzNDsKJiM0MzsJbG9jYWwgbHJldD0wCiYjNDM7CiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1mIC0gJmx0OyZsdDtFT0YKJiM0Mzt0YWJsZSBuZXRkZXYgcHJpb2NoZWNrIHsKJiM0MzsgICBjb3VudGVyIHByaW8wIHsgfQomIzQzOyAgIGNvdW50ZXIgcHJpbzMgeyB9CiYjNDM7CiYjNDM7ICAgY2hhaW4gZWdyZXNzMCB7CiYjNDM7ICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlICYjMzQ7dmV0aDAmIzM0OyBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IDA6MyBjb3VudGVyIG5hbWUgJiMzNDtwcmlvMyYjMzQ7CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lICYjMzQ7cHJpbzAmIzM0OwomIzQzOyAgIH0KJiM0MzsKJiM0MzsgICBjaGFpbiBlZ3Jlc3MxIHsKJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgJiMzNDt2ZXRoMSYjMzQ7IHByaW9yaXR5IDA7IHBvbGljeSBhY2NlcHQKJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSAmIzM0O3ByaW8zJiMzNDsKJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgbm9uZSBjb3VudGVyIG5hbWUgJiMzNDtwcmlvMCYjMzQ7CiYjNDM7ICAgfQomIzQzO30KJiM0MztFT0YKJiM0MzsJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IGxvYWQgbmV0ZGV2OmVncmVzcyBmb3IgdmV0aDAgYW5kIHZldGgxJiMzNDsKJiM0MzsJCXJldHVybiAwCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19pcCAmIzM0OyQxJiMzNDsgJiMzNDskMiYjMzQ7ICYjMzQ7JHBtdHUmIzM0OyAmIzM0OyRwcm90byYjMzQ7ICYjMzQ7JGRzdGlwJiMzNDsgJiMzNDskZHN0cG9ydCYjMzQ7OyB0aGVuCiYjNDM7CQlscmV0PTEKJiM0MzsJZmkKJiM0MzsJY2hlY2tfcHJpb3JpdHkgJiMzNDtwcmlvX25vbmUmIzM0OyAmIzM0OyRwbXR1JiMzNDsKJiM0MzsKJiM0MzsJIyBUaGUgZmxvdyBzdG9yZXMgdGhlIHByaW9yaXR5IHNldCBiZWZvcmUgaXQgaXMgYWRkZWQsIHNvIHRoZSBwYWNrZXRzCiYjNDM7CSMgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcyBsZWF2ZSB3aXRoIGl0IHRvbywgaW4gYm90aCBkaXJlY3Rpb25zLgomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtZiAtICZsdDsmbHQ7RU9GCiYjNDM7dGFibGUgaW5ldCBwcmlvc2V0IHsKJiM0MzsgICBjaGFpbiBmb3J3YXJkIHsKJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHQKJiM0MzsgICAgICBtZXRhIHByaW9yaXR5IHNldCAwOjMKJiM0MzsgICB9CiYjNDM7fQomIzQzO0VPRgomIzQzOwlpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgJiMzNDskMSYjMzQ7ICYjMzQ7JDImIzM0OyAmIzM0OyRwbXR1JiMzNDsgJiMzNDskcHJvdG8mIzM0OyAmIzM0OyRkc3RpcCYjMzQ7ICYjMzQ7JGRzdHBvcnQmIzM0OzsgdGhlbgomIzQzOwkJbHJldD0xCiYjNDM7CWZpCiYjNDM7CWNoZWNrX3ByaW9yaXR5ICYjMzQ7cHJpb19md2QmIzM0OyAmIzM0OyRwbXR1JiMzNDsKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IGRlbGV0ZSB0YWJsZSBpbmV0IHByaW9zZXQKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IGRlbGV0ZSB0YWJsZSBuZXRkZXYgcHJpb2NoZWNrCiYjNDM7CiYjNDM7CXJldHVybiAkbHJldAomIzQzO30KJiM0MzsKIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0KCkKIHsKIAlsb2NhbCBuc2E9JiMzNDskMSYjMzQ7CkBAIC01MTYsNiAmIzQzOzYxNiwxMSBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MztpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X3ByaW9yaXR5ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDAgNiAmIzM0O1tkZWFkOjI6Ojk5XSYjMzQ7IDEyMzQ1OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIG5zMSBhbmQKICMgd2lsbCBkZXBlbmQgb24gbnMxIGJlaW5nIG1hc3F1ZXJhZGVkIGluIG5zcjEuCiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy4KQEAgLTU3Miw2ICYjNDM7Njc3LDExIEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfZHNjcCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuCiAJZXhpdCAwCiBmaQogCiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBwcmlvcml0eSB1cGRhdGUgYW5kIHBtdHUgZGlzY292ZXJ5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzOwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyICZndDsvZGV2L251bGwKIAogaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxICYjMzQ7JiMzNDs7IHRoZW4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFzc2Vzc21lbnQ6IE5ldGZpbHRlciBGbG93dGFibGUgUHJpb3JpdHkgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBvdXIgZnV6emluZyBlZmZvcnRzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuCgpMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldGZpbHRlciBmbG93dGFibGUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFja2V0IHByaW9yaXR5IGhhbmRsaW5nLiBXZSYjMzk7dmUgZ290OgoKMS4gIERvY3VtZW50YXRpb24gdXBkYXRlcyBpbiBgbmZfZmxvd3RhYmxlLnJzdGAuCjIuICBEcml2ZXIgYWRkaXRpb25zIChgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCkgdGhhdCBpbXBsZW1lbnQgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYC4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggc3BlY2lmaWMgaGFyZHdhcmUsIHByb2JhYmx5IGNvbmNlcm5pbmcgdHJhZmZpYyBwcmlvcml0aXphdGlvbi4KMy4gIEhlYWRlciBjaGFuZ2VzIChgbmZfZmxvd190YWJsZS5oYCkgd2hlcmUgYHN0cnVjdCBmbG93X29mZmxvYWRgIG5vdyBpbmNsdWRlcyBhIGB1MzIgcHJpb3JpdHlgIGZpZWxkLgo0LiAgQ29kZSBtb2RpZmljYXRpb25zIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCB3aGVyZSBwcmlvcml0eSBpcyBzZXQgb24gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpZiBpdCBleGlzdHMuCjUuICBNb2RpZmljYXRpb25zIHRvIGhvdyBwcmlvcml0eSBpcyBoYW5kbGVkIGluIGZsb3cgcnVsZSByb3V0aW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLgo2LiAgQW5kIGZpbmFsbHksIHNldHRpbmcgdGhlIHByaW9yaXR5IGluIGBuZnRfZmxvd19vZmZsb2FkLmNgIGJhc2VkIG9uIHRoZSBwYWNrZXQmIzM5O3MgYHNrYmAgcHJpb3JpdHkuCjcuICBBIG5ldyBzZWxmLXRlc3Qgc2NyaXB0LCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBidXQgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgbWVhbiBpdCYjMzk7cyBjb21wbGV0ZS4KClNvLCB3aGVyZSBpcyB0aGlzIGNvZGUgcmVzaWRpbmc/IEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHNxdWFyZWx5IGluIHRoZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZC4gVGhlc2UgYXJlIGtleSBhcmVhcywgd2hpY2ggYXJlIGFsbW9zdCBjZXJ0YWlubHkgcnVubmluZyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzZXR1cHMg4oCTIHRoaW5rIFFFTVUsIHZpcnRpbywgdGFwL3ZldGggaW50ZXJmYWNlcywgbmFtZXNwYWNlcywgYW5kLCBvZiBjb3Vyc2UsIG5mdGFibGVzLgoKKipNeSBFeHBlcnQgT3BpbmlvbjoqKgoKR2l2ZW4gdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvcmUgbmV0d29ya2luZywgbmV0ZmlsdGVyIGNvZGUsIHBhY2tldCBmb3J3YXJkaW5nLCBmbG93dGFibGUgb2ZmbG9hZCwgYW5kIG5mdGFibGVzIGV2YWx1YXRpb24sIF9hYnNvbHV0ZWx5XywgdGhpcyB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24uIFRoZSBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yaywgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcHJpb3JpdHkgaGFuZGxpbmcgY291bGQgYWxzbyByZXZlYWwgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggZGlmZmVyZW50IHRyYWZmaWMgZmxvd3MuIE5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIHNjYW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCByZWZpbmUgdGhlIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTA0PWNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA1Olx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjcwNTpcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNi1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjM6XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjQtXHRkZXBlbmRzIG9uIFBST0NfRlNcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXHQmIzQzOz0gbmZ0X2Z3ZF9uZXRkZXYub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0My1uZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NjpuZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSAmIzQzOz0gbmZfZmxvd190YWJsZV9wcm9jZnMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDc6aWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSksbSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ4LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ5OmVsc2UgaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSkseSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUwLW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSBuZl9mbG93X3RhYmxlX2JwZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTE2MjQ9dm9pZCBuZl9jb25udHJhY2tfdGNwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xNjU2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTY1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NTgtXHR0bi1cdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jPTE5NT12b2lkIG5mX2Nvbm50cmFja191ZHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jOjIwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwNC1cdHVuLVx1MDAzZW9mZmxvYWRfdGltZW91dCA9IDMwICogSFo7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4NT1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYwOS1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9VTkFDSyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo2MTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjExLVx0TkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQUQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYxOC1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYyMC1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FELFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz02NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTc4Ni1cdH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6Nzg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTc4OC1cdFtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9UQ1BfT0ZGTE9BRF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTgzNi1cdH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6ODM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTgzOC1cdFtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTkzNT1zdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3RjcF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk2NS1cdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXS5kYXRhID0gXHUwMDI2dG4tXHUwMDNlb2ZmbG9hZF90aW1lb3V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0xMDAzPXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMwLVx0dGFibGVbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVURQX1NUUkVBTV0uZGF0YSA9IFx1MDAyNnVuLVx1MDAzZXRpbWVvdXRzW1VEUF9DVF9SRVBMSUVEXTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMzItXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0uZGF0YSA9IFx1MDAyNnVuLVx1MDAzZW9mZmxvYWRfdGltZW91dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNDg9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDU3LVx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA1ODpcdFx0XHRORl9GTE9XX1RBQkxFX1NUQVRfREVDX0FUT01JQyhuZXQsIGNvdW50X3dxX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNTktXHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDYxLVx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX2RlbChvZmZsb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA2MjpcdFx0XHRORl9GTE9XX1RBQkxFX1NUQVRfREVDX0FUT01JQyhuZXQsIGNvdW50X3dxX2RlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjMtXHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY1LVx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX3N0YXRzKG9mZmxvYWQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY2Olx0XHRcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3Ffc3RhdHMpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3Nj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgwLVx0aWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX1JFUExBQ0UpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA4MTpcdFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgyLVx0XHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODMtXHR9IGVsc2UgaWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA4NDpcdFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9kZWwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDg1LVx0XHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODYtXHR9IGVsc2Uge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDg3Olx0XHRORl9GTE9XX1RBQkxFX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50X3dxX3N0YXRzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4OC1cdFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz04ND1zdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy04OC1cdFx0X19iZTE2XHRwcm90bztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6ODk6XHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtOTAtXHR1OCBudW1fZW5jYXBzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xMzktXHRcdFx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTQwOlx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xNDEtXHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE2Ni1cdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoxNjc6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE2OC1cdFx0XHRcdFx0Z290byBlcnJfb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIE15IHBsYW4gaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzZWN0aW9ucyBvZiB0aGUgZmlsZS4gSSYjMzk7bSB0aGlua2luZyBsaW5lcyA1MDAtNTE1IGFuZCA3MDAtNzI1IGFyZSBwcm9iYWJseSBrZXkgYXJlYXMgdG8gZXhhbWluZS4gVGhlc2Ugc2VjdGlvbnMgbGlrZWx5IGNvbnRhaW4gY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHJlbGF0aW9uc2hpcHMgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gQnkgcGlucG9pbnRpbmcgdGhlc2UgcmFuZ2VzLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aGluIHRoaXMgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSXQmIzM5O3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhcHByb2FjaCB0aGlzIHNwZWNpZmljIHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGRlZmF1bHQgblxuIDUwMTpcdFx0aGVscFxuIDUwMjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXG4gNTAzOlx0XG4gNTA0Olx0Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbiA1MDU6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4gNTA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcJiMzNDtcbiA1MDc6XHRcdGhlbHBcbiA1MDg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUwOTpcdFx0ICBjaG9vc2Ugd2hhdCBmbG93cyBhcmUgcGxhY2VkIGludG8gdGhlIGhhcmR3YXJlLlxuIDUxMDpcdFxuIDUxMTpcdGNvbmZpZyBORlRfQ09OTkxJTUlUXG4gNTEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcJiMzNDtcbiA1MTM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNTE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDUxNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbiA1MTY6XHRcdGhlbHBcbiA1MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Y29ubmxpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUxODpcdFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxuIDUxOTpcdFxuIDUyMDpcdGNvbmZpZyBORlRfTE9HXG4gNTIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGxvZyBtb2R1bGVcJiMzNDtcbiA1MjI6XHRcdGhlbHBcbiA1MjM6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7bG9nXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0byBsb2dcbiA1MjQ6XHRcdCAgcGFja2V0cyBtYXRjaGluZyBzb21lIGNyaXRlcmlhLlxuIDUyNTpcdFxuIDUyNjpcdGNvbmZpZyBORlRfTElNSVRcbiA1Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbGltaXQgbW9kdWxlXCYjMzQ7XG4gNTI4Olx0XHRoZWxwXG4gNTI5Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFwmIzM0O2xpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIE5ldGZpbHRlciBmbG93IHRhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTtsbCB3YW50IHRvIHplcm8gaW4gb24gYm90aCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVybmV0LXNwZWNpZmljIG9wdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBpcyBrZXkgdG8gZGlhZ25vc2luZywgdHdlYWtpbmcsIG9yIGludGVncmF0aW5nIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0YWJsZXMgYXJlIGVuYWJsZWQsIGlmIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gSXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcy4gR290dGEgZ2V0IHRoZSBsb3ctZG93biBvbiB0aGUgYmFzaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcbiA3MDE6XHRlbmRpZiAjIE5GX1RBQkxFU1xuIDcwMjpcdFxuIDcwMzpcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbiA3MDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbiA3MDU6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcwNjpcdFx0aGVscFxuIDcwNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBzdXBwb3J0LlxuIDcwODpcdFxuIDcwOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcxMDpcdFxuIDcxMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFXG4gNzEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiA3MTM6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcbiA3MTQ6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNzE1Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuIDcxNjpcdFx0aGVscFxuIDcxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXG4gNzE4Olx0XG4gNzE5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzIwOlx0XG4gNzIxOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG4gNzIyOlx0XHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4gNzIzOlx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MjQ6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDcyNTpcdFx0aGVscFxuIDcyNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcbiA3Mjc6XHRcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxuIDcyODpcdFxuIDcyOTpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xuIDczMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIFh0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGlwX3RhYmxlcylcJiMzNDtcbiA3MzE6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDczMjpcdFx0aGVscFxuIDczMzpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgdG8gdXNlIGFueSBvZiBpcF90YWJsZXMsXG4gNzM0Olx0XHQgIGlwNl90YWJsZXMgb3IgYXJwX3RhYmxlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzOAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgTmV0ZmlsdGVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZCByZWNlbnRseSBpbiB0aGUgTmV0ZmlsdGVyIHJlYWxtLiBBaGEsIEkgc2VlIHR3byBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEludGVyZXN0aW5nLiBOb3csIHRoZSBzeW1ib2xzIGludm9sdmVkIGFyZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucz8gQXJlIHRoZXkgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzPyBBcmUgdGhleSBzdGF0aWMgYW5kIGludGVybmFsIHRvIHRoYXQgZmlsZT8gT3IsIGV2ZW4gbW9yZSBjcml0aWNhbGx5LCB3aGVyZSBhbmQgaG93IGFyZSB0aGV5ICpjYWxsZWQqPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBmbG93IHRhYmxlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZHxuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDU3PW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0Njg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04Njc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4ODc6XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4OC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTAwMT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVwbGVfaXB2NihzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNjYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDY3OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2OC1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjE4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIxOTpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjIwLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgd29ya3MsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSByb3V0aW5nIGRlY2lzaW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIG9mZmxvYWQgcHJvY2Vzcy4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAgaXMgdXRpbGl6ZWQsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbHMuIFdoZXJlIGV4YWN0bHkgZG9lcyB0aGlzIGZ1bmN0aW9uIGZpdCBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgYXJjaGl0ZWN0dXJlPyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIHdoeSBpdCYjMzk7cyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz02ODI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4NC1cdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NTQ9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1Ny17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc1ODpcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTktXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc4Mz1pbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzg2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Nzg3Olx0aWYgKG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24obmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4OC1cdFx0cmV0dXJuIC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgTkZUYWJsZXMgRmxvdyBPZmZsb2FkIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIFRoZSBrZXkgZnVuY3Rpb24gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAuIFRpbWUgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBzdGFydCBieSBzZWVpbmcgcHJlY2lzZWx5IHdoZXJlIHRoZSBldmFsdWF0aW9uIGlzIGludm9rZWQuIExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIHJlYWxseSBoZWxwIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NDE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2N0X3RjcChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNDktXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1MDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTEtXHRcdFx0XHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjI1LVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCkpLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI2Olx0LmV2YWxcdFx0PSBuZnRfZmxvd19vZmZsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjctXHQuaW5pdFx0XHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDAKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMTIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQsIHNvIEkgY2hlY2tlZCBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCDigJMganVzdCBjb25maXJtaW5nIHRoZXkmIzM5O3JlIGV0aGVybmV0IGRyaXZlcnMgZm9yIEFpcm9oYSBhbmQgTWVkaWFUZWsgU29DcywgcmVzcGVjdGl2ZWx5LiBUaGUgY29yZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyYCwgc3BlY2lmaWNhbGx5IGBuZnRfZmxvd19vZmZsb2FkLmNgLCBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kIGBuZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuCgpJJiMzOTtsbCBsaXN0IG91dCB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbjogYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAsIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NGAsIGFuZCBgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjZgLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRob3NlIGZpbGVzLiBJbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFyZSBzdGF0aWMgYW5kIGFyZSBjYWxsZWQgYnkgdGhlIHJlc3BlY3RpdmUgaG9vayBmdW5jdGlvbnMuIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGFsc28gc3RhdGljLCBpbnZva2VkIHRocm91Z2ggYG5mdF9mbG93X29mZmxvYWRfb3BzLmV2YWxgLiAgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gIGlzIHN0YXRpYyBhbmQgdXNlZCBieSBib3RoIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NGAgYW5kIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NmAuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBORl9GTE9XX1RBQkxFYCwgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX1RBQkxFU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9JTkdSRVNTYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBjb3JyZWN0bHkgZGVwZW5kZW50LiBDaGVja2luZyB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYE5GX0ZMT1dfVEFCTEVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gYE5GVF9GTE9XX09GRkxPQURgIGRlcGVuZHMgb24gYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZGVwZW5kcyBvbiBgTkZfRkxPV19UQUJMRWAuIFdlIGtub3cgYE5FVEZJTFRFUl9JTkdSRVNTYCBkZXBlbmRzIG9uIGBORVRGSUxURVJgIHdoaWNoIGlzIHN0YW5kYXJkLCBzbyB3ZSYjMzk7cmUgY292ZXJlZCB3aXRoIGBORl9GTE9XX1RBQkxFYCwgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfQ09OTlRSQUNLYC4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBsZXQmIzM5O3MgZG8gYSBxdWljayBkaWZmLiBUaGUgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24sIHRoZSBkcml2ZXIgZmlsZXMgSSBhbHJlYWR5IHNhdywgYSBuZXcgYHByaW9yaXR5YCBmaWVsZCBpbiBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgaW4gYG5mX2Zsb3dfdGFibGUuaGAsIGFuZCwgaW1wb3J0YW50bHksIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgYG5ldC9uZXRmaWx0ZXJgIGZpbGVzIHdoaWNoIHNldC9wb3B1bGF0ZSB0aGUgYHNrYi0mZ3Q7cHJpb3JpdHlgIGR1cmluZyBJUHY0IGFuZCBJUHY2IGZvcndhcmRpbmcsIG9yIHJlY29yZCBhbmQgc2V0IHByaW9yaXR5IHZhbHVlcyBpbnRvIHRoZSBmbG93IGRhdGEsIGFuZCBhZGRzIGBGTE9XX0FDVElPTl9QUklPUklUWWAuIFBsdXMsIHRoZXJlJiMzOTtzIGEgbmV3IHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hgLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBwYXRjaCBjbGVhcmx5IG1vZGlmaWVzIGhvdyBwYWNrZXQgcHJpb3JpdHkgaXMgaGFuZGxlZCB3aXRoaW4gbmV0ZmlsdGVyIGZsb3cgdGFibGVzLCBlbmNvbXBhc3NpbmcgYm90aCBzb2Z0d2FyZSBmYXN0cGF0aCBhbmQgZmxvdyBvZmZsb2FkaW5nLiBUaGF0IG1lYW5zIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgYXJlIGFmZmVjdGVkLgoKKipUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4qKgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgYHNldC1yZXN1bHRzYDoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgUmVhc29uaW5nYDogTW9kaWZpZXMgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIHRvIHJlY29yZCBhbmQgcmVzdG9yZSBgc2tiYCBwcmlvcml0eSBhY3Jvc3MgZmFzdHBhdGggYW5kIGhhcmR3YXJlIG9mZmxvYWQgcnVsZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0YCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2YAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUl9JTkdSRVNTYAoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cbi0gVGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEzNDI5YzE3YzllZGFhNmZkNTcxZTc3YmE2YTJiMDI5MGU5MGYwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTI6MzY6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0CmluZGV4IGQ3NTdjMjFjMTBmMmQuLjU4NDRhYjE5YWVjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0CkBAIC03MSw3ICYjNDM7NzEsOSBAQCBmb3J3YXJkaW5nIHBhdGggaW5jbHVkaW5nIHRoZSBOZXRmaWx0ZXIgaG9va3MgYW5kIHRoZSBmbG93dGFibGUgZmFzdHBhdGggYnlwYXNzLgogCiBUaGUgZmxvd3RhYmxlIGVudHJ5IGFsc28gc3RvcmVzIHRoZSBOQVQgY29uZmlndXJhdGlvbiwgc28gYWxsIHBhY2tldHMgYXJlCiBtYW5nbGVkIGFjY29yZGluZyB0byB0aGUgTkFUIHBvbGljeSB0aGF0IGlzIHNwZWNpZmllZCBmcm9tIHRoZSBjbGFzc2ljIElQCi1mb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBGcmFnbWVudGVkCiYjNDM7Zm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3cKJiM0MzthbHNvIHN0b3JlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIHBhY2tldCB0aGF0IGNyZWF0ZWQgaXQsIHNvIGEgcHJpb3JpdHkgc2V0IGJlZm9yZQomIzQzO2BgZmxvdyBhZGRgYCBhcHBsaWVzIHRvIHRoZSBwYWNrZXRzIHRoYXQgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcy4gRnJhZ21lbnRlZAogdHJhZmZpYyBpcyBwYXNzZWQgdXAgdG8gZm9sbG93IHRoZSBjbGFzc2ljIElQIGZvcndhcmRpbmcgcGF0aCBnaXZlbiB0aGF0IHRoZQogdHJhbnNwb3J0IGhlYWRlciBpcyBtaXNzaW5nLCBpbiB0aGlzIGNhc2UsIGZsb3d0YWJsZSBsb29rdXBzIGFyZSBub3QgcG9zc2libGUuCiBUQ1AgUlNUIGFuZCBGSU4gcGFja2V0cyBhcmUgYWxzbyBwYXNzZWQgdXAgdG8gdGhlIGNsYXNzaWMgSVAgZm9yd2FyZGluZyBwYXRoIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwppbmRleCA5MjYxMTgwMjgwMWVhLi4yYWZjZTc2YWQxMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTExNjEsNiAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJY2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDoKIAkJCW9kZXYgPSBhY3QtJmd0O2RldjsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBGTE9XX0FDVElPTl9QUklPUklUWToKIAkJY2FzZSBGTE9XX0FDVElPTl9DU1VNOgogCQkJYnJlYWs7CiAJCWNhc2UgRkxPV19BQ1RJT05fVkxBTl9QVVNIOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYwppbmRleCA5OWIyOGFhYTdjYzQ3Li40ZWU5OWU4ZTRhMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYwpAQCAtMzc4LDYgJiM0MzszNzgsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsCiAJCWNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6CiAJCQlvZGV2ID0gYWN0LSZndDtkZXY7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6CiAJCWNhc2UgRkxPV19BQ1RJT05fQ1NVTToKIAkJCWJyZWFrOwogCQljYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCmluZGV4IGYyZTI3NzFmMTg4ZjQuLjIzMjE4YzhjYmMzZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMjAyLDYgJiM0MzsyMDIsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkIHsKIAl1bnNpZ25lZCBsb25nCQkJCWZsYWdzOwogCXUxNgkJCQkJdHlwZTsKIAl1MzIJCQkJCXRpbWVvdXQ7CiYjNDM7CXUzMgkJCQkJcHJpb3JpdHk7CiAJc3RydWN0IHJjdV9oZWFkCQkJCXJjdV9oZWFkOwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwppbmRleCBjOGMyOWE5YTE2ODQ0Li5jODVlMmQ2MDhjMzI5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwpAQCAtNTA5LDYgJiM0Mzs1MDksOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaXBfZGVjcmVhc2VfdHRsKGlwaCk7CiAJc2tiX2NsZWFyX3RzdGFtcChza2IpOwogCiYjNDM7CWlmIChmbG93LSZndDtwcmlvcml0eSkKJiM0MzsJCXNrYi0mZ3Q7cHJpb3JpdHkgPSBmbG93LSZndDtwcmlvcml0eTsKJiM0MzsKIAlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpCiAJCW5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctJmd0O2N0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpciwgc2tiLSZndDtsZW4pOwogCkBAIC0xMTA0LDYgJiM0MzsxMTA3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaXA2aC0mZ3Q7aG9wX2xpbWl0LS07CiAJc2tiX2NsZWFyX3RzdGFtcChza2IpOwogCiYjNDM7CWlmIChmbG93LSZndDtwcmlvcml0eSkKJiM0MzsJCXNrYi0mZ3Q7cHJpb3JpdHkgPSBmbG93LSZndDtwcmlvcml0eTsKJiM0MzsKIAlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpCiAJCW5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctJmd0O2N0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpciwgc2tiLSZndDtsZW4pOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwppbmRleCA4MDFhM2RkOWNlZWEzLi5jYWFhZGZmYzI1NjNlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKQEAgLTY5Niw2ICYjNDM7Njk2LDE3IEBAIG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAogCSAgICBmbG93X29mZmxvYWRfZXRoX2RzdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSAmbHQ7IDApCiAJCXJldHVybiAtMTsKIAomIzQzOwlpZiAoZmxvdy0mZ3Q7cHJpb3JpdHkpIHsKJiM0MzsJCXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7CiYjNDM7CiYjNDM7CQllbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTsKJiM0MzsJCWlmICghZW50cnkpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkJZW50cnktJmd0O2lkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7CiYjNDM7CQllbnRyeS0mZ3Q7cHJpb3JpdHkgPSBmbG93LSZndDtwcmlvcml0eTsKJiM0MzsJfQomIzQzOwogCXR1cGxlID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0dXBsZS0mZ3Q7ZW5jYXBfbnVtOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwppbmRleCAzMmI0MjgxMDM4ZGQzLi5jYTkxOTI0YjRkZTNiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwpAQCAtMTE3LDYgJiM0MzsxMTcsMTEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKIAlpZiAodGNwaCkKIAkJZmxvd19vZmZsb2FkX2N0X3RjcChjdCk7CiAKJiM0MzsJLyogVGhlIHBhY2tldHMgdGhlIGZsb3cgZm9yd2FyZHMgaW4gaXRzIHBsYWNlIGJ5cGFzcyB0aGUgcnVsZXMgdGhhdAomIzQzOwkgKiBjbGFzc2lmaWVkIHRoaXMgb25lOyBjYXJyeSB0aGUgcmVzdWx0IHdpdGggdGhlIGZsb3cuCiYjNDM7CSAqLwomIzQzOwlmbG93LSZndDtwcmlvcml0eSA9IHBrdC0mZ3Q7c2tiLSZndDtwcmlvcml0eTsKJiM0MzsKIAlfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKTsKIAlyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7CiAJaWYgKHJldCAmbHQ7IDApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKaW5kZXggNDQ5YzUxOGJkOTQ3ZC4uYWI3NzMyMzU4ZTFkOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaApAQCAtNDU4LDYgJiM0Mzs0NTgsMTA2IEBAIGZpCiAJY2hlY2tfZHNjcCAmIzM0O2RzY3BfZndkJiMzNDsgJiMzNDskcG10dSYjMzQ7CiB9CiAKJiM0MztjaGVja19wcmlvcml0eSgpCiYjNDM7ewomIzQzOwlsb2NhbCB3aGF0PSQxCiYjNDM7CWxvY2FsIHBtdHU9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG9rPTEKJiM0MzsKJiM0MzsJbG9jYWwgY291bnRlcgomIzQzOwljb3VudGVyPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXIgbmV0ZGV2IHByaW9jaGVjayBwcmlvMyB8IGdyZXAgcGFja2V0cykKJiM0MzsJbG9jYWwgcGMzPSR7Y291bnRlciUqYnl0ZXMqfQomIzQzOwlwYzM9JHtwYzMjKnBhY2tldHN9CiYjNDM7CiYjNDM7CWNvdW50ZXI9JChpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8wIHwgZ3JlcCBwYWNrZXRzKQomIzQzOwlsb2NhbCBwYzA9JHtjb3VudGVyJSpieXRlcyp9CiYjNDM7CXBjMD0ke3BjMCMqcGFja2V0c30KJiM0MzsKJiM0MzsJbG9jYWwgZmFpbG1zZz0mIzM0O0ZBSUw6IHBtdHUgJHBtdHU6ICR3aGF0IGNvdW50ZXJzIGRvIG5vdCBtYXRjaCwgZXhwZWN0ZWQmIzM0OwomIzQzOwomIzQzOwljYXNlICYjMzQ7JHdoYXQmIzM0OyBpbgomIzQzOwkmIzM0O3ByaW9fbm9uZSYjMzQ7KQomIzQzOwkJaWYgWyAmIzM0OyRwYzMmIzM0OyAtZ3QgMCBdIHx8IFsgJiMzNDskcGMwJiMzNDsgLWVxIDAgXTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDskZmFpbG1zZyBwcmlvMyA9PSAwLCBwcmlvMCAmZ3Q7IDAsIGJ1dCBnb3QgJHBjMywkcGMwJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCW9rPTAKJiM0MzsJCWZpCiYjNDM7CQk7OwomIzQzOwkmIzM0O3ByaW9fZndkJiMzNDspCiYjNDM7CQlpZiBbICYjMzQ7JHBjMyYjMzQ7IC1lcSAwIF0gfHwgWyAmIzM0OyRwYzAmIzM0OyAtZ3QgMCBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0OyRmYWlsbXNnIHByaW8zICZndDsgMCwgcHJpbzAgPT0gMCwgYnV0IGdvdCAkcGMzLCRwYzAmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJb2s9MAomIzQzOwkJZmkKJiM0MzsJCTs7CiYjNDM7CSopCiYjNDM7CQllY2hvICYjMzQ7JGZhaWxtc2c6IFVua25vd24gcHJpb3JpdHkgY2hlY2smIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCW9rPTAKJiM0MzsJZXNhYwomIzQzOwomIzQzOwlpZiBbICYjMzQ7JG9rJiMzNDsgLWVxIDEgXSA7dGhlbgomIzQzOwkJZWNobyAmIzM0O1BBU1M6ICR3aGF0OiBwcmlvcml0eSBwYWNrZXQgY291bnRlcnMgbWF0Y2gmIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mzt0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSgpCiYjNDM7ewomIzQzOwlsb2NhbCBwbXR1PSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCBwcm90bz0mIzM0OyQ0JiMzNDsKJiM0MzsJbG9jYWwgZHN0aXA9JiMzNDskNSYjMzQ7CiYjNDM7CWxvY2FsIGRzdHBvcnQ9JiMzNDskNiYjMzQ7CiYjNDM7CWxvY2FsIGxyZXQ9MAomIzQzOwomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtZiAtICZsdDsmbHQ7RU9GCiYjNDM7dGFibGUgbmV0ZGV2IHByaW9jaGVjayB7CiYjNDM7ICAgY291bnRlciBwcmlvMCB7IH0KJiM0MzsgICBjb3VudGVyIHByaW8zIHsgfQomIzQzOwomIzQzOyAgIGNoYWluIGVncmVzczAgewomIzQzOyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSAmIzM0O3ZldGgwJiMzNDsgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdAomIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lICYjMzQ7cHJpbzMmIzM0OwomIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSAmIzM0O3ByaW8wJiMzNDsKJiM0MzsgICB9CiYjNDM7CiYjNDM7ICAgY2hhaW4gZWdyZXNzMSB7CiYjNDM7ICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlICYjMzQ7dmV0aDEmIzM0OyBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IDA6MyBjb3VudGVyIG5hbWUgJiMzNDtwcmlvMyYjMzQ7CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lICYjMzQ7cHJpbzAmIzM0OwomIzQzOyAgIH0KJiM0Mzt9CiYjNDM7RU9GCiYjNDM7CWlmIFsgJD8gLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IENvdWxkIG5vdCBsb2FkIG5ldGRldjplZ3Jlc3MgZm9yIHZldGgwIGFuZCB2ZXRoMSYjMzQ7CiYjNDM7CQlyZXR1cm4gMAomIzQzOwlmaQomIzQzOwomIzQzOwlpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgJiMzNDskMSYjMzQ7ICYjMzQ7JDImIzM0OyAmIzM0OyRwbXR1JiMzNDsgJiMzNDskcHJvdG8mIzM0OyAmIzM0OyRkc3RpcCYjMzQ7ICYjMzQ7JGRzdHBvcnQmIzM0OzsgdGhlbgomIzQzOwkJbHJldD0xCiYjNDM7CWZpCiYjNDM7CWNoZWNrX3ByaW9yaXR5ICYjMzQ7cHJpb19ub25lJiMzNDsgJiMzNDskcG10dSYjMzQ7CiYjNDM7CiYjNDM7CSMgVGhlIGZsb3cgc3RvcmVzIHRoZSBwcmlvcml0eSBzZXQgYmVmb3JlIGl0IGlzIGFkZGVkLCBzbyB0aGUgcGFja2V0cwomIzQzOwkjIHRoZSBmbG93dGFibGUgZm9yd2FyZHMgbGVhdmUgd2l0aCBpdCB0b28sIGluIGJvdGggZGlyZWN0aW9ucy4KJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWYgLSAmbHQ7Jmx0O0VPRgomIzQzO3RhYmxlIGluZXQgcHJpb3NldCB7CiYjNDM7ICAgY2hhaW4gZm9yd2FyZCB7CiYjNDM7ICAgICAgdHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IC0xOyBwb2xpY3kgYWNjZXB0CiYjNDM7ICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozCiYjNDM7ICAgfQomIzQzO30KJiM0MztFT0YKJiM0MzsJaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwICYjMzQ7JDEmIzM0OyAmIzM0OyQyJiMzNDsgJiMzNDskcG10dSYjMzQ7ICYjMzQ7JHByb3RvJiMzNDsgJiMzNDskZHN0aXAmIzM0OyAmIzM0OyRkc3Rwb3J0JiMzNDs7IHRoZW4KJiM0MzsJCWxyZXQ9MQomIzQzOwlmaQomIzQzOwljaGVja19wcmlvcml0eSAmIzM0O3ByaW9fZndkJiMzNDsgJiMzNDskcG10dSYjMzQ7CiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBkZWxldGUgdGFibGUgbmV0ZGV2IHByaW9jaGVjawomIzQzOwomIzQzOwlyZXR1cm4gJGxyZXQKJiM0Mzt9CiYjNDM7CiB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCgpCiB7CiAJbG9jYWwgbnNhPSYjMzQ7JDEmIzM0OwpAQCAtNTE2LDYgJiM0Mzs2MTYsMTEgQEAgZWxzZQogCXJldD0xCiBmaQogCiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAwIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgomIzQzOwllY2hvICYjMzQ7RkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBwcmlvcml0eSB1cGRhdGUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7CiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24mIzM5O3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kCiAjIHdpbGwgZGVwZW5kIG9uIG5zMSBiZWluZyBtYXNxdWVyYWRlZCBpbiBuc3IxLgogIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuCkBAIC01NzIsNiAmIzQzOzY3NywxMSBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X2RzY3AgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlbgogCWV4aXQgMAogZmkKIAomIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlbgomIzQzOwllY2hvICYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlIGFuZCBwbXR1IGRpc2NvdmVyeSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciAmZ3Q7L2Rldi9udWxsCiAKIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSAmIzM0OyYjMzQ7OyB0aGVuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgZm9yIGZsb3cgcHJpb3JpdHkgZm9yd2FyZGluZywgc29tZSBkcml2ZXIgY29kZSB0aGF0IHNlZW1zIHRvICpoYW5kbGUqIGBGTE9XX0FDVElPTl9QUklPUklUWWAgYnkgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZyAodGhhdCYjMzk7cyBvZGQsIHdpbGwga2VlcCBhbiBleWUgb24gdGhhdCksIGFuZCB0aGVuLCBpbXBvcnRhbnRseSwgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgYW5kIGhvdyB0aGUgcHJpb3JpdHkgZmllbGQgaXMgaGFuZGxlZC4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBuZXcgYHUzMiBwcmlvcml0eTtgIGZpZWxkIGFkZGVkIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLiBPa2F5LCBzbyB3ZSYjMzk7cmUgYWRkaW5nIHByaW9yaXR5IHRvIHRoZSBmbG93IG9mZmxvYWQgc3RydWN0dXJlLCBtYWtlcyBzZW5zZS4gVGhlbiwgSSBzZWUgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIHVzaW5nIGBmbG93LSZndDtwcmlvcml0eWAgdG8gc2V0IHRoZSBgc2tiLSZndDtwcmlvcml0eWAsIHdoaWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nIGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC4gSWYgYGZsb3ctJmd0O3ByaW9yaXR5YCBpcyBzZXQsIGEgYGZsb3dfYWN0aW9uX2VudHJ5YCBpcyBhc3NpZ25lZCwgYW5kIGl0cyBJRCBpcyBzZXQgdG8gYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCwgYW5kIHRoZSBlbnRyeSYjMzk7cyBwcmlvcml0eSBpcyBzZXQgd2l0aCB0aGUgZmxvdyYjMzk7cyBwcmlvcml0eS4gT2theSwgc2V0dGluZyBwcmlvcml0eSBhcyBhIGZsb3cgYWN0aW9uLCB0aGF04oCZcyB1c2VmdWwuCgpGaW5hbGx5LCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2UmIzM5O3JlIGNvcHlpbmcgdGhlIGBza2ItJmd0O3ByaW9yaXR5YCBpbnRvIGBmbG93LSZndDtwcmlvcml0eWAuIEludGVyZXN0aW5nLCB3ZSYjMzk7cmUgdGFraW5nIHRoZSBwYWNrZXQmIzM5O3MgcHJpb3JpdHkgdG8gcG9wdWxhdGUgdGhlIGZsb3cmIzM5O3MgcHJpb3JpdHkuLi4gd2hpY2ggaXMgdGhlbiB1c2VkIGJ5IHRoZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgY29kZS4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBpcyAqYWxsb2NhdGVkKiBhbmQgKmluaXRpYWxpemVkKi4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0aGF0IHRoZXJlIGFyZSBhIGxvdCBvZiBjb2RlIHBhdGhzIGhlcmUgdGhhdCBjYW4gYXNzaWduIHRoZSBgcHJpb3JpdHlgIGZpZWxkIG9mIHRoZSBgZmxvd2Agc3RydWN0dXJlIGFuZCB0aGVuIGNvcHkgaXQgYXJvdW5kLCBidXQgd2hhdCBhYm91dCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgZmllbGQgaXMgKmZpcnN0KiBzZXQ/IEkgbmVlZCB0byB1c2UgZ3JlcHBlciAob3IgZXF1aXZhbGVudCkgdG8gc2VhcmNoIGZvciBhbGxvY2F0aW9ucyBvZiB0aGF0IGBmbG93X29mZmxvYWRgIHN0cnVjdCwgb3IgcmVsZXZhbnQgYWxsb2MgYW5kIGluaXQgZnVuY3Rpb25zLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBmbG93X29mZmxvYWRfYWxsb2NgIG9yIHNpbWlsYXIgbmFtZXMuIEkgbmVlZCB0byBrbm93ICpleGFjdGx5KiBob3cgYW5kIHdoZXJlIHRoYXQgYHByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBpbml0aWFsbHkuIFRoYXQgd2lsbCBiZSB0aGUgZGV0ZXJtaW5pbmcgZmFjdG9yIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIElmIHRoaXMgZmllbGQgaXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseSwgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlLCBhbmQgcG9zc2libHkgZXhwbG9pdGFibGUsIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTIxOT1zdHJ1Y3QgbmZfZmxvd19yb3V0ZSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDMtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0NDpzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ1LXZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yMj1mbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTUyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1MzpzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03Ni19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODcxPXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODc4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4Nzk6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04ODAtXHRcdFx0XHQgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05ODQ9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTg5Olx0ZXJyID0gbmZfZmxvd19vZmZsb2FkX2FsbG9jKG9mZmxvYWQsIGZsb3dfcnVsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5MC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTEtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMTI6XHRmbG93ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMy1cdGlmICghZmxvdylcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MzQtXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDM1Olx0ZW50cnkgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTQzNi1cdGlmICghZW50cnkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBmbG93X29mZmxvYWRfYWxsb2NgIGltcGxlbWVudGF0aW9uLCBjb25zaWRlcmluZyBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2A6CgoqKkRpdmluZyBpbnRvIGBmbG93X29mZmxvYWRfYWxsb2NgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmxvdyBvZmZsb2FkIGFsbG9jYXRpb24gcHJvY2Vzcy4gU2luY2Ugd2UmIzM5O3JlIGluIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIGhvdyBmbG93IGVudHJpZXMgYXJlIGNyZWF0ZWQgZm9yIG9mZmxvYWRpbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJiMzOTttIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBwb3NzaWJseSBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgb3IgdGFibGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5LCBob3cgdGhlIGZsb3cgZW50cnkgaXRzZWxmIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIElzIGl0IGFsbG9jYXRpbmcgZnJvbSBhIHByZS1kZWZpbmVkIHBvb2wsIG9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGVudHJpZXM/IERvZXMgaXQgY29uc2lkZXIgdGhlIHNwZWNpZmljIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChlLmcuLCBzdXBwb3J0ZWQgcHJvdG9jb2xzLCBtYXRjaCBmaWVsZHMsIGFjdGlvbnMpPyBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBsb2NraW5nIG1lY2hhbmlzbXMgaXQgdXNlcyDigJMgaXMgaXQgZW1wbG95aW5nIFJDVSwgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIHNwaW5sb2NrIGFwcHJvYWNoPyBBbHNvLCBJIGV4cGVjdCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmbG93IHRhYmxlIHN1YnN5c3RlbSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzIG9yIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxlbWVudGF0aW9uIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgY29uc2lkZXIgd2hhdCB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0fVxuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxuICA1NDpcdHtcbiAgNTU6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gIDU2Olx0XG4gIDU3Olx0XHRpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoY3QpKSlcbiAgNTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDU5Olx0XG4gIDYwOlx0XHRmbG93ID0ga21lbV9jYWNoZV96YWxsb2MoZmxvd19vZmZsb2FkX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gIDYxOlx0XHRpZiAoIWZsb3cpXG4gIDYyOlx0XHRcdHJldHVybiBOVUxMO1xuICA2MzpcdFxuICA2NDpcdFx0cmVmY291bnRfaW5jKFx1MDAyNmN0LVx1MDAzZWN0X2dlbmVyYWwudXNlKTtcbiAgNjU6XHRcdGZsb3ctXHUwMDNlY3QgPSBjdDtcbiAgNjY6XHRcbiAgNjc6XHRcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbiAgNjg6XHRcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbiAgNjk6XHRcbiAgNzA6XHRcdGlmIChjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IElQU19TUkNfTkFUKVxuICA3MTpcdFx0XHRfX3NldF9iaXQoTkZfRkxPV19TTkFULCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAgNzI6XHRcdGlmIChjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IElQU19EU1RfTkFUKVxuICA3MzpcdFx0XHRfX3NldF9iaXQoTkZfRkxPV19ETkFULCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAgNzQ6XHRcbiAgNzU6XHRcdHJldHVybiBmbG93O1xuICA3NjpcdH1cbiAgNzc6XHRFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xuICA3ODpcdFxuICA3OTpcdHN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcbiAgODA6XHR7XG4gIDgxOlx0XHRpZiAoZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNilcbiAgODI6XHRcdFx0cmV0dXJuIHJ0Nl9nZXRfY29va2llKGRzdF9ydDZfaW5mbyhmbG93X3R1cGxlLVx1MDAzZWRzdF9jYWNoZSkpO1xuICA4MzpcdFxuICA4NDpcdFx0cmV0dXJuIDA7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpuZnRfcm91dGVfZHN0X2ZldGNoKHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiAgODg6XHRcdFx0XHRcdFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuICA4OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODExMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIFByaW9yaXR5IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBOZXRmaWx0ZXImIzM5O3MgZmxvdyBvZmZsb2FkIGhhbmRsZXMgcGFja2V0IHByaW9yaXRpZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGBwcmlvcml0eWAgZmllbGQgZ2V0cyBwb3B1bGF0ZWQgYW5kIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBgZmxvd19vZmZsb2FkX2FsbG9jYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIGFsbG9jYXRpbmcgYSBuZXcgZmxvdyBlbnRyeSwgbGV2ZXJhZ2VzIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBiZWNhdXNlIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZW50aXJlIGBmbG93YCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhlcmVmb3JlLCB0aGUgYHByaW9yaXR5YCBmaWVsZCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBgZmxvd2Agc3RydWN0dXJlIHN0YXJ0cyBhdCB6ZXJvLgoKTm93LCBsb29raW5nIGF0IGBuZnRfZmxvd19vZmZsb2FkLmNgLCBJIHNlZSBgZmxvdy0mZ3Q7cHJpb3JpdHkgPSBwa3QtJmd0O3NrYi0mZ3Q7cHJpb3JpdHk7YC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgKmludGVuZGVkKiBwcmlvcml0eSBnZXRzIGFzc2lnbmVkLiBBbmQgYHNrYi0mZ3Q7cHJpb3JpdHlgIGlzIG9uZSBvZiB0aGUgc3RhbmRhcmQgZmllbGRzIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlLgoKSG93ZXZlciwgdGhlIHBsb3QgdGhpY2tlbnMuIFdoZW4gYW5hbHl6aW5nIHRoZSBgYWN0X2N0LmNgIG1vZHVsZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgd2hlbiBgZW50cnlgIGlzIGFsbG9jYXRlZCB2aWEgYGZsb3dfb2ZmbG9hZF9hbGxvYyhjdClgLCBpdHMgYHByaW9yaXR5YCBpcyBzdGFydGluZyBhdCB6ZXJvLCBieSBkZXNpZ24uCgpHaXZlbiB0aGUgaW5pdGlhbCB6ZXJvLWFsbG9jYXRpb24sIEkmIzM5O20gbm93IGN1cmlvdXMgYWJvdXQgd2hhdCBhY3R1YWxseSBoYXBwZW5zIGlmIGBmbG93LSZndDtwcmlvcml0eWAgcmVtYWlucyB6ZXJvLiBJbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBJIHNlZSBgaWYgKGZsb3ctJmd0O3ByaW9yaXR5KSBza2ItJmd0O3ByaW9yaXR5ID0gZmxvdy0mZ3Q7cHJpb3JpdHk7YC4gTmF0dXJhbGx5LCBpZiB0aGUgcHJpb3JpdHkgaXMgemVybywgdGhhdCBlbnRpcmUgYGlmYCBzdGF0ZW1lbnQgaXMgc2tpcHBlZCwgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGhvdyBmbG93IGFjdGlvbnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIG9mIGZsb3cgZW50cmllcyBhbmQgdGhlIGFzc29jaWF0ZWQgYWN0aW9ucyBpbXBhY3QgdGhlIGBwcmlvcml0eWAgdmFsdWUuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBib3RoIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9hbGxvY2AgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBmbG93IGFjdGlvbnMgYXJlIGNvdW50ZWQgYW5kIGFsbG9jYXRlZC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHByaW9yaXR5IGlzIG1hbmFnZWQgd2l0aCBvdGhlciBwaWVjZXMgb2YgdGhlIG9mZmxvYWQgZnJhbWV3b3JrLiBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGFsbCBpbnRlZ3JhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFxuIDY5MTpcdFx0aWYgKGZsb3dfb2ZmbG9hZF9kZWNhcF90dW5uZWwoZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwIHx8XG4gNjkyOlx0XHQgICAgZmxvd19vZmZsb2FkX2VuY2FwX3R1bm5lbChmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG4gNjkzOlx0XHRcdHJldHVybiAtMTtcbiA2OTQ6XHRcbiA2OTU6XHRcdGlmIChmbG93X29mZmxvYWRfZXRoX3NyYyhuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMCB8fFxuIDY5NjpcdFx0ICAgIGZsb3dfb2ZmbG9hZF9ldGhfZHN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxuIDY5NzpcdFx0XHRyZXR1cm4gLTE7XG4gNjk4Olx0XG4gNjk5Olx0XHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSkge1xuIDcwMDpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuIDcwMTpcdFxuIDcwMjpcdFx0XHRlbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcbiA3MDM6XHRcdFx0aWYgKCFlbnRyeSlcbiA3MDQ6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNzA1Olx0XG4gNzA2Olx0XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG4gNzA3Olx0XHRcdGVudHJ5LVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbiA3MDg6XHRcdH1cbiA3MDk6XHRcbiA3MTA6XHRcdHR1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbiA3MTE6XHRcbiA3MTI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1cGxlLVx1MDAzZWVuY2FwX251bTsgaSYjNDM7JiM0MzspIHtcbiA3MTM6XHRcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbiA3MTQ6XHRcbiA3MTU6XHRcdFx0aWYgKHR1cGxlLVx1MDAzZWluX3ZsYW5faW5ncmVzcyBcdTAwMjYgQklUKGkpKVxuIDcxNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDcxNzpcdFxuIDcxODpcdFx0XHRpZiAodHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7XG4gNzE5Olx0XHRcdFx0ZW50cnkgPSBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSk7XG4gNzIwOlx0XHRcdFx0aWYgKCFlbnRyeSlcbiA3MjE6XHRcdFx0XHRcdHJldHVybiAtMTtcbiA3MjI6XHRcdFx0XHRlbnRyeS1cdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1ZMQU5fUE9QO1xuIDcyMzpcdFx0XHR9XG4gNzI0Olx0XHR9XG4gNzI1Olx0XG4gNzI2Olx0XHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuIDcyNzpcdFxuIDcyODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb3RoZXJfdHVwbGUtXHUwMDNlZW5jYXBfbnVtOyBpJiM0MzsmIzQzOykge1xuIDcyOTpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBGbG93IFJ1bGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgZmxvd19ydWxlYCBpbnN0YW5jZXMgYXJlIGJlaW5nIGFsbG9jYXRlZC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gY2FsbHMuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3Igd2hlcmUgYG5mX2Zsb3dfb2ZmbG9hZF9hbGxvY2Ag4oCTIG9yIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiDigJMgaXMgYmVpbmcgdXNlZC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5LCBvciBhdCBsZWFzdCBhIG1ham9yIGNvbnRyaWJ1dG9yLiBXaGVyZSBhcmUgd2UgZ2V0dGluZyB0aGVzZSBgZmxvd19ydWxlYCBzdHJ1Y3R1cmVzIGZyb20/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VlIHdoYXQgdGhlIGFsbG9jYXRpb24gbGFuZHNjYXBlIGxvb2tzIGxpa2UgZm9yIHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjgyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NjgzOm5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODQtXHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NzU0PWludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3NTg6XHRpZiAobmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzU5LVx0XHRyZXR1cm4gLTE7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03ODM9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4Ni17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4NzpcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODgtXHRcdHJldHVybiAtMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmxvdyBydWxlIGFjdGlvbiBlbnRyaWVzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGNvdW50aW5nIGFuZCBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoZSBgbmZfZmxvd19vZmZsb2FkX2FsbG9jYCBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCBhbmQgZm9jdXMgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGltZSB0byBzZWUgaG93IHRoaXMgY3J1Y2lhbCBhbGxvY2F0aW9uIGhhcHBlbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODc1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBGTE9XX09GRkxPQURfRElSX01BWDsgaSYjNDM7JiM0MzspXG4gODc2Olx0XHRcdF9fbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koZmxvd19ydWxlW2ldKTtcbiA4Nzc6XHR9XG4gODc4Olx0XG4gODc5Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuIDg4MDpcdFx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxuIDg4MTpcdHtcbiA4ODI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xuIDg4MzpcdFxuIDg4NDpcdFx0Zmxvd19ydWxlWzBdID0gbmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2MobmV0LCBvZmZsb2FkLFxuIDg4NTpcdFx0XHRcdFx0XHRcdCAgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4gODg2Olx0XHRpZiAoIWZsb3dfcnVsZVswXSlcbiA4ODc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODg4Olx0XG4gODg5Olx0XHRmbG93X3J1bGVbMV0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXG4gODkwOlx0XHRcdFx0XHRcdFx0ICBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbiA4OTE6XHRcdGlmICghZmxvd19ydWxlWzFdKSB7XG4gODkyOlx0XHRcdF9fbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koZmxvd19ydWxlWzBdKTtcbiA4OTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODk0Olx0XHR9XG4gODk1Olx0XG4gODk2Olx0XHRyZXR1cm4gMDtcbiA4OTc6XHR9XG4gODk4Olx0XG4gODk5Olx0c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2luaXQoc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93LFxuIDkwMDpcdFx0XHRcdFx0IF9fYmUxNiBwcm90bywgaW50IHByaW9yaXR5LFxuIDkwMTpcdFx0XHRcdFx0IGVudW0gZmxvd19jbHNfY29tbWFuZCBjbWQsXG4gOTAyOlx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4gOTAzOlx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDkwNDpcdHtcbiA5MDU6XHRcdGNsc19mbG93LVx1MDAzZWNvbW1vbi5wcm90b2NvbCA9IHByb3RvO1xuIDkwNjpcdFx0Y2xzX2Zsb3ctXHUwMDNlY29tbW9uLnByaW8gPSBwcmlvcml0eTtcbiA5MDc6XHRcdGNsc19mbG93LVx1MDAzZWNvbW1vbi5leHRhY2sgPSBleHRhY2s7XG4gOTA4Olx0XHRjbHNfZmxvdy1cdTAwM2Vjb21tYW5kID0gY21kO1xuIDkwOTpcdFx0Y2xzX2Zsb3ctXHUwMDNlY29va2llID0gKHVuc2lnbmVkIGxvbmcpdHVwbGU7XG4gOTEwOlx0fVxuIDkxMTpcdFxuIDkxMjpcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX3R1cGxlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiA5MTM6XHRcdFx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIDkxNDpcdFx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSxcbiA5MTU6XHRcdFx0XHRcdCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuIDkxNjpcdFx0XHRcdFx0IGludCBwcmlvcml0eSwgaW50IGNtZCxcbiA5MTc6XHRcdFx0XHRcdCBzdHJ1Y3QgZmxvd19zdGF0cyAqc3RhdHMsXG4gOTE4Olx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tfY2JfbGlzdClcbiA5MTk6XHR7XG4gOTIwOlx0XHRzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCBjbHNfZmxvdyA9IHt9O1xuIDkyMTpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiA5MjI6XHRcdHN0cnVjdCBmbG93X2Jsb2NrX2NiICpibG9ja19jYjtcbiA5MjM6XHRcdF9fYmUxNiBwcm90byA9IEVUSF9QX0FMTDtcbiA5MjQ6XHRcdGludCBlcnIsIGkgPSAwO1xuIDkyNTpcdFxuIDkyNjpcdFx0bmZfZmxvd19vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX2Zsb3csIHByb3RvLCBwcmlvcml0eSwgY21kLFxuIDkyNzpcdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZSwgXHUwMDI2ZXh0YWNrKTtcbiA5Mjg6XHRcdGlmIChjbWQgPT0gRkxPV19DTFNfUkVQTEFDRSlcbiA5Mjk6XHRcdFx0Y2xzX2Zsb3cucnVsZSA9IGZsb3dfcnVsZS1cdTAwM2VydWxlO1xuIDkzMDpcdFxuIDkzMTpcdFx0ZG93bl9yZWFkKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuIDkzMjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19jYiwgYmxvY2tfY2JfbGlzdCwgbGlzdCkge1xuIDkzMzpcdFx0XHRlcnIgPSBibG9ja19jYi1cdTAwM2VjYihUQ19TRVRVUF9DTFNGTE9XRVIsIFx1MDAyNmNsc19mbG93LFxuIDkzNDpcdFx0XHRcdFx0ICAgYmxvY2tfY2ItXHUwMDNlY2JfcHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjU1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgYm91bmNlciwgaWYgeW91IHdpbGwsIGZvciBuZXcgb2ZmbG9hZCBydWxlcyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBzdWJzeXN0ZW0uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW4gYXV0b21hdGljYWxseTogd2hhdCBkb2VzIGl0ICpkbyosIHdoYXQgYXJlIHRoZSAqaW5wdXRzKiwgd2hhdCBhcmUgdGhlICpvdXRwdXRzKiwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsICpmYWlsdXJlIHBvaW50cyogYW5kIHJlc291cmNlIGNvbnRlbnRpb24gaXNzdWVzPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBudWFuY2VzIGFyb3VuZCBhbGxvY2F0aW9uLiBNZW1vcnkgYWxsb2NhdGlvbiwgb2J2aW91c2x5LCBidXQgYWxzbyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIHJ1bGUgZGF0YWJhc2UgYW5kIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIElzIGl0IHByb3Blcmx5IGxvY2tlZD8gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGR1cmluZyBoaWdoLXJhdGUgcnVsZSBpbnNlcnRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBlbnN1cmluZyB0aGF0IGEgbmV3IGZsb3cgb2ZmbG9hZCBydWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBoYW5kbGluZyBhIHJ1bGUgc3RydWN0dXJlLCBwb3B1bGF0aW5nIGZpZWxkcyBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzLCBtYW5hZ2luZyByZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFzaCB0YWJsZSBvciBvdGhlciBpbmRleGluZyBtZWNoYW5pc21zIHVzZWQgdG8gb3B0aW1pemUgcnVsZSBsb29rdXAuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgZXJyb3JzLCB0b28uIEhvdyBhcmUgYWxsb2NhdGlvbiBmYWlsdXJlcyBkZWFsdCB3aXRoPyBXaGF0IGFib3V0IGludmFsaWQgaW5wdXRzIG9yIGNvbmZsaWN0aW5nIHJ1bGUgcGFyYW1ldGVycz8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgY29ybmVyIGNhc2VzIGluIHRoZSBlcnJvciBoYW5kbGluZyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMgc28gSSBjYW4gZGV0ZXJtaW5lIGhvdyB3ZWxsIHRoaXMgZnVuY3Rpb24gaXMgcGVyZm9ybWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTgwOD1zdGF0aWMgc3RydWN0IG5mX2Zsb3dfcnVsZSAqXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgwOTpuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgxMC1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04Nzk9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODgzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4ODQ6XHRmbG93X3J1bGVbMF0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg4NS1cdFx0XHRcdFx0XHQgIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODg4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4ODk6XHRmbG93X3J1bGVbMV0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg5MC1cdFx0XHRcdFx0XHQgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAwMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIFRoZSBuYW1lIGl0c2VsZiwgYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCwgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIG9mIGEgc3RydWN0dXJlIHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkaW5nLCBsaWtlbHkgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGEgZGF0YSBzdHJ1Y3R1cmUg4oCTIHByb2JhYmx5IHNvbWUgc29ydCBvZiBydWxlIG9yIGRlc2NyaXB0b3Ig4oCTIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlcHJlc2VudCBhIHBhcnRpY3VsYXIgZmxvdyBmb3IgaGFyZHdhcmUgb2ZmbG9hZC4gV2XigJlyZSBub3QgdGFsa2luZyBhYm91dCBqdXN0IGFueSBkYXRhIHN0cnVjdHVyZSwgYnV0IG9uZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIHB1c2hpbmcgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGRvd24gdG8gdGhlIE5JQy4gVGhhdCYjMzk7cyB0aGUga2V5LiBXaGF0IGlzIGl0cyBkZXNpZ24/IFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHMgaXQgbmVlZHMgdG8gaG9sZD8KSSB3YW50IHRvIGtub3cgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIE5ldGZpbHRlciBvZmZsb2FkIGZyYW1ld29yay4gSG93IGRvZXMgdGhpcyBhbGxvY2F0aW9uIGhhcHBlbiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlPyBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdyYjMzk7cyBpdCBtYW5hZ2VkIGZvciBjb25jdXJyZW5jeT8gV2hhdCBtZW1vcnkgcG9vbCBvciBhbGxvY2F0b3IgaXMgYmVpbmcgdXNlZD8gQW5kIHdoYXQmIzM5O3MgZ29pbmcgdG8gYmUgdGhlIGV2ZW50dWFsIHJlbGVhc2UgZnVuY3Rpb24sIGl0JiMzOTtzIHR3aW4sIGFuZCB3aGF0IGFyZSB0aGUgaW1wb3J0YW50IGVsZW1lbnRzIG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGNhbGxlZD8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGFsc28gaW1wb3J0YW50LiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHRoaXMgYWxsb2NhdGlvbiB0byBmYWlsLCBhbmQgaG93IGFyZSB0aG9zZSBmYWlsdXJlcyBoYW5kbGVkPyBUaGUgdXN1YWwgc3R1ZmYuClRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGVzaWduIGlzc3VlcyBlbWVyZ2Ug4oCTIGhvdyBlZmZpY2llbnQgaXMgdGhpcyBwcm9jZXNzLCBhbmQgaG93IG11Y2ggb3ZlcmhlYWQgZG9lcyB0aGUgYWxsb2NhdGlvbiBhZGQgdG8gdGhlIG92ZXJhbGwgb2ZmbG9hZCBwYXRoPyBJcyB0aGlzIGRvbmUgYXQgZmxvdyBjcmVhdGlvbiBvciBkdXJpbmcgdGhlIGRhdGEgcGF0aD8gTGV0JiMzOTtzIGdldCBpbnRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwODpcdHN0YXRpYyBzdHJ1Y3QgbmZfZmxvd19ydWxlICpcbiA4MDk6XHRuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4gODEwOlx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuIDgxMTpcdFx0XHRcdCAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4gODEyOlx0e1xuIDgxMzpcdFx0Y29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlID0gb2ZmbG9hZC1cdTAwM2VmbG93dGFibGU7XG4gODE0Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwgKm90aGVyX3R1cGxlO1xuIDgxNTpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyA9IG9mZmxvYWQtXHUwMDNlZmxvdztcbiA4MTY6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdCA9IE5VTEw7XG4gODE3Olx0XHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGU7XG4gODE4Olx0XHRpbnQgZXJyID0gLUVOT01FTTtcbiA4MTk6XHRcbiA4MjA6XHRcdGZsb3dfcnVsZSA9IGt6YWxsb2Nfb2JqKCpmbG93X3J1bGUpO1xuIDgyMTpcdFx0aWYgKCFmbG93X3J1bGUpXG4gODIyOlx0XHRcdGdvdG8gZXJyX2Zsb3c7XG4gODIzOlx0XG4gODI0Olx0XHRmbG93X3J1bGUtXHUwMDNlcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhORl9GTE9XX1JVTEVfQUNUSU9OX01BWCk7XG4gODI1Olx0XHRpZiAoIWZsb3dfcnVsZS1cdTAwM2VydWxlKVxuIDgyNjpcdFx0XHRnb3RvIGVycl9mbG93X3J1bGU7XG4gODI3Olx0XG4gODI4Olx0XHRmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VtYXRjaC5kaXNzZWN0b3IgPSBcdTAwMjZmbG93X3J1bGUtXHUwMDNlbWF0Y2guZGlzc2VjdG9yO1xuIDgyOTpcdFx0Zmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlbWF0Y2gubWFzayA9IFx1MDAyNmZsb3dfcnVsZS1cdTAwM2VtYXRjaC5tYXNrO1xuIDgzMDpcdFx0Zmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlbWF0Y2gua2V5ID0gXHUwMDI2Zmxvd19ydWxlLVx1MDAzZW1hdGNoLmtleTtcbiA4MzE6XHRcbiA4MzI6XHRcdHR1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbiA4MzM6XHRcdG90aGVyX3R1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XG4gODM0Olx0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNleG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIKVxuIDgzNTpcdFx0XHRvdGhlcl9kc3QgPSBvdGhlcl90dXBsZS1cdTAwM2Vkc3RfY2FjaGU7XG4gODM2Olx0XG4gODM3Olx0XHRlcnIgPSBuZl9mbG93X3J1bGVfbWF0Y2goXHUwMDI2Zmxvd19ydWxlLVx1MDAzZW1hdGNoLCB0dXBsZSwgb3RoZXJfZHN0KTtcbiA4Mzg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gODM5Olx0XHRcdGdvdG8gZXJyX2Zsb3dfbWF0Y2g7XG4gODQwOlx0XG4gODQxOlx0XHRmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VhY3Rpb24ubnVtX2VudHJpZXMgPSAwO1xuIDg0MjpcdFx0aWYgKGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWFjdGlvbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbiA4NDM6XHRcdFx0Z290byBlcnJfZmxvd19tYXRjaDtcbiA4NDQ6XHRcbiA4NDU6XHRcdHJldHVybiBmbG93X3J1bGU7XG4gODQ2Olx0XG4gODQ3Olx0ZXJyX2Zsb3dfbWF0Y2g6XG4gODQ4Olx0XHRrZnJlZShmbG93X3J1bGUtXHUwMDNlcnVsZSk7XG4gODQ5Olx0ZXJyX2Zsb3dfcnVsZTpcbiA4NTA6XHRcdGtmcmVlKGZsb3dfcnVsZSk7XG4gODUxOlx0ZXJyX2Zsb3c6XG4gODUyOlx0XHRyZXR1cm4gTlVMTDtcbiA4NTM6XHR9XG4gODU0Olx0XG4gODU1Olx0c3RhdGljIHZvaWQgX19uZl9mbG93X29mZmxvYWRfZGVzdHJveShzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4gODU2Olx0e1xuIDg1NzpcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbiA4NTg6XHRcdGludCBpO1xuIDg1OTpcdFxuIDg2MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDg2MTpcdFx0XHRlbnRyeSA9IFx1MDAyNmZsb3dfcnVsZS1cdTAwM2VydWxlLVx1MDAzZWFjdGlvbi5lbnRyaWVzW2ldO1xuIDg2MjpcdFx0XHRpZiAoZW50cnktXHUwMDNlaWQgIT0gRkxPV19BQ1RJT05fUkVESVJFQ1QpXG4gODYzOlx0XHRcdFx0Y29udGludWU7XG4gODY0Olx0XG4gODY1Olx0XHRcdGRldl9wdXQoZW50cnktXHUwMDNlZGV2KTtcbiA4NjY6XHRcdH1cbiA4Njc6XHRcdGtmcmVlKGZsb3dfcnVsZS1cdTAwM2VydWxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBGbG93IFRhYmxlIEFsbG9jYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZsb3cgcnVsZSBhbGxvY2F0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZsb3dfcnVsZV9hbGxvY2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBsaW5jaHBpbiBmb3IgYWxsb2NhdGluZyBuZXcgZmxvdyBydWxlcywgc28gdW5kZXJzdGFuZGluZyBpdHMgbnVhbmNlcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2NhbGFiaWxpdHkuIEkgYWxzbyB3YW50IHRvIHZlcmlmeSB0aGUgdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBhY3Rpb25zIHdlIHN1cHBvcnQgcGVyIGZsb3cgcnVsZS4gTGV0IG1lIGxvb2sgdXAgYE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFjdGlvbiBsaW1pdC4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhlIHBsYWNlbWVudCBvZiBgZmxvd19hY3Rpb25fZW50cnlfbmV4dGAgd2l0aGluIHRoZSBzdHJ1Y3R1cmUsIGhvdyBkb2VzIHRoZSBsaW5rZWQgbGlzdCBvZiBhY3Rpb25zIGJlaGF2ZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRkxPV19SVUxFX0FDVElPTl9NQVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTg6I2RlZmluZSBORl9GTE9XX1JVTEVfQUNUSU9OX01BWFx0MjRcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0yMjA9Zmxvd19hY3Rpb25fZW50cnlfbmV4dChzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMjMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIyNDpcdGlmICh1bmxpa2VseShmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VhY3Rpb24ubnVtX2VudHJpZXMgXHUwMDNlPSBORl9GTE9XX1JVTEVfQUNUSU9OX01BWCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIyNS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDk9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODIzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4MjQ6XHRmbG93X3J1bGUtXHUwMDNlcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhORl9GTE9XX1JVTEVfQUNUSU9OX01BWCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgyNS1cdGlmICghZmxvd19ydWxlLVx1MDAzZXJ1bGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTU4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBvZiBGbG93IFJ1bGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmbG93IHJ1bGVzIGFyZSBiZWluZyBicm91Z2h0IHRvIGxpZmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBmbG93X3J1bGVfYWxsb2NgLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgYmlydGhwbGFjZSBvZiB0aGVzZSBlbnRyaWVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCByaWdodCBvZmYgdGhlIGJhdC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhbmQgb3B0aW1pemF0aW9uIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgc28gbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxvd19ydWxlX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jPTcwOT1zdGF0aWMgaW50IG5mcF9mbF9tZXJnZV9hY3Rpb25zX29mZmxvYWQoc3RydWN0IGZsb3dfcnVsZSAqKnJ1bGVzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jLTcyNi1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6NzI3Olx0YV9ydWxlID0gZmxvd19ydWxlX2FsbG9jKG51bV9hY3Rpb25zICYjNDM7IChudW1fcnVsZXMgLyAyKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy03MjgtXHRpZiAoIWFfcnVsZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYz0xNDc5PW5mcF9mbF9jdF9mbG93X2VudHJ5ICpuZnBfZmxfY3RfYWRkX2Zsb3coc3RydWN0IG5mcF9mbF9jdF96b25lX2VudHJ5ICp6dCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6MTQ5NDpcdGVudHJ5LVx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoZmxvdy1cdTAwM2VydWxlLVx1MDAzZWFjdGlvbi5udW1fZW50cmllcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDk1LVx0aWYgKCFlbnRyeS1cdTAwM2VydWxlKSB7XG4tLVxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9NDQxPXN0cnVjdCBmbG93X3J1bGUge1xuLS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTQ0NS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjQ0NjpzdHJ1Y3QgZmxvd19ydWxlICpmbG93X3J1bGVfYWxsb2ModW5zaWduZWQgaW50IG51bV9hY3Rpb25zKTtcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTQ0Ny1cbi0tXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYy05LVxubmV0L2NvcmUvZmxvd19vZmZsb2FkLmM6MTA6c3RydWN0IGZsb3dfcnVsZSAqZmxvd19ydWxlX2FsbG9jKHVuc2lnbmVkIGludCBudW1fYWN0aW9ucylcbm5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jLTExLXtcbi0tXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYy0yNy19XG5uZXQvY29yZS9mbG93X29mZmxvYWQuYzoyODpFWFBPUlRfU1lNQk9MKGZsb3dfcnVsZV9hbGxvYyk7XG5uZXQvY29yZS9mbG93X29mZmxvYWQuYy0yOS1cbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM3MTc9ZXRodG9vbF9yeF9mbG93X3J1bGVfY3JlYXRlKGNvbnN0IHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlY19pbnB1dCAqaW5wdXQpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNzI5LVx0LyogZXRodG9vbF9yeCBzdXBwb3J0cyBvbmx5IG9uZSBzaW5nbGUgYWN0aW9uIHBlciBydWxlLiAqL1xubmV0L2V0aHRvb2wvaW9jdGwuYzozNzMwOlx0Zmxvdy1cdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKDEpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0zNzMxLVx0aWYgKCFmbG93LVx1MDAzZXJ1bGUpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTgwOT1uZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MjMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgyNDpcdGZsb3dfcnVsZS1cdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODI1LVx0aWYgKCFmbG93X3J1bGUtXHUwMDNlcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoxMDpzdGF0aWMgc3RydWN0IG5mdF9mbG93X3J1bGUgKm5mdF9mbG93X3J1bGVfYWxsb2MoaW50IG51bV9hY3Rpb25zKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTExLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MTg6XHRmbG93LVx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MobnVtX2FjdGlvbnMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTE5LVx0aWYgKCFmbG93LVx1MDAzZXJ1bGUpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9ODg9c3RydWN0IG5mdF9mbG93X3J1bGUgKm5mdF9mbG93X3J1bGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTA3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjEwODpcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2FsbG9jKG51bV9hY3Rpb25zKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xMDktXHRpZiAoIWZsb3cpXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz00NTk9c3RhdGljIGludCBmbF9od19yZXBsYWNlX2ZpbHRlcihzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTQ2Ny1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6NDY4Olx0Y2xzX2Zsb3dlci5ydWxlID0gZmxvd19ydWxlX2FsbG9jKHRjZl9leHRzX251bV9hY3Rpb25zKFx1MDAyNmYtXHUwMDNlZXh0cykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy00NjktXHRpZiAoIWNsc19mbG93ZXIucnVsZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI2Nzc9c3RhdGljIGludCBmbF9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjY5Mi1cdFx0Y2xzX2Zsb3dlci5ydWxlID1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjY5MzpcdFx0XHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXHUwMDI2Zi1cdTAwM2VleHRzKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI2OTQtXHRcdGlmICghY2xzX2Zsb3dlci5ydWxlKSB7XG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yNzYzPXN0YXRpYyBpbnQgZmxfaHdfY3JlYXRlX3RtcGx0KHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjc2OC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mjc2OTpcdGNsc19mbG93ZXIucnVsZSA9IGZsb3dfcnVsZV9hbGxvYygwKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjc3MC1cdGlmICghY2xzX2Zsb3dlci5ydWxlKVxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9Mjg1Nz1zdGF0aWMgdm9pZCBmbF90bXBsdF9yZW9mZmxvYWQoc3RydWN0IHRjZl9jaGFpbiAqY2hhaW4sIGJvb2wgYWRkLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjg2Mi1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mjg2MzpcdGNsc19mbG93ZXIucnVsZSA9IGZsb3dfcnVsZV9hbGxvYygwKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjg2NC1cdGlmICghY2xzX2Zsb3dlci5ydWxlKVxuLS1cbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYz04ND1zdGF0aWMgaW50IG1hbGxfcmVwbGFjZV9od19maWx0ZXIoc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTkzLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjk0Olx0Y2xzX21hbGwucnVsZSA9XHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXHUwMDI2aGVhZC1cdTAwM2VleHRzKSk7XG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtOTUtXHRpZiAoIWNsc19tYWxsLnJ1bGUpXG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTI3NT1zdGF0aWMgaW50IG1hbGxfcmVvZmZsb2FkKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBib29sIGFkZCwgZmxvd19zZXR1cF9jYl90ICpjYixcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjg1LVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjI4NjpcdGNsc19tYWxsLnJ1bGUgPVx0Zmxvd19ydWxlX2FsbG9jKHRjZl9leHRzX251bV9hY3Rpb25zKFx1MDAyNmhlYWQtXHUwMDNlZXh0cykpO1xubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTI4Ny1cdGlmICghY2xzX21hbGwucnVsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRmxvdyBPZmZsb2FkKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGZsb3cgb2ZmbG9hZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jYC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgd2hlcmUgdGhlIHByaW1hcnkgbG9naWMgZm9yIG9mZmxvYWRpbmcgbmV0d29yayBmbG93cyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgYWN0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb25jZSBhIGZsb3cgZW50cnkgbWF0Y2hlcywgc28gSSBzaG91bGQgbG9vayBhdCBgZmxvd19hY3Rpb25fZW50cnlfbmV4dGAuIFRoYXQgZnVuY3Rpb24gbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdHJhY2luZyB0aGUgb2ZmbG9hZCBwcm9jZXNzLiBUaGVzZSB0d28gcG9pbnRzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmxvd19vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2FjdF9hcGkuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY25ldC9mbG93X29mZmxvYWQuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdHN0cnVjdCBmbG93X3J1bGUgKmZsb3dfcnVsZV9hbGxvYyh1bnNpZ25lZCBpbnQgbnVtX2FjdGlvbnMpXG4gIDExOlx0e1xuICAxMjpcdFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZTtcbiAgMTM6XHRcdGludCBpO1xuICAxNDpcdFxuICAxNTpcdFx0cnVsZSA9IGt6YWxsb2NfZmxleCgqcnVsZSwgYWN0aW9uLmVudHJpZXMsIG51bV9hY3Rpb25zKTtcbiAgMTY6XHRcdGlmICghcnVsZSlcbiAgMTc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDE4Olx0XG4gIDE5Olx0XHRydWxlLVx1MDAzZWFjdGlvbi5udW1fZW50cmllcyA9IG51bV9hY3Rpb25zO1xuICAyMDpcdFx0LyogUHJlLWZpbGwgZWFjaCBhY3Rpb24gaHdfc3RhdHMgd2l0aCBET05UX0NBUkUuXG4gIDIxOlx0XHQgKiBDYWxsZXIgY2FuIG92ZXJyaWRlIHRoaXMgaWYgaXQgd2FudHMgc3RhdHMgZm9yIGEgZ2l2ZW4gYWN0aW9uLlxuICAyMjpcdFx0ICovXG4gIDIzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYWN0aW9uczsgaSYjNDM7JiM0MzspXG4gIDI0Olx0XHRcdHJ1bGUtXHUwMDNlYWN0aW9uLmVudHJpZXNbaV0uaHdfc3RhdHMgPSBGTE9XX0FDVElPTl9IV19TVEFUU19ET05UX0NBUkU7XG4gIDI1Olx0XG4gIDI2Olx0XHRyZXR1cm4gcnVsZTtcbiAgMjc6XHR9XG4gIDI4Olx0RVhQT1JUX1NZTUJPTChmbG93X3J1bGVfYWxsb2MpO1xuICAyOTpcdFxuICAzMDpcdHN0cnVjdCBmbG93X29mZmxvYWRfYWN0aW9uICpvZmZsb2FkX2FjdGlvbl9hbGxvYyh1bnNpZ25lZCBpbnQgbnVtX2FjdGlvbnMpXG4gIDMxOlx0e1xuICAzMjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF9hY3Rpb24gKmZsX2FjdGlvbjtcbiAgMzM6XHRcdGludCBpO1xuICAzNDpcdFxuICAzNTpcdFx0ZmxfYWN0aW9uID0ga3phbGxvY19mbGV4KCpmbF9hY3Rpb24sIGFjdGlvbi5lbnRyaWVzLCBudW1fYWN0aW9ucyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfZmxvd190YWJsZV9vZmZsb2FkLmMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHdpdGhpbiBgZmxvd19hY3Rpb25fZW50cnlfbmV4dGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGhvdyB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IG9mZmxvYWRlZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSAmIzM0O25leHQmIzM0OyBzdGF0ZSBvciBhY3Rpb24gZm9yIGEgZ2l2ZW4gZmxvdyBlbnRyeS4gSXMgaXQgYSBzdGF0ZSBtYWNoaW5lPyBEb2VzIGl0IGRldGVybWluZSB3aGVyZSB0aGUgcGFja2V0IHNob3VsZCBiZSBzZW50IG5leHQsIHBlcmhhcHMgYmFzZWQgb24gb2ZmbG9hZCBjYXBhYmlsaXRpZXMgb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSBncmVwcGluZyBmb3IgY2FsbHMgdG8gYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgIHRvIGdldCBhbiBpZGVhIG9mIHdoZXJlIGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBzdXJyb3VuZHMgaXQuIFRoZW4sIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGZsb3cgY29udHJvbCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgZmxvdyBzdGF0ZSBpcyBhY3R1YWxseSBtYW5hZ2VkIHdpdGhpbiB0aGUgb2ZmbG9hZCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgb2ZmbG9hZCBtZWNoYW5pc20sIGVzcGVjaWFsbHkgaW4gdGVybXMgb2YgaGFyZHdhcmUgb2ZmbG9hZCB2ZXJzdXMgc29mdHdhcmUgZmFsbGJhY2sgc2NlbmFyaW9zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgJiMzNDtuZXh0JiMzNDsgYWN0aW9uIGlzIGNvbW11bmljYXRlZCB0byB0aGUgaGFyZHdhcmUgYW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBpcyB1bmFibGUgdG8gcGVyZm9ybSB0aGF0IGFjdGlvbiBmb3Igc29tZSByZWFzb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZWl0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFx0bWVtY3B5KFx1MDAyNmVudHJ5LVx1MDAzZW1hbmdsZS5tYXNrLCBtYXNrLCBzaXplb2YodTMyKSk7XG4gMjE2Olx0XHRtZW1jcHkoXHUwMDI2ZW50cnktXHUwMDNlbWFuZ2xlLnZhbCwgdmFsdWUsIHNpemVvZih1MzIpKTtcbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKlxuIDIyMDpcdGZsb3dfYWN0aW9uX2VudHJ5X25leHQoc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuIDIyMTpcdHtcbiAyMjI6XHRcdGludCBpO1xuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKHVubGlrZWx5KGZsb3dfcnVsZS1cdTAwM2VydWxlLVx1MDAzZWFjdGlvbi5udW1fZW50cmllcyBcdTAwM2U9IE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYKSlcbiAyMjU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjI2Olx0XG4gMjI3Olx0XHRpID0gZmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzJiM0MzsmIzQzOztcbiAyMjg6XHRcbiAyMjk6XHRcdHJldHVybiBcdTAwMjZmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VhY3Rpb24uZW50cmllc1tpXTtcbiAyMzA6XHR9XG4gMjMxOlx0XG4gMjMyOlx0c3RhdGljIGludCBmbG93X29mZmxvYWRfZXRoX3NyYyhzdHJ1Y3QgbmV0ICpuZXQsXG4gMjMzOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIDIzNDpcdFx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbiAyMzU6XHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbiAyMzY6XHR7XG4gMjM3Olx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5MCA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcbiAyMzg6XHRcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xuIDIzOTpcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGUsICp0aGlzX3R1cGxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIEZsb3cgQWN0aW9uIEVudHJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBvbiB0aGUgc2FtZSBwYWdlIHJlZ2FyZGluZyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBoZXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5YC4gSSBuZWVkIHRvIHJldmlldyBhbGwgb2YgaXRzIG1lbWJlcnMsIGVuc3VyZSB0aGF0IEkgaGF2ZSB0aGUgY29ycmVjdCB1bmRlcnN0YW5kaW5nIG9mIGVhY2ggZmllbGQgYW5kIHRoYXQgSSBoYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBkYXRhIHN0cnVjdHVyZSBjb3JyZWN0bHkgdW5kZXJzdG9vZC4gVGhpcyBzdHJ1Y3QgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB0aGUgd2F5IHRoaXMgd2hvbGUgc3lzdGVtIG9wZXJhdGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0IGNvbXBsZXRlbHkgaXMgbm90IG9wdGlvbmFsLiBJdCBtaWdodCBzZWVtIGxpa2UgYSBzaW1wbGUgc3RlcCwgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgdGhhdCBhIHNvbGlkIGZvdW5kYXRpb24gaGVyZSBzYXZlcyBob3VycyBvZiBkZWJ1Z2dpbmcgbGF0ZXIgb24uIFNvLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGVmaW5pdGlvbiBhbmQgZ2V0IHN0YXJ0ZWQgZnJvbSBhIHNvbGlkIHBvc2l0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oPTIzND1zdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlIHtcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yNDgtXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaDoyNDk6c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5IHtcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTI1MC1cdGVudW0gZmxvd19hY3Rpb25faWRcdFx0aWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBGbG93IE9mZmxvYWQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBvZmZsb2FkIHNpdHVhdGlvbiBiZXR0ZXIsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBpbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaGAsIGFuZCBJIGZpZ3VyZSBsaW5lIDI0OSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGxpZSB0aGVyZS4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaG9sZHMgc29tZSBrZXkgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhpcyBtb2R1bGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgYXdhaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0XHR1MzIgZXh0dmFsO1xuIDI0NjpcdFx0fSBleGNlZWQsIG5vdGV4Y2VlZDtcbiAyNDc6XHR9O1xuIDI0ODpcdFxuIDI0OTpcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSB7XG4gMjUwOlx0XHRlbnVtIGZsb3dfYWN0aW9uX2lkXHRcdGlkO1xuIDI1MTpcdFx0dTMyXHRcdFx0XHRod19pbmRleDtcbiAyNTI6XHRcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb29raWU7XG4gMjUzOlx0XHR1NjRcdFx0XHRcdG1pc3NfY29va2llO1xuIDI1NDpcdFx0ZW51bSBmbG93X2FjdGlvbl9od19zdGF0c1x0aHdfc3RhdHM7XG4gMjU1Olx0XHRhY3Rpb25fZGVzdHJcdFx0XHRkZXN0cnVjdG9yO1xuIDI1NjpcdFx0dm9pZFx0XHRcdFx0KmRlc3RydWN0b3JfcHJpdjtcbiAyNTc6XHRcdHVuaW9uIHtcbiAyNTg6XHRcdFx0dTMyXHRcdFx0Y2hhaW5faW5kZXg7XHQvKiBGTE9XX0FDVElPTl9HT1RPICovXG4gMjU5Olx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlXHQqZGV2O1x0XHQvKiBGTE9XX0FDVElPTl9SRURJUkVDVCAqL1xuIDI2MDpcdFx0XHRzdHJ1Y3Qge1x0XHRcdFx0LyogRkxPV19BQ1RJT05fVkxBTiAqL1xuIDI2MTpcdFx0XHRcdHUxNlx0XHR2aWQ7XG4gMjYyOlx0XHRcdFx0X19iZTE2XHRcdHByb3RvO1xuIDI2MzpcdFx0XHRcdHU4XHRcdHByaW87XG4gMjY0Olx0XHRcdH0gdmxhbjtcbiAyNjU6XHRcdFx0c3RydWN0IHtcdFx0XHRcdC8qIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSF9FVEggKi9cbiAyNjY6XHRcdFx0XHR1bnNpZ25lZCBjaGFyIGRzdFtFVEhfQUxFTl07XG4gMjY3Olx0XHRcdFx0dW5zaWduZWQgY2hhciBzcmNbRVRIX0FMRU5dO1xuIDI2ODpcdFx0XHR9IHZsYW5fcHVzaF9ldGg7XG4gMjY5Olx0XHRcdHN0cnVjdCB7XHRcdFx0XHQvKiBGTE9XX0FDVElPTl9NQU5HTEUgKi9cbiAyNzA6XHRcdFx0XHRcdFx0XHRcdC8qIEZMT1dfQUNUSU9OX0FERCAqL1xuIDI3MTpcdFx0XHRcdGVudW0gZmxvd19hY3Rpb25fbWFuZ2xlX2Jhc2UgaHR5cGU7XG4gMjcyOlx0XHRcdFx0dTMyXHRcdG9mZnNldDtcbiAyNzM6XHRcdFx0XHR1MzJcdFx0bWFzaztcbiAyNzQ6XHRcdFx0XHR1MzJcdFx0dmFsO1xuIDI3NTpcdFx0XHR9IG1hbmdsZTtcbiAyNzY6XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvXHQqdHVubmVsO1x0LyogRkxPV19BQ1RJT05fVFVOTkVMX0VOQ0FQICovXG4gMjc3Olx0XHRcdHUzMlx0XHRcdGNzdW1fZmxhZ3M7XHQvKiBGTE9XX0FDVElPTl9DU1VNICovXG4gMjc4Olx0XHRcdHUzMlx0XHRcdG1hcms7XHRcdC8qIEZMT1dfQUNUSU9OX01BUksgKi9cbiAyNzk6XHRcdFx0dTE2ICAgICAgICAgICAgICAgICAgICAgcHR5cGU7ICAgICAgICAgIC8qIEZMT1dfQUNUSU9OX1BUWVBFICovXG4gMjgwOlx0XHRcdHUxNlx0XHRcdHJ4X3F1ZXVlO1x0LyogRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyAqL1xuIDI4MTpcdFx0XHR1MzJcdFx0XHRwcmlvcml0eTtcdC8qIEZMT1dfQUNUSU9OX1BSSU9SSVRZICovXG4gMjgyOlx0XHRcdHN0cnVjdCB7XHRcdFx0XHQvKiBGTE9XX0FDVElPTl9RVUVVRSAqL1xuIDI4MzpcdFx0XHRcdHUzMlx0XHRjdHg7XG4gMjg0Olx0XHRcdFx0dTMyXHRcdGluZGV4O1xuIDI4NTpcdFx0XHRcdHU4XHRcdHZmO1xuIDI4NjpcdFx0XHR9IHF1ZXVlO1xuIDI4NzpcdFx0XHRzdHJ1Y3Qge1x0XHRcdFx0LyogRkxPV19BQ1RJT05fU0FNUExFICovXG4gMjg4Olx0XHRcdFx0c3RydWN0IHBzYW1wbGVfZ3JvdXBcdCpwc2FtcGxlX2dyb3VwO1xuIDI4OTpcdFx0XHRcdHUzMlx0XHRcdHJhdGU7XG4gMjkwOlx0XHRcdFx0dTMyXHRcdFx0dHJ1bmNfc2l6ZTtcbiAyOTE6XHRcdFx0XHRib29sXHRcdFx0dHJ1bmNhdGU7XG4gMjkyOlx0XHRcdH0gc2FtcGxlO1xuIDI5MzpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlIHBvbGljZTtcdC8qIEZMT1dfQUNUSU9OX1BPTElDRSAqL1xuIDI5NDpcdFx0XHRzdHJ1Y3Qge1x0XHRcdFx0LyogRkxPV19BQ1RJT05fQ1QgKi9cbiAyOTU6XHRcdFx0XHRpbnQgYWN0aW9uO1xuIDI5NjpcdFx0XHRcdHUxNiB6b25lO1xuIDI5NzpcdFx0XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGU7XG4gMjk4Olx0XHRcdH0gY3Q7XG4gMjk5Olx0XHRcdHN0cnVjdCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGTE9XX0FDVElPTl9QUklPUklUWSBVc2FnZSBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIHNpdHVhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZSBhY3Jvc3MgZGlmZmVyZW50IGRyaXZlcnMgYW5kIHN1YnN5c3RlbXMsIHNvIEkgc3RhcnRlZCBieSBsb29raW5nIGF0IHRoZSBwYXRjaCBub3Rlcy4gSSBzZWUgdGhhdCB0aGUgYGFpcm9oYV9wcGVgIGFuZCBgbXRrX3BwZV9vZmZsb2FkYCBkcml2ZXJzIGFyZSBoYW5kbGluZyB0aGlzIHdpdGggYSBzaW1wbGUgYGNhc2VgIHN0YXRlbWVudCBhbmQgYGJyZWFrYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMuCgpOb3csIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCBJIHNlZSB0aGF0IGlmIGBmbG93LSZndDtwcmlvcml0eWAgaGFzIGEgdmFsdWUsIHRoZXkgYXJlIHNldHRpbmcgdGhlIGBza2ItJmd0O3ByaW9yaXR5YC4gT2theSwgaW50ZXJlc3RpbmcuIEFuZCwgdGhlIHJldmVyc2UgaXMgaGFwcGVuaW5nIGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCB3aGVyZSB0aGV5JiMzOTtyZSB0YWtpbmcgYHBrdC0mZ3Q7c2tiLSZndDtwcmlvcml0eWAgYW5kIHNldHRpbmcgaXQgb24gdGhlIGBmbG93LSZndDtwcmlvcml0eWAuIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIHBhc3NpbmcgaXQgYm90aCB3YXlzLgoKVGhlbiwgdGhlcmUmIzM5O3MgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gSGVyZSwgaWYgYGZsb3ctJmd0O3ByaW9yaXR5YCBpcyBzZXQsIGEgYGZsb3dfYWN0aW9uX2VudHJ5YCBpcyBwb3B1bGF0ZWQgd2l0aCBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGFuZCB0aGUgYGZsb3ctJmd0O3ByaW9yaXR5YCB2YWx1ZS4gVGhpcyBpcyBsaWtlbHkgaG93IHRoZSBwcmlvcml0eSBpcyBiZWluZyAqcGVyc2lzdGVkKiBvciAqYWN0ZWQgdXBvbiogaW4gdGhlIGZsb3cgdGFibGUgb2ZmbG9hZC4gTWFrZXMgc2Vuc2UuCgpUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8ga25vdyAqZXZlcnl3aGVyZSogdGhpcyBpcyB1c2VkLiBJdCYjMzk7cyB0aW1lIHRvIGxldmVyYWdlIG15IGdyZXAgc2tpbGxzLiBMZXQmIzM5O3MgZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGTE9XX0FDVElPTl9QUklPUklUWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM9MTU3PXN0YXRpYyBpbnQga3N6OTQ3N19mbG93ZXJfcGFyc2VfYWN0aW9uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N190Y19mbG93ZXIuYy0xNzYtXHRcdHN3aXRjaCAoYWN0LVx1MDAzZWlkKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM6MTc3Olx0XHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X3RjX2Zsb3dlci5jLTE3OC1cdFx0XHRpZiAoYWN0LVx1MDAzZXByaW9yaXR5IFx1MDAzZSBLU1o5NDc3X01BWF9UQykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz0yMDIxPXl0OTIxeF9hY2xfcnVsZV9leHRfcGFyc2VfZmxvd19hY3Rpb24oc3RydWN0IHl0OTIxeF9hY2xfcnVsZV9leHQgKnJ1bGVleHQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTIwNzYtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6MjA3NzpcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy0yMDc4LVx0XHRcdGlmIChzZWVuX3ByaW9yaXR5KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDg4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE2My1cdFx0XHRicmVhaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE2NDpcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE2NS1cdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTI3Nj1tdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMzgwLVx0XHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM6MzgxOlx0XHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMzgyLVx0XHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZmxvd2VyLmM9NTg9c3RhdGljIGludCBtbHhzd19zcF9mbG93ZXJfcGFyc2VfYWN0aW9ucyhzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2Zsb3dlci5jLTIxOC1cdFx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYzoyMTk6XHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYy0yMjAtXHRcdFx0ZXJyID0gbWx4c3dfc3BfYWNsX3J1bGVpX2FjdF9wcmlvcml0eShtbHhzd19zcCwgcnVsZWksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmxvd2VyLmM9MjU3PXN0YXRpYyBpbnQgb2NlbG90X2Zsb3dlcl9wYXJzZV9hY3Rpb24oc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYy00NjUtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYzo0NjY6XHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYy00NjctXHRcdFx0aWYgKGZpbHRlci1cdTAwM2VibG9ja19pZCAhPSBWQ0FQX0lTMSkge1xuLS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oPTE1MD1lbnVtIGZsb3dfYWN0aW9uX2lkIHtcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0xNjgtXHRGTE9XX0FDVElPTl9QVFlQRSxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjE2OTpcdEZMT1dfQUNUSU9OX1BSSU9SSVRZLFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMTcwLVx0RkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyxcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaD0yNDk9c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5IHtcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yODAtXHRcdHUxNlx0XHRcdHJ4X3F1ZXVlO1x0LyogRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyAqL1xuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg6MjgxOlx0XHR1MzJcdFx0XHRwcmlvcml0eTtcdC8qIEZMT1dfQUNUSU9OX1BSSU9SSVRZICovXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yODItXHRcdHN0cnVjdCB7XHRcdFx0XHQvKiBGTE9XX0FDVElPTl9RVUVVRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjgzPW5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzA1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3MDY6XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTcwNy1cdFx0ZW50cnktXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jPTM3MD1zdGF0aWMgaW50IHRjZl9za2JlZGl0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zODMtXHRcdH0gZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KSkge1xubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM6Mzg0Olx0XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zODUtXHRcdFx0ZW50cnktXHUwMDNlcHJpb3JpdHkgPSB0Y2Zfc2tiZWRpdF9wcmlvcml0eShhY3QpO1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQwNy1cdFx0ZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KSlcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjQwODpcdFx0XHRmbF9hY3Rpb24tXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTtcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQwOS1cdFx0ZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcnhfcXVldWVfbWFwcGluZyhhY3QpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEwMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEZsb3cgT2ZmbG9hZCBTdHJ1Y3R1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgaXRzIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLCBzcGVjaWZpY2FsbHk6CgpgYGBjCnN0cnVjdCBmbG93X29mZmxvYWQgewoJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaAkJdHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfTUFYXTsKCXN0cnVjdCBuZl9jb25uCQkJCSpjdDsKCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7Cgl1MTYJCQkJCXR5cGU7Cgl1MzIJCQkJCXRpbWVvdXQ7Cgl1MzIJCQkJCXByaW9yaXR5OwoJc3RydWN0IHJjdV9oZWFkCQkJCXJjdV9oZWFkOwp9OwpgYGAKClJpZ2h0LCB0aGF0IGdpdmVzIG1lIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3M6IHRoZSB0dXBsZSBoYXNoLCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBwb2ludGVyLCBzb21lIGZsYWdzLCBhIHR5cGUsIHRpbWVvdXQsIHByaW9yaXR5IGFuZCB0aGUgUkNVIGhlYWQuIE5vdyB0aGUgaW1wb3J0YW50IHBhcnQsIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoaXMgc3RydWN0dXJlIGlzIGNyZWF0ZWQsIGNvcGllZCwgdHJhbnNtaXR0ZWQgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCBmcm9tLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSB0aG9zZSBjcnVjaWFsIGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHVzYWdlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19vZmZsb2FkICYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTUyPXN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC01NS1cdGludFx0XHRcdFx0KCppbml0KShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjU2Olx0Ym9vbFx0XHRcdFx0KCpnYykoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTU3LVx0aW50XHRcdFx0XHQoKnNldHVwKShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTYwLVx0aW50XHRcdFx0XHQoKmFjdGlvbikoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo2MTpcdFx0XHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTYyLVx0XHRcdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTE5ND1lbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTE5OC1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MTk5OnN0cnVjdCBmbG93X29mZmxvYWQge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yMDAtXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoXHRcdHR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yMTEtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjIxMjp1bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjEzLVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjE5PXN0cnVjdCBuZl9mbG93X3JvdXRlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTI0My1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDoyNDU6dm9pZCBmbG93X29mZmxvYWRfZnJlZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ2LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9Mjg3PW5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMwNi1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzA3OnZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzA4LVx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzA5LVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMTA6aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMxMS12b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMxMjpcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGJvb2wgZm9yY2UpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMTMtXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMzA9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMzMS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzMyOnZvaWQgZmxvd19vZmZsb2FkX3RlYXJkb3duKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzMtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMzNDp2b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMzNS1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzM2LVx0XHQgICAgICAgdTggcHJvdG9jb2wsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMzc6dm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzgtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zNjg9dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzY5Olx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzcwLXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNzE6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzcyLXZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM3MzpcdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM3NC12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM3NTpcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzc2LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzgwPWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzgyLVx0XHRcdFx0ZW51bSBmbG93X2Jsb2NrX2NvbW1hbmQgY21kKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzgzOmludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM4NC1cdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzg1LVx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozODY6aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzg3LVx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0zNj1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTQwLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqbmZfZmxvd190YWJsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo0MTpcdHN0cnVjdCBmbG93X29mZmxvYWQgKm5mX2Zsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDItXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yMT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMjpmbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjMtXHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NTM6c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTQte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1NTpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODc9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjk3OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTgtXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNTctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE1ODpzdGF0aWMgdm9pZCBuZnRfZmxvd19kc3RfcmVsZWFzZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNTktXHRcdFx0XHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE2My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTY0OnZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTY1LVx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MTcxPUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTcyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNzM6c3RhdGljIGlubGluZSBib29sIG5mX2Zsb3dfaGFzX2V4cGlyZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTc0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE3OD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZml4dXBfdGNwKHN0cnVjdCBuZl9jb25uICpjdCwgdTggdGNwX3N0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjAwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2ZpeHVwX2N0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTIwMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNTQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI1NTpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcm91dGVfcmVsZWFzZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjYwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNjE6dm9pZCBmbG93X29mZmxvYWRfZnJlZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNjIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMwOC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzA5OnVuc2lnbmVkIGxvbmcgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMxMC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMjctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjMyODppbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzYwPXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzYxOlx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgYm9vbCBmb3JjZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzYyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM4MD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM4MTpcdFx0XHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM4Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zOTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM5Mjp2b2lkIGZsb3dfb2ZmbG9hZF90ZWFyZG93bihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zOTMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDAxPWZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwNC1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDA1Olx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA2LVx0aW50IGRpcjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNj1uZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI3LVx0XHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0Mjg6XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI5LVx0XHQgICAgICB2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDMyLVx0c3RydWN0IHJoYXNodGFibGVfaXRlciBodGk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQzMzpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQzNC1cdGludCBlcnIgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDYwPXN0YXRpYyBib29sIG5mX2Zsb3dfY3VzdG9tX2djKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQ2MTpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00NjIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTY4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU2OTpcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NzAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjM5PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjUxLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2NTI6dm9pZCBuZl9mbG93X3NuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NTMtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02NzY9RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19zbmF0X3BvcnQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY3ODp2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3OS1cdFx0ICAgICAgIHVuc2lnbmVkIGludCB0aG9mZiwgdTggcHJvdG9jb2wsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03Mjg9c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjcyOTpcdFx0XHRcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzMwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTQ1PXN0YXRpYyBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2luZXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo0NjpcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ3LVx0XHRcdFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yNC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjI1OnN0YXRpYyBpbnQgbmZfZmxvd19zdGF0ZV9jaGVjayhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yNi1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTY5PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwX2w0cHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODItXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MzpzdGF0aWMgdm9pZCBuZl9mbG93X3NuYXRfaXAoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDY6c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEyOTpzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTMwLVx0XHRcdCAgdW5zaWduZWQgaW50IHRob2ZmLCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ2OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDczLVx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3NDpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzUtXHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04MDE9c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODA3LVx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MDg6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODA5LVx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9OTI0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfbDRwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MzctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5Mzg6c3RhdGljIHZvaWQgbmZfZmxvd19zbmF0X2lwdjYoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkzOS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5NjE6c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwdjYoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk2Mi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05ODMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5ODQ6c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTg1LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDY3PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNzItXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA3MzpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDc0LVx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTEzMj1zdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTM5LVx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTQwOlx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExNDEtXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIzMj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfc3JjKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjMzOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM0LVx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTI4Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfZHN0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjgzOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjg0LVx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM0Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNDM6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM0NC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM3Mz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNzQ6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3NS1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQyMz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0MjQ6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNS1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ0OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0NDk6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ1MC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDczOnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2w0cHJvdG8oY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDc0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ5Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9wb3J0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0OTM6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ5NC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTUyNj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9wb3J0X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1Mjc6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTUyOC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTU2MD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X2NoZWNrc3VtKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTYxOlx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTYyLVx0XHRcdFx0ICAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NTg1PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3JlZGlyZWN0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTg2Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU4Ny1cdFx0XHRcdCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjI0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2MjU6c3RhdGljIGludCBmbG93X29mZmxvYWRfZW5jYXBfdHVubmVsKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNi1cdFx0XHRcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NjU0OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2RlY2FwX3R1bm5lbChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTUtXHRcdFx0XHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz02ODI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4NC1cdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc1NDppbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTUtXHRcdFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03ODE9RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX3JvdXRlX2lwdjQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODItXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4MzppbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODQtXHRcdFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDk9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODE0LVx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODE1Olx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyA9IG9mZmxvYWQtXHUwMDNlZmxvdztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODE2LVx0c3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0ID0gTlVMTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTkxMj1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF90dXBsZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjkxMzpcdFx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MTQtXHRcdFx0XHQgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA5Mz1uZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwOTQ6XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdW5zaWduZWQgaW50IGNtZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA5NS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTE0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTE1OnN0YXRpYyBib29sIG5mX2Zsb3dfb2ZmbG9hZF91bnN1cHBvcnRlZChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTE2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMjQ9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMjU6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMzY9dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEzNzpcdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzOC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTQ2PXZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNDc6XHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1OT12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNjA6XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2MS17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01OC1cdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NTk6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNjAtXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0yNDQ9c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjaGVkL2FjdF9jdC5jOjI0NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L3NjaGVkL2FjdF9jdC5jLTI0Ni1cdFx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgdGRpcixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjI4ODpzdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd19pc19vdXRkYXRlZChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L3NjaGVkL2FjdF9jdC5jLTI4OS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTM5Nz1zdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9wdXQoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjQwNjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190Y19pZmlkeChzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDctXHRcdFx0XHQgc3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dCwgdTggZGlyKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MTItXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEzOnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDE0LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MjgtXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xubmV0L3NjaGVkL2FjdF9jdC5jOjQyOTpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmVudHJ5O1xubmV0L3NjaGVkL2FjdF9jdC5jLTQzMC1cdGludCBlcnI7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTY1OD1zdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTY2Ny1cdGJvb2wgZm9yY2VfcmVmcmVzaCA9IGZhbHNlO1xubmV0L3NjaGVkL2FjdF9jdC5jOjY2ODpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNjY5LVx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQxNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2AgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLCBidXQgSSB3YW50IHRvIGdldCBhIGNvbmNyZXRlIGdyYXNwIG9mIGhvdyB0aGUgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZXZhbHVhdGVkIGFuZCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBvZmZsb2FkIGhvb2tzLCB0aGUgcnVsZSBtYXRjaGluZywgYW5kIHRoZSBhY3R1YWwgcGFja2V0IGhhbmRsaW5nIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSBwYXJzZSB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgdGhhdCBnb3Zlcm4gdGhpcyBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCBtZSBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDEwNjpcdFx0XHRnb3RvIG91dDtcbiAxMDc6XHRcbiAxMDg6XHRcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbiAxMDk6XHRcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG4gMTEwOlx0XHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4gMTExOlx0XG4gMTEyOlx0XHRmbG93ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcbiAxMTM6XHRcdGlmICghZmxvdylcbiAxMTQ6XHRcdFx0Z290byBlcnJfZmxvd19hbGxvYztcbiAxMTU6XHRcbiAxMTY6XHRcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFx1MDAyNnJvdXRlKTtcbiAxMTc6XHRcdGlmICh0Y3BoKVxuIDExODpcdFx0XHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcbiAxMTk6XHRcbiAxMjA6XHRcdC8qIFRoZSBwYWNrZXRzIHRoZSBmbG93IGZvcndhcmRzIGluIGl0cyBwbGFjZSBieXBhc3MgdGhlIHJ1bGVzIHRoYXRcbiAxMjE6XHRcdCAqIGNsYXNzaWZpZWQgdGhpcyBvbmU7IGNhcnJ5IHRoZSByZXN1bHQgd2l0aCB0aGUgZmxvdy5cbiAxMjI6XHRcdCAqL1xuIDEyMzpcdFx0Zmxvdy1cdTAwM2Vwcmlvcml0eSA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJpb3JpdHk7XG4gMTI0Olx0XG4gMTI1Olx0XHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAxMjY6XHRcdHJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTtcbiAxMjc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTI4Olx0XHRcdGdvdG8gZXJyX2Zsb3dfYWRkO1xuIDEyOTpcdFxuIDEzMDpcdFx0cmV0dXJuO1xuIDEzMTpcdFxuIDEzMjpcdGVycl9mbG93X2FkZDpcbiAxMzM6XHRcdGZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpO1xuIDEzNDpcdGVycl9mbG93X2FsbG9jOlxuIDEzNTpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xuIDEzNjpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcbiAxMzc6XHRlcnJfZmxvd19yb3V0ZTpcbiAxMzg6XHRcdGNsZWFyX2JpdChJUFNfT0ZGTE9BRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gMTM5Olx0b3V0OlxuIDE0MDpcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4gMTQxOlx0fVxuIDE0MjpcdFxuIDE0MzpcdHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDE0NDpcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjUwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0OgoKKipBbmFseXppbmcgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIG9mIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGxpZXMgaW4gdGhlIGZ1bmN0aW9ucyBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIGFjdHVhbGx5IGZvcndhcmRpbmcgdGhlIG9mZmxvYWRlZCBmbG93cy4gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgZm9yd2FyZGluZyBkZWNpc2lvbiBhbmQgYWN0aW9ucyBhcmUgbWFkZS4gSSYjMzk7bSBob3BpbmcgdG8gZGlzY292ZXIgdGhlIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcbiA1MDE6XHRcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcbiA1MDI6XHRcbiA1MDM6XHRcdG5mX2Zsb3dfZW5jYXBfcG9wKGN0eCwgc2tiLCB0dXBsZWhhc2gpO1xuIDUwNDpcdFx0dGhvZmYgLT0gY3R4LVx1MDAzZW9mZnNldDtcbiA1MDU6XHRcbiA1MDY6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuIDUwNzpcdFx0bmZfZmxvd19uYXRfaXAoZmxvdywgc2tiLCB0aG9mZiwgZGlyLCBpcGgpO1xuIDUwODpcdFxuIDUwOTpcdFx0aXBfZGVjcmVhc2VfdHRsKGlwaCk7XG4gNTEwOlx0XHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gNTExOlx0XG4gNTEyOlx0XHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbiA1MTM6XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbiA1MTQ6XHRcbiA1MTU6XHRcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiA1MTY6XHRcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gNTE3Olx0XG4gNTE4Olx0XHRyZXR1cm4gMTtcbiA1MTk6XHR9XG4gNTIwOlx0XG4gNTIxOlx0LyogU2ltaWxhciB0byBza2Jfdmxhbl9wdXNoLiAqL1xuIDUyMjpcdHN0YXRpYyBpbnQgbmZfZmxvd192bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHByb3RvLCB1MTYgaWQsXG4gNTIzOlx0XHRcdFx0ICAgICB1MzIgbmVlZGVkX2hlYWRyb29tKVxuIDUyNDpcdHtcbiA1MjU6XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gNTI2Olx0XHRcdHN0cnVjdCB2bGFuX2hkciAqdmhkcjtcbiA1Mjc6XHRcbiA1Mjg6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSAmIzQzOyBWTEFOX0hMRU4pKVxuIDUyOTpcdFx0XHRcdHJldHVybiAtMTtcbiA1MzA6XHRcbiA1MzE6XHRcdFx0X19za2JfcHVzaChza2IsIFZMQU5fSExFTik7XG4gNTMyOlx0XHRcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4gNTMzOlx0XHRcdFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuIDUzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA2OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gSVB2NiBGbG93IE9mZmxvYWQqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBtb2R1bGUuIEkgcmVtZW1iZXIgd2Ugd2VyZSBoYXZpbmcgc29tZSBpc3N1ZXMgYXJvdW5kIGxpbmUgMTEwMCwgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgdGhlcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHNvbWV0aGluZyBtaWdodCBiZSBhbWlzcywgcGFydGljdWxhcmx5IHdpdGggdGhlIElQdjYgZm9yd2FyZGluZyBwYXRoLiBXZSBrbm93IHRoZSBjb21wbGV4aXRpZXMgaGVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTU6XHRcdH1cbjEwOTY6XHRcbjEwOTc6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgJiM0MzsgY3R4LVx1MDAzZWhkcnNpemUpKVxuMTA5ODpcdFx0XHRyZXR1cm4gLTE7XG4xMDk5Olx0XG4xMTAwOlx0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XG4xMTAxOlx0XG4xMTAyOlx0XHRuZl9mbG93X2VuY2FwX3BvcChjdHgsIHNrYiwgdHVwbGVoYXNoKTtcbjExMDM6XHRcbjExMDQ6XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuMTEwNTpcdFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XG4xMTA2Olx0XG4xMTA3Olx0XHRpcDZoLVx1MDAzZWhvcF9saW1pdC0tO1xuMTEwODpcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuMTEwOTpcdFxuMTExMDpcdFx0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpXG4xMTExOlx0XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4xMTEyOlx0XG4xMTEzOlx0XHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXG4xMTE0Olx0XHRcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXHUwMDNlY3QsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXIsIHNrYi1cdTAwM2VsZW4pO1xuMTExNTpcdFxuMTExNjpcdFx0cmV0dXJuIDE7XG4xMTE3Olx0fVxuMTExODpcdFxuMTExOTpcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbjExMjA6XHRuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbjExMjE6XHRcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbjExMjI6XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjExMjM6XHR7XG4xMTI0Olx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4xMTI1Olx0XG4xMTI2Olx0XHRpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApXG4xMTI3Olx0XHRcdHJldHVybiBOVUxMO1xuMTEyODpcdFxuMTEyOTpcdFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRkxPV19BQ1RJT05fUFJJT1JJVFkgaW4gRXRoZXJuZXQgT2ZmbG9hZCBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbmNsdXNpb24gb2YgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGVzZSBzcGVjaWZpYyBldGhlcm5ldCBvZmZsb2FkIGRyaXZlcnMsIGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgLiBMb29raW5nIGF0IHRoZSBkaWZmcywgaXQmIzM5O3MgY2xlYXIgdGhleSBib3RoIG5vdyBpbmNsdWRlIGEgYGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFlgIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGBfcmVwbGFjZWAgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gc3VwcG9ydCBvciBhY2tub3dsZWRnZSBhIHByaW9yaXR5LXJlbGF0ZWQgZmxvdyBhY3Rpb24gZHVyaW5nIG9mZmxvYWQgcmVwbGFjZW1lbnQuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhpcyBpbnRyb2R1Y3Rpb24gcHJlc2VudHMgYW55IG9idmlvdXMgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBpbiB0aGUgY29kZS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoYXQgYSBuZXcgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBjYXNlIG1pZ2h0IG5vdCBiZSBpbXBsZW1lbnRlZCBmdWxseSBldmVyeXdoZXJlIGl0IG5lZWRzIHRvIGJlLCBvciB0aGF0IHRoZSBjdXJyZW50IGhhbmRsaW5nIG9mIHRoZSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGNhc2UgbWlnaHQgYmUgaW5jb21wbGV0ZS4KCk5leHQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNoYW5nZSByaXBwbGVzIG91dC4gRG9lcyB0aGUgY2hhbmdlIHRvIHRoZXNlIHR3byBkcml2ZXJzIGhhdmUgaW1wbGljYXRpb25zIGluIG90aGVyIHJlbGF0ZWQgZXRoZXJuZXQgb2ZmbG9hZCBkcml2ZXJzPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgb3IgYW55IHBvdGVudGlhbCByZWxhdGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZW0uCgpGaW5hbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlIGhhbmRsZSB1bmtub3duIGFjdGlvbiBJRHMgY29ycmVjdGx5LiBIb3cgZG8gb3RoZXIgZmxvd2VyL29mZmxvYWQgZHJpdmVycyBkZWFsIHdpdGggZmxvdyBhY3Rpb25zIHRoZXkgZG9uJiMzOTt0IGV4cGxpY2l0bHkgcmVjb2duaXplPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJiMzOTtyZSBncmFjZWZ1bGx5IGhhbmRsaW5nIGFueSBmbG93IGFjdGlvbnMgd2UgZG9uJiMzOTt0IGZ1bGx5IHN1cHBvcnQgc28gdGhhdCB3ZSBkb24mIzM5O3QgaW50cm9kdWNlIGluc3RhYmlsaXR5LiBUaGlzIGlzIGFib3V0IHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmF1bHQ6XFxzKnJldHVybiAtRU9QTk9UU1VQUDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuYz0xNjIwPWludCBtdnBwMl9ldGh0b29sX3J4Zmhfc2V0KHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfY2xzLmMtMTY1Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jOjE2NTM6XHRkZWZhdWx0OiByZXR1cm4gLUVPUE5PVFNVUFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jLTE2NTQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjcyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBmbG93IG9mZmxvYWQgcGF0Y2guIE15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggdGhlc2UgdHlwZXMgb2YgY2hhbmdlcywgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcGF0Y2ggaW5hZHZlcnRlbnRseSBjcmVhdGVzIGEgc2NlbmFyaW8gd2hlcmUga2VybmVsIGRhdGEsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZmxvdyBvZmZsb2FkLCBtaWdodCBiZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBiZWZvcmUgaXQmIzM5O3MgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4KCk15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGZsb3dfYWN0aW9uX2Jhc2ljX2h3X3N0YXRzX3R5cGVzX2NoZWNrYCBvciBhbnkgc2ltaWxhciByb3V0aW5lcyB0aGF0IHBsYXkgYSByb2xlIGluIGZsb3cgb2ZmbG9hZC4gVGhlc2UgYXJlIGxpa2VseSB0byBiZSBrZXkgYXJlYXMuIFRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgd2hldGhlciB0aGlzIHBhdGNoLCBpbiBhbnkgd2F5LCBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXhwb3N1cmUgb2YgcmVsZXZhbnQga2VybmVsIGRhdGEuCgpOb3csIGxldCYjMzk7cyBzeXN0ZW1hdGljYWxseSBhcHBseSB0aGUgS01TQU4gY3JpdGVyaWEuIEZpcnN0IHVwLCB3ZSYjMzk7cmUgbG9va2luZyBmb3Iga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBnZXQgc2VudCB0byB1c2Vyc3BhY2UgdmlhIHRoZSB1c3VhbCBzdXNwZWN0czogYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgc2tiIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gQXJlIHRoZXJlIGFueSBuZXcgY2FuZGlkYXRlcyBpbiB0aGlzIHBhdGNoPwoKSSYjMzk7bSBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiB0aGUgYGZsb3ctJmd0O3ByaW9yaXR5YCBmaWVsZC4gV2hpbGUgYHNrYi0mZ3Q7cHJpb3JpdHlgIGlzIHN0YW5kYXJkIGtlcm5lbCBtZXRhZGF0YSBhbmQgc2hvdWxkIGJlIGZpbmUsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGZsb3ctJmd0O3ByaW9yaXR5YCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBpbiBhbnkgd2F5LiBNeSBuZXh0IHN0ZXAgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIG5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZXMuIERvZXMgYGN0bmV0bGlua2AsIGBuZnRhYmxlc2AsIG9yIGFueSBvdGhlciByZWxldmFudCBuZXRsaW5rIGNvZGUgZXhwb3NlIGBmbG93LSZndDtwcmlvcml0eWAgb3IgYW55IHBhcnRzIG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgc3RydWN0dXJlPyBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBuZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBgbmZfZmxvd190YWJsZV9uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IGRhdGEgZHVtcHMuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJiMzOTtyZSBub3QgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdGhyb3VnaCBhIG5ldGxpbmsgYXR0cmlidXRlIG9yIHNpbWlsYXIgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19vZmZsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXHRcdCYjNDM7PSBuZnRfbGltaXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz0xNzE9dm9pZCBuZnRfb2ZmbG9hZF91cGRhdGVfZGVwZW5kZW5jeShzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTE4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoxODk6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9jb21tb25faW5pdChzdHJ1Y3QgZmxvd19jbHNfY29tbW9uX29mZmxvYWQgKmNvbW1vbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xOTAtXHRcdFx0XHRcdCBfX2JlMTYgcHJvdG8sIGludCBwcmlvcml0eSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MjQ2PXN0YXRpYyB2b2lkIG5mdF9mbG93X2Nsc19vZmZsb2FkX3NldHVwKHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjI2MDpcdG5mdF9mbG93X29mZmxvYWRfY29tbW9uX2luaXQoXHUwMDI2Y2xzX2Zsb3ctXHUwMDNlY29tbW9uLCBwcm90byxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0yNjEtXHRcdFx0XHQgICAgIGJhc2VjaGFpbi1cdTAwM2VvcHMucHJpb3JpdHksIGV4dGFjayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyNjg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2NtZChjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0yNjktXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyODg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3J1bGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjg5LVx0XHRcdFx0IHN0cnVjdCBuZnRfcnVsZSAqcnVsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjk0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjI5NTpcdHJldHVybiBuZnRfZmxvd19vZmZsb2FkX2NtZChjaGFpbiwgcnVsZSwgZmxvdywgY29tbWFuZCwgXHUwMDI2Y2xzX2Zsb3cpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI5Ni19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTI5OD1pbnQgbmZ0X2Zsb3dfcnVsZV9zdGF0cyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzA0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjMwNTpcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY21kKGNoYWluLCBydWxlLCBOVUxMLCBGTE9XX0NMU19TVEFUUyxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMDYtXHRcdFx0XHQgICBcdTAwMjZjbHNfZmxvdyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTMxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzozMTg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2JpbmQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzE5LVx0XHRcdFx0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMjQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzI1OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF91bmJpbmQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzI2LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTM1MD1zdGF0aWMgaW50IG5mdF9ibG9ja19zZXR1cChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzU3LVx0Y2FzZSBGTE9XX0JMT0NLX0JJTkQ6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzU4Olx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2JpbmQoYm8sIGJhc2VjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzU5LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zNjAtXHRjYXNlIEZMT1dfQkxPQ0tfVU5CSU5EOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjM2MTpcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF91bmJpbmQoYm8sIGJhc2VjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzYyLVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDA0PXN0YXRpYyB2b2lkIG5mdF9pbmRyX2Jsb2NrX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy00MTgtXHRsaXN0X21vdmUoXHUwMDI2YmxvY2tfY2ItXHUwMDNlbGlzdCwgXHUwMDI2Ym8uY2JfbGlzdCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NDE5Olx0bmZ0X2Zsb3dfb2ZmbG9hZF91bmJpbmQoXHUwMDI2Ym8sIGJhc2VjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNDIwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mdF9uZXQtXHUwMDNlY29tbWl0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDU4PXN0YXRpYyBpbnQgbmZ0X2Zsb3dfYmxvY2tfY2hhaW4oc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTQ5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo0OTc6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2NoYWluKHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLCB1OCAqcHBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy00OTgtXHRcdFx0XHQgIGVudW0gZmxvd19ibG9ja19jb21tYW5kIGNtZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NTE2PXN0YXRpYyB2b2lkIG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzMS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1MzI6XHRcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9jaGFpbihuZnRfdHJhbnNfY2hhaW4odHJhbnMpLCBOVUxMLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzMy1cdFx0XHRcdFx0XHQgICAgIEZMT1dfQkxPQ0tfVU5CSU5EKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUzOTpcdFx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2NoYWluKG5mdF90cmFuc19jaGFpbih0cmFucyksIE5VTEwsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQwLVx0XHRcdFx0XHRcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQ1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0NjpcdFx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX3J1bGUobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0Ny1cdFx0XHRcdFx0XHQgICAgbmZ0X3RyYW5zX3J1bGUodHJhbnMpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTU0Olx0XHRcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfcnVsZShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyksXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTU1LVx0XHRcdFx0XHRcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTU2Nj1pbnQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4My1cdFx0XHRwb2xpY3kgPSBuZnRfdHJhbnNfY2hhaW5fcG9saWN5KHRyYW5zKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1ODQ6XHRcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9jaGFpbihuZnRfdHJhbnNfY2hhaW4odHJhbnMpLCBcdTAwMjZwb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg1LVx0XHRcdFx0XHRcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTkxLVx0XHRcdHBvbGljeSA9IG5mdF90cmFuc19jaGFpbl9wb2xpY3kodHJhbnMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU5MjpcdFx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2NoYWluKG5mdF90cmFuc19jaGFpbih0cmFucyksIFx1MDAyNnBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTMtXHRcdFx0XHRcdFx0ICAgICBGTE9XX0JMT0NLX1VOQklORCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwMy1cdFx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjA0Olx0XHRcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfcnVsZShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyksXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjA1LVx0XHRcdFx0XHRcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MTM6XHRcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9ydWxlKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MTQtXHRcdFx0XHRcdFx0ICAgIG5mdF90cmFuc19ydWxlKHRyYW5zKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIwOnN0cnVjdCBuZnRfZmxvd19vZmZsb2FkIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIxLVx0c3RydWN0IG5mdF9mbG93dGFibGVcdCpmbG93dGFibGU7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyNDpzdGF0aWMgYm9vbCBuZnRfZmxvd19vZmZsb2FkX3NraXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZhbWlseSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz00MT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfY3RfdGNwKHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy00OS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjUwOnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01MS1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTUzLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjU0Olx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTUtXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcdTAwMjZwcml2LVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VkYXRhO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTYzLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NjQ6XHRpZiAobmZ0X2Zsb3dfb2ZmbG9hZF9za2lwKHBrdC1cdTAwM2Vza2IsIG5mdF9wZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTY1LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNDItXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxNDM6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNDQtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9mbG93X29mZmxvYWRfcG9saWN5W05GVEFfRkxPV19NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNTctXHRbTkZUQV9GTE9XX1RBQkxFX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE2MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE2MTpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTYyLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNjQte1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTY1Olx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTY2LVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQoY3R4LVx1MDAzZW5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTg0LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTg1OnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTg2LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTg4LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE4OTpcdHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE5MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxOTQ6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk1LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE5NzpcdHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE5OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDEtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMDI6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDMtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDctXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMDg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIwOS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMTAte1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjExOlx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjEyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyMjpzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9mbG93X29mZmxvYWRfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI0Olx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjU6XHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjY6XHQuZXZhbFx0XHQ9IG5mdF9mbG93X29mZmxvYWRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyNzpcdC5pbml0XHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI4Olx0LmFjdGl2YXRlXHQ9IG5mdF9mbG93X29mZmxvYWRfYWN0aXZhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjk6XHQuZGVhY3RpdmF0ZVx0PSBuZnRfZmxvd19vZmZsb2FkX2RlYWN0aXZhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzA6XHQuZGVzdHJveVx0PSBuZnRfZmxvd19vZmZsb2FkX2Rlc3Ryb3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzE6XHQudmFsaWRhdGVcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMjpcdC5kdW1wXHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLX07XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzQtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzU6c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjM2LVx0Lm5hbWVcdFx0PSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzc6XHQub3BzXHRcdD0gXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzg6XHQucG9saWN5XHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzktXHQubWF4YXR0clx0PSBORlRBX0ZMT1dfTUFYLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTI1Nj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZsb3dfb2ZmbG9hZF9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjYwOnN0YXRpYyBpbnQgX19pbml0IG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI2MS17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjY3LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjY4Olx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI2OS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjc5LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjgwOnN0YXRpYyB2b2lkIF9fZXhpdCBuZnRfZmxvd19vZmZsb2FkX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yODEte1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjgyOlx0bmZ0X3VucmVnaXN0ZXJfZXhwcihcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjgzLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2Zmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllcik7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjg1LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6Mjg2Om1vZHVsZV9pbml0KG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2luaXQpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6Mjg3Om1vZHVsZV9leGl0KG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2V4aXQpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA3NwoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQWxsIENsZWFyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byB0aGUgYHByaW9yaXR5YCBmaWVsZCB3aXRoaW4gdGhlIGZsb3cgb2ZmbG9hZCBzeXN0ZW0gYW5kIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucy4gVGhlIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGBmbG93X29mZmxvYWRgIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgZ3VhcmFudGVlcyB0aGF0IHRoZSBgcHJpb3JpdHlgIGZpZWxkIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlbiwgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgZXhwbGljaXRseSBzZXRzIGBmbG93LSZndDtwcmlvcml0eWAgYmFzZWQgb24gdGhlIHBhY2tldCYjMzk7cyBTS0IgcHJpb3JpdHkuIFRoaXMgaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdGhlbiByZWFkIGFuZCB1c2VkIHRvIHNldCB0aGUgU0tCIHByaW9yaXR5IGluIHRoZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucywgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLgoKRnVydGhlcm1vcmUsIHRoZSBjb2RlIHBhdGggdGhhdCB1c2VzIGBmbG93X2FjdGlvbl9lbnRyeWAgb2J0YWluZWQgZnJvbSBgZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpYCBhbHNvIGFwcGVhcnMgc2FmZS4gVGhlIGBmbG93X3J1bGVgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jX2ZsZXhgIGR1cmluZyBgZmxvd19ydWxlX2FsbG9jYC4KCkkgc2VlIHRoYXQgZHJpdmVyIGhhbmRsZXJzIGxpa2UgdGhvc2UgaW4gYGFpcm9oYV9wcGUuY2AgYW5kIGBtdGtfcHBlX29mZmxvYWQuY2AgZXhwbGljaXRseSBhY2NvdW50IGZvciBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGJ5IGFkZGluZyB0aGUgY2FzZSBmb3IgdGhhdCBhY3Rpb24sIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBpc3N1ZXMgb2YgZmFsbGluZyBpbnRvIHRoZSBkZWZhdWx0IGNhc2UuCgpJbiBlc3NlbmNlLCB0aGVyZSBhcmUgbm8gaWRlbnRpZmllZCBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCwgbm8gdW5jaGVja2VkIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBtYW5pcHVsYXRlIGxlbmd0aCBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhpcyB0aG9yb3VnaCBhbmFseXNpcywgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBjb25jbHVzaW9uIHRoYXQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MsIGFuZCBJIGFtIHJlYWR5IHRvIHByZXBhcmUgdGhlIGFwcHJvcHJpYXRlIHRvb2wgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGZsb3cgcHJpb3JpdHkgdHJhY2tpbmcgdG8gdGhlIE5ldGZpbHRlciBmbG93dGFibGUgZmFzdHBhdGggYW5kIG9mZmxvYWQgc3Vic3lzdGVtLiBcbi0gU3RydWN0IGBmbG93X29mZmxvYWRgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGBmbG93X29mZmxvYWRfYWxsb2NgKSwgemVyb2luZyBhbGwgZmllbGRzIGluY2x1ZGluZyB0aGUgbmV3IGBwcmlvcml0eWAgZmllbGQuXG4tIFRoZSBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgZmllbGQgaXMgYXNzaWduZWQgZnJvbSBgcGt0LVx1MDAzZXNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgYW5kIGxhdGVyIHJlYWQgdG8gc2V0IGBza2ItXHUwMDNlcHJpb3JpdHlgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggb3IgYWRkZWQgYXMgYSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGZsb3cgYWN0aW9uIGVudHJ5IGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC5cbi0gRmxvdyBydWxlcyBhcmUgYWxsb2NhdGVkIHZpYSBgZmxvd19ydWxlX2FsbG9jYCB1c2luZyBga3phbGxvY19mbGV4YCwgZW5zdXJpbmcgYWxsIGFjdGlvbiBlbnRyaWVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxuLSBObyB1bmluaXRpYWxpemVkIGRhdGEsIHN0YWNrL2hlYXAgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cbi0gVGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjoxOC41MDk2MzgxMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5NDIyNDI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICAgIFwibmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vblwiLFxuICAgIFwibmZfZmxvd19ydWxlX3JvdXRlX2lwdjRcIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGZsb3cgcHJpb3JpdHkgdHJhY2tpbmcgdG8gdGhlIE5ldGZpbHRlciBmbG93dGFibGUgZmFzdHBhdGggYW5kIG9mZmxvYWQgc3Vic3lzdGVtLiBcXG4tIFN0cnVjdCBgZmxvd19vZmZsb2FkYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIChgZmxvd19vZmZsb2FkX2FsbG9jYCksIHplcm9pbmcgYWxsIGZpZWxkcyBpbmNsdWRpbmcgdGhlIG5ldyBgcHJpb3JpdHlgIGZpZWxkLlxcbi0gVGhlIGBmbG93LVxcdTAwM2Vwcmlvcml0eWAgZmllbGQgaXMgYXNzaWduZWQgZnJvbSBgcGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cXHUwMDNlcHJpb3JpdHlgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggb3IgYWRkZWQgYXMgYSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGZsb3cgYWN0aW9uIGVudHJ5IGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC5cXG4tIEZsb3cgcnVsZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGZsb3dfcnVsZV9hbGxvY2AgdXNpbmcgYGt6YWxsb2NfZmxleGAsIGVuc3VyaW5nIGFsbCBhY3Rpb24gZW50cmllcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MTguNTA5NjQ1MTkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMDg0MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzEzNDI5YzE3YzllZGFhNmZkNTcxZTc3YmE2YTJiMDI5MGU5MGYwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDEyOjM2OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcXG5pbmRleCBkNzU3YzIxYzEwZjJkLi41ODQ0YWIxOWFlYzY2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcXG5AQCAtNzEsNyArNzEsOSBAQCBmb3J3YXJkaW5nIHBhdGggaW5jbHVkaW5nIHRoZSBOZXRmaWx0ZXIgaG9va3MgYW5kIHRoZSBmbG93dGFibGUgZmFzdHBhdGggYnlwYXNzLlxcbiBcXG4gVGhlIGZsb3d0YWJsZSBlbnRyeSBhbHNvIHN0b3JlcyB0aGUgTkFUIGNvbmZpZ3VyYXRpb24sIHNvIGFsbCBwYWNrZXRzIGFyZVxcbiBtYW5nbGVkIGFjY29yZGluZyB0byB0aGUgTkFUIHBvbGljeSB0aGF0IGlzIHNwZWNpZmllZCBmcm9tIHRoZSBjbGFzc2ljIElQXFxuLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWRcXG4rZm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3dcXG4rYWxzbyBzdG9yZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBwYWNrZXQgdGhhdCBjcmVhdGVkIGl0LCBzbyBhIHByaW9yaXR5IHNldCBiZWZvcmVcXG4rYGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkXFxuIHRyYWZmaWMgaXMgcGFzc2VkIHVwIHRvIGZvbGxvdyB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggZ2l2ZW4gdGhhdCB0aGVcXG4gdHJhbnNwb3J0IGhlYWRlciBpcyBtaXNzaW5nLCBpbiB0aGlzIGNhc2UsIGZsb3d0YWJsZSBsb29rdXBzIGFyZSBub3QgcG9zc2libGUuXFxuIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5pbmRleCA5MjYxMTgwMjgwMWVhLi4yYWZjZTc2YWQxMzExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuQEAgLTExNjEsNiArMTE2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1JFRElSRUNUOlxcbiBcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xcbmluZGV4IDk5YjI4YWFhN2NjNDcuLjRlZTk5ZThlNGEzNGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xcbkBAIC0zNzgsNiArMzc4LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1JFRElSRUNUOlxcbiBcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG5pbmRleCBmMmUyNzcxZjE4OGY0Li4yMzIxOGM4Y2JjM2RjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTIwMiw2ICsyMDIsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkIHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1MTZcXHRcXHRcXHRcXHRcXHR0eXBlO1xcbiBcXHR1MzJcXHRcXHRcXHRcXHRcXHR0aW1lb3V0O1xcbitcXHR1MzJcXHRcXHRcXHRcXHRcXHRwcmlvcml0eTtcXG4gXFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0XFx0cmN1X2hlYWQ7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuaW5kZXggYzhjMjlhOWExNjg0NC4uYzg1ZTJkNjA4YzMyOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuQEAgLTUwOSw2ICs1MDksOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdGlwX2RlY3JlYXNlX3R0bChpcGgpO1xcbiBcXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuIFxcbitcXHRpZiAoZmxvdy1cXHUwMDNlcHJpb3JpdHkpXFxuK1xcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBmbG93LVxcdTAwM2Vwcmlvcml0eTtcXG4rXFxuIFxcdGlmIChmbG93X3RhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxcbiBcXHRcXHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVxcdTAwM2VjdCwgdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXIsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFxuQEAgLTExMDQsNiArMTEwNyw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpcDZoLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gXFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbiBcXG4rXFx0aWYgKGZsb3ctXFx1MDAzZXByaW9yaXR5KVxcbitcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gZmxvdy1cXHUwMDNlcHJpb3JpdHk7XFxuK1xcbiBcXHRpZiAoZmxvd190YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcXG4gXFx0XFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cXHUwMDNlY3QsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyLCBza2ItXFx1MDAzZWxlbik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbmluZGV4IDgwMWEzZGQ5Y2VlYTMuLmNhYWFkZmZjMjU2M2UgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5AQCAtNjk2LDYgKzY5NiwxNyBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0ICAgIGZsb3dfb2ZmbG9hZF9ldGhfZHN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4rXFx0aWYgKGZsb3ctXFx1MDAzZXByaW9yaXR5KSB7XFxuK1xcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuK1xcbitcXHRcXHRlbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG4rXFx0XFx0aWYgKCFlbnRyeSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XFxuK1xcdFxcdGVudHJ5LVxcdTAwM2Vwcmlvcml0eSA9IGZsb3ctXFx1MDAzZXByaW9yaXR5O1xcbitcXHR9XFxuK1xcbiBcXHR0dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0dXBsZS1cXHUwMDNlZW5jYXBfbnVtOyBpKyspIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xcbmluZGV4IDMyYjQyODEwMzhkZDMuLmNhOTE5MjRiNGRlM2IgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xcbkBAIC0xMTcsNiArMTE3LDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdGlmICh0Y3BoKVxcbiBcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gXFxuK1xcdC8qIFRoZSBwYWNrZXRzIHRoZSBmbG93IGZvcndhcmRzIGluIGl0cyBwbGFjZSBieXBhc3MgdGhlIHJ1bGVzIHRoYXRcXG4rXFx0ICogY2xhc3NpZmllZCB0aGlzIG9uZTsgY2FycnkgdGhlIHJlc3VsdCB3aXRoIHRoZSBmbG93LlxcbitcXHQgKi9cXG4rXFx0Zmxvdy1cXHUwMDNlcHJpb3JpdHkgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJpb3JpdHk7XFxuK1xcbiBcXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG5pbmRleCA0NDljNTE4YmQ5NDdkLi5hYjc3MzIzNThlMWQ4IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbkBAIC00NTgsNiArNDU4LDEwNiBAQCBmaVxcbiBcXHRjaGVja19kc2NwIFxcXCJkc2NwX2Z3ZFxcXCIgXFxcIiRwbXR1XFxcIlxcbiB9XFxuIFxcbitjaGVja19wcmlvcml0eSgpXFxuK3tcXG4rXFx0bG9jYWwgd2hhdD0kMVxcbitcXHRsb2NhbCBwbXR1PVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgb2s9MVxcbitcXG4rXFx0bG9jYWwgY291bnRlclxcbitcXHRjb3VudGVyPSQoaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzMgfCBncmVwIHBhY2tldHMpXFxuK1xcdGxvY2FsIHBjMz0ke2NvdW50ZXIlKmJ5dGVzKn1cXG4rXFx0cGMzPSR7cGMzIypwYWNrZXRzfVxcbitcXG4rXFx0Y291bnRlcj0kKGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8wIHwgZ3JlcCBwYWNrZXRzKVxcbitcXHRsb2NhbCBwYzA9JHtjb3VudGVyJSpieXRlcyp9XFxuK1xcdHBjMD0ke3BjMCMqcGFja2V0c31cXG4rXFxuK1xcdGxvY2FsIGZhaWxtc2c9XFxcIkZBSUw6IHBtdHUgJHBtdHU6ICR3aGF0IGNvdW50ZXJzIGRvIG5vdCBtYXRjaCwgZXhwZWN0ZWRcXFwiXFxuK1xcbitcXHRjYXNlIFxcXCIkd2hhdFxcXCIgaW5cXG4rXFx0XFxcInByaW9fbm9uZVxcXCIpXFxuK1xcdFxcdGlmIFsgXFxcIiRwYzNcXFwiIC1ndCAwIF0gfHwgWyBcXFwiJHBjMFxcXCIgLWVxIDAgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCIkZmFpbG1zZyBwcmlvMyA9PSAwLCBwcmlvMCBcXHUwMDNlIDAsIGJ1dCBnb3QgJHBjMywkcGMwXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdG9rPTBcXG4rXFx0XFx0ZmlcXG4rXFx0XFx0OztcXG4rXFx0XFxcInByaW9fZndkXFxcIilcXG4rXFx0XFx0aWYgWyBcXFwiJHBjM1xcXCIgLWVxIDAgXSB8fCBbIFxcXCIkcGMwXFxcIiAtZ3QgMCBdOyB0aGVuXFxuK1xcdFxcdFxcdGVjaG8gXFxcIiRmYWlsbXNnIHByaW8zIFxcdTAwM2UgMCwgcHJpbzAgPT0gMCwgYnV0IGdvdCAkcGMzLCRwYzBcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0XFx0cmV0PTFcXG4rXFx0XFx0XFx0b2s9MFxcbitcXHRcXHRmaVxcbitcXHRcXHQ7O1xcbitcXHQqKVxcbitcXHRcXHRlY2hvIFxcXCIkZmFpbG1zZzogVW5rbm93biBwcmlvcml0eSBjaGVja1xcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRvaz0wXFxuK1xcdGVzYWNcXG4rXFxuK1xcdGlmIFsgXFxcIiRva1xcXCIgLWVxIDEgXSA7dGhlblxcbitcXHRcXHRlY2hvIFxcXCJQQVNTOiAkd2hhdDogcHJpb3JpdHkgcGFja2V0IGNvdW50ZXJzIG1hdGNoXFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbit0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSgpXFxuK3tcXG4rXFx0bG9jYWwgcG10dT1cXFwiJDNcXFwiXFxuK1xcdGxvY2FsIHByb3RvPVxcXCIkNFxcXCJcXG4rXFx0bG9jYWwgZHN0aXA9XFxcIiQ1XFxcIlxcbitcXHRsb2NhbCBkc3Rwb3J0PVxcXCIkNlxcXCJcXG4rXFx0bG9jYWwgbHJldD0wXFxuK1xcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1mIC0gXFx1MDAzY1xcdTAwM2NFT0ZcXG4rdGFibGUgbmV0ZGV2IHByaW9jaGVjayB7XFxuKyAgIGNvdW50ZXIgcHJpbzAgeyB9XFxuKyAgIGNvdW50ZXIgcHJpbzMgeyB9XFxuK1xcbisgICBjaGFpbiBlZ3Jlc3MwIHtcXG4rICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlIFxcXCJ2ZXRoMFxcXCIgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxcbisgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSBcXFwicHJpbzNcXFwiXFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcXFwicHJpbzBcXFwiXFxuKyAgIH1cXG4rXFxuKyAgIGNoYWluIGVncmVzczEge1xcbisgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgXFxcInZldGgxXFxcIiBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0XFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFxcXCJwcmlvM1xcXCJcXG4rICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lIFxcXCJwcmlvMFxcXCJcXG4rICAgfVxcbit9XFxuK0VPRlxcbitcXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogQ291bGQgbm90IGxvYWQgbmV0ZGV2OmVncmVzcyBmb3IgdmV0aDAgYW5kIHZldGgxXFxcIlxcbitcXHRcXHRyZXR1cm4gMFxcbitcXHRmaVxcbitcXG4rXFx0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFxcXCIkMVxcXCIgXFxcIiQyXFxcIiBcXFwiJHBtdHVcXFwiIFxcXCIkcHJvdG9cXFwiIFxcXCIkZHN0aXBcXFwiIFxcXCIkZHN0cG9ydFxcXCI7IHRoZW5cXG4rXFx0XFx0bHJldD0xXFxuK1xcdGZpXFxuK1xcdGNoZWNrX3ByaW9yaXR5IFxcXCJwcmlvX25vbmVcXFwiIFxcXCIkcG10dVxcXCJcXG4rXFxuK1xcdCMgVGhlIGZsb3cgc3RvcmVzIHRoZSBwcmlvcml0eSBzZXQgYmVmb3JlIGl0IGlzIGFkZGVkLCBzbyB0aGUgcGFja2V0c1xcbitcXHQjIHRoZSBmbG93dGFibGUgZm9yd2FyZHMgbGVhdmUgd2l0aCBpdCB0b28sIGluIGJvdGggZGlyZWN0aW9ucy5cXG4raXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtZiAtIFxcdTAwM2NcXHUwMDNjRU9GXFxuK3RhYmxlIGluZXQgcHJpb3NldCB7XFxuKyAgIGNoYWluIGZvcndhcmQge1xcbisgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHRcXG4rICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozXFxuKyAgIH1cXG4rfVxcbitFT0ZcXG4rXFx0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFxcXCIkMVxcXCIgXFxcIiQyXFxcIiBcXFwiJHBtdHVcXFwiIFxcXCIkcHJvdG9cXFwiIFxcXCIkZHN0aXBcXFwiIFxcXCIkZHN0cG9ydFxcXCI7IHRoZW5cXG4rXFx0XFx0bHJldD0xXFxuK1xcdGZpXFxuK1xcdGNoZWNrX3ByaW9yaXR5IFxcXCJwcmlvX2Z3ZFxcXCIgXFxcIiRwbXR1XFxcIlxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgZGVsZXRlIHRhYmxlIG5ldGRldiBwcmlvY2hlY2tcXG4rXFxuK1xcdHJldHVybiAkbHJldFxcbit9XFxuK1xcbiB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCgpXFxuIHtcXG4gXFx0bG9jYWwgbnNhPVxcXCIkMVxcXCJcXG5AQCAtNTE2LDYgKzYxNiwxMSBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X3ByaW9yaXR5IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMCA2IFxcXCJbZGVhZDoyOjo5OV1cXFwiIDEyMzQ1OyB0aGVuXFxuK1xcdGVjaG8gXFxcIkZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdHJldD0xXFxuK2ZpXFxuK1xcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIG5zMSBhbmRcXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cXG4gIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuXFxuQEAgLTU3Miw2ICs2NzcsMTEgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9kc2NwIFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlblxcbiBcXHRleGl0IDBcXG4gZmlcXG4gXFxuK2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXFxcIiRuczFcXFwiIFxcXCIkbnMyXFxcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXFxuK1xcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSBhbmQgcG10dSBkaXNjb3ZlcnlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0cmV0PTFcXG4rZmlcXG4rXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXFx1MDAzZS9kZXYvbnVsbFxcbiBcXG4gaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgXFxcIlxcXCI7IHRoZW5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MTkuODczMzk3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI3MTczMDI2NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25cIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0XCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMTM0MjljMTdjOWVkYWE2ZmQ1NzFlNzdiYTZhMmIwMjkwZTkwZjA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozNjoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcbmluZGV4IGQ3NTdjMjFjMTBmMmQuLjU4NDRhYjE5YWVjNjYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcbkBAIC03MSw3ICs3MSw5IEBAIGZvcndhcmRpbmcgcGF0aCBpbmNsdWRpbmcgdGhlIE5ldGZpbHRlciBob29rcyBhbmQgdGhlIGZsb3d0YWJsZSBmYXN0cGF0aCBieXBhc3MuXG4gXG4gVGhlIGZsb3d0YWJsZSBlbnRyeSBhbHNvIHN0b3JlcyB0aGUgTkFUIGNvbmZpZ3VyYXRpb24sIHNvIGFsbCBwYWNrZXRzIGFyZVxuIG1hbmdsZWQgYWNjb3JkaW5nIHRvIHRoZSBOQVQgcG9saWN5IHRoYXQgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGNsYXNzaWMgSVBcbi1mb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBGcmFnbWVudGVkXG4rZm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3dcbithbHNvIHN0b3JlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIHBhY2tldCB0aGF0IGNyZWF0ZWQgaXQsIHNvIGEgcHJpb3JpdHkgc2V0IGJlZm9yZVxuK2BgZmxvdyBhZGRgYCBhcHBsaWVzIHRvIHRoZSBwYWNrZXRzIHRoYXQgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcy4gRnJhZ21lbnRlZFxuIHRyYWZmaWMgaXMgcGFzc2VkIHVwIHRvIGZvbGxvdyB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggZ2l2ZW4gdGhhdCB0aGVcbiB0cmFuc3BvcnQgaGVhZGVyIGlzIG1pc3NpbmcsIGluIHRoaXMgY2FzZSwgZmxvd3RhYmxlIGxvb2t1cHMgYXJlIG5vdCBwb3NzaWJsZS5cbiBUQ1AgUlNUIGFuZCBGSU4gcGFja2V0cyBhcmUgYWxzbyBwYXNzZWQgdXAgdG8gdGhlIGNsYXNzaWMgSVAgZm9yd2FyZGluZyBwYXRoIHRvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IDkyNjExODAyODAxZWEuLjJhZmNlNzZhZDEzMTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTE2MSw2ICsxMTYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4gXHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggOTliMjhhYWE3Y2M0Ny4uNGVlOTllOGU0YTM0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuQEAgLTM3OCw2ICszNzgsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4gXHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjIzMjE4YzhjYmMzZGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMjAyLDYgKzIwMiw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWQge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdFx0ZmxhZ3M7XG4gXHR1MTZcdFx0XHRcdFx0dHlwZTtcbiBcdHUzMlx0XHRcdFx0XHR0aW1lb3V0O1xuK1x0dTMyXHRcdFx0XHRcdHByaW9yaXR5O1xuIFx0c3RydWN0IHJjdV9oZWFkXHRcdFx0XHRyY3VfaGVhZDtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IGM4YzI5YTlhMTY4NDQuLmM4NWUyZDYwOGMzMjkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbkBAIC01MDksNiArNTA5LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aXBfZGVjcmVhc2VfdHRsKGlwaCk7XG4gXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gXG4rXHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbitcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbitcbiBcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiBcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gXG5AQCAtMTEwNCw2ICsxMTA3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcDZoLVx1MDAzZWhvcF9saW1pdC0tO1xuIFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuIFxuK1x0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpXG4rXHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4rXG4gXHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXG4gXHRcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXHUwMDNlY3QsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXIsIHNrYi1cdTAwM2VsZW4pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5pbmRleCA4MDFhM2RkOWNlZWEzLi5jYWFhZGZmYzI1NjNlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuQEAgLTY5Niw2ICs2OTYsMTcgQEAgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHQgICAgZmxvd19vZmZsb2FkX2V0aF9kc3QobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtMTtcbiBcbitcdGlmIChmbG93LVx1MDAzZXByaW9yaXR5KSB7XG4rXHRcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XG4rXG4rXHRcdGVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xuK1x0XHRpZiAoIWVudHJ5KVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTtcbitcdFx0ZW50cnktXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuK1x0fVxuK1xuIFx0dHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVwbGUtXHUwMDNlZW5jYXBfbnVtOyBpKyspIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi5jYTkxOTI0YjRkZTNiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtMTE3LDYgKzExNywxMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuK1x0LyogVGhlIHBhY2tldHMgdGhlIGZsb3cgZm9yd2FyZHMgaW4gaXRzIHBsYWNlIGJ5cGFzcyB0aGUgcnVsZXMgdGhhdFxuK1x0ICogY2xhc3NpZmllZCB0aGlzIG9uZTsgY2FycnkgdGhlIHJlc3VsdCB3aXRoIHRoZSBmbG93LlxuK1x0ICovXG4rXHRmbG93LVx1MDAzZXByaW9yaXR5ID0gcGt0LVx1MDAzZXNrYi1cdTAwM2Vwcmlvcml0eTtcbitcbiBcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLmFiNzczMjM1OGUxZDggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTQ1OCw2ICs0NTgsMTA2IEBAIGZpXG4gXHRjaGVja19kc2NwIFwiZHNjcF9md2RcIiBcIiRwbXR1XCJcbiB9XG4gXG4rY2hlY2tfcHJpb3JpdHkoKVxuK3tcbitcdGxvY2FsIHdoYXQ9JDFcbitcdGxvY2FsIHBtdHU9XCIkMlwiXG4rXHRsb2NhbCBvaz0xXG4rXG4rXHRsb2NhbCBjb3VudGVyXG4rXHRjb3VudGVyPSQoaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXIgbmV0ZGV2IHByaW9jaGVjayBwcmlvMyB8IGdyZXAgcGFja2V0cylcbitcdGxvY2FsIHBjMz0ke2NvdW50ZXIlKmJ5dGVzKn1cbitcdHBjMz0ke3BjMyMqcGFja2V0c31cbitcbitcdGNvdW50ZXI9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8wIHwgZ3JlcCBwYWNrZXRzKVxuK1x0bG9jYWwgcGMwPSR7Y291bnRlciUqYnl0ZXMqfVxuK1x0cGMwPSR7cGMwIypwYWNrZXRzfVxuK1xuK1x0bG9jYWwgZmFpbG1zZz1cIkZBSUw6IHBtdHUgJHBtdHU6ICR3aGF0IGNvdW50ZXJzIGRvIG5vdCBtYXRjaCwgZXhwZWN0ZWRcIlxuK1xuK1x0Y2FzZSBcIiR3aGF0XCIgaW5cbitcdFwicHJpb19ub25lXCIpXG4rXHRcdGlmIFsgXCIkcGMzXCIgLWd0IDAgXSB8fCBbIFwiJHBjMFwiIC1lcSAwIF07IHRoZW5cbitcdFx0XHRlY2hvIFwiJGZhaWxtc2cgcHJpbzMgPT0gMCwgcHJpbzAgXHUwMDNlIDAsIGJ1dCBnb3QgJHBjMywkcGMwXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0XHRyZXQ9MVxuK1x0XHRcdG9rPTBcbitcdFx0ZmlcbitcdFx0OztcbitcdFwicHJpb19md2RcIilcbitcdFx0aWYgWyBcIiRwYzNcIiAtZXEgMCBdIHx8IFsgXCIkcGMwXCIgLWd0IDAgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCIkZmFpbG1zZyBwcmlvMyBcdTAwM2UgMCwgcHJpbzAgPT0gMCwgYnV0IGdvdCAkcGMzLCRwYzBcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0b2s9MFxuK1x0XHRmaVxuK1x0XHQ7O1xuK1x0KilcbitcdFx0ZWNobyBcIiRmYWlsbXNnOiBVbmtub3duIHByaW9yaXR5IGNoZWNrXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0b2s9MFxuK1x0ZXNhY1xuK1xuK1x0aWYgWyBcIiRva1wiIC1lcSAxIF0gO3RoZW5cbitcdFx0ZWNobyBcIlBBU1M6ICR3aGF0OiBwcmlvcml0eSBwYWNrZXQgY291bnRlcnMgbWF0Y2hcIlxuK1x0Zmlcbit9XG4rXG4rdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkoKVxuK3tcbitcdGxvY2FsIHBtdHU9XCIkM1wiXG4rXHRsb2NhbCBwcm90bz1cIiQ0XCJcbitcdGxvY2FsIGRzdGlwPVwiJDVcIlxuK1x0bG9jYWwgZHN0cG9ydD1cIiQ2XCJcbitcdGxvY2FsIGxyZXQ9MFxuK1xuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtZiAtIFx1MDAzY1x1MDAzY0VPRlxuK3RhYmxlIG5ldGRldiBwcmlvY2hlY2sge1xuKyAgIGNvdW50ZXIgcHJpbzAgeyB9XG4rICAgY291bnRlciBwcmlvMyB7IH1cbitcbisgICBjaGFpbiBlZ3Jlc3MwIHtcbisgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgXCJ2ZXRoMFwiIHByaW9yaXR5IDA7IHBvbGljeSBhY2NlcHRcbisgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSBcInByaW8zXCJcbisgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgbm9uZSBjb3VudGVyIG5hbWUgXCJwcmlvMFwiXG4rICAgfVxuK1xuKyAgIGNoYWluIGVncmVzczEge1xuKyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSBcInZldGgxXCIgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFwicHJpbzNcIlxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcInByaW8wXCJcbisgICB9XG4rfVxuK0VPRlxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBDb3VsZCBub3QgbG9hZCBuZXRkZXY6ZWdyZXNzIGZvciB2ZXRoMCBhbmQgdmV0aDFcIlxuK1x0XHRyZXR1cm4gMFxuK1x0ZmlcbitcbitcdGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19pcCBcIiQxXCIgXCIkMlwiIFwiJHBtdHVcIiBcIiRwcm90b1wiIFwiJGRzdGlwXCIgXCIkZHN0cG9ydFwiOyB0aGVuXG4rXHRcdGxyZXQ9MVxuK1x0ZmlcbitcdGNoZWNrX3ByaW9yaXR5IFwicHJpb19ub25lXCIgXCIkcG10dVwiXG4rXG4rXHQjIFRoZSBmbG93IHN0b3JlcyB0aGUgcHJpb3JpdHkgc2V0IGJlZm9yZSBpdCBpcyBhZGRlZCwgc28gdGhlIHBhY2tldHNcbitcdCMgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcyBsZWF2ZSB3aXRoIGl0IHRvbywgaW4gYm90aCBkaXJlY3Rpb25zLlxuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtZiAtIFx1MDAzY1x1MDAzY0VPRlxuK3RhYmxlIGluZXQgcHJpb3NldCB7XG4rICAgY2hhaW4gZm9yd2FyZCB7XG4rICAgICAgdHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IC0xOyBwb2xpY3kgYWNjZXB0XG4rICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozXG4rICAgfVxuK31cbitFT0ZcbitcdGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19pcCBcIiQxXCIgXCIkMlwiIFwiJHBtdHVcIiBcIiRwcm90b1wiIFwiJGRzdGlwXCIgXCIkZHN0cG9ydFwiOyB0aGVuXG4rXHRcdGxyZXQ9MVxuK1x0ZmlcbitcdGNoZWNrX3ByaW9yaXR5IFwicHJpb19md2RcIiBcIiRwbXR1XCJcbitcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0XG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgZGVsZXRlIHRhYmxlIG5ldGRldiBwcmlvY2hlY2tcbitcbitcdHJldHVybiAkbHJldFxuK31cbitcbiB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCgpXG4ge1xuIFx0bG9jYWwgbnNhPVwiJDFcIlxuQEAgLTUxNiw2ICs2MTYsMTEgQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuK2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXCIkbnMxXCIgXCIkbnMyXCIgMCA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdGVjaG8gXCJGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRyZXQ9MVxuK2ZpXG4rXG4gIyBkZWxldGUgZGVmYXVsdCByb3V0ZSwgaS5lLiBuczIgd29uJ3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cbkBAIC01NzIsNiArNjc3LDExIEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfZHNjcCBcIiRuczFcIiBcIiRuczJcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXG4gXHRleGl0IDBcbiBmaVxuIFxuK2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXCIkbnMxXCIgXCIkbnMyXCIgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlblxuK1x0ZWNobyBcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSBhbmQgcG10dSBkaXNjb3ZlcnlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0cmV0PTFcbitmaVxuK1xuIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbiBcbiBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFwiJG5zMVwiIFwiJG5zMlwiIDEgXCJcIjsgdGhlblxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MTkuODczMzk4NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTI3Mjg0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQXNzZXNzbWVudDogTmV0ZmlsdGVyIEZsb3d0YWJsZSBQcmlvcml0eSBIYW5kbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCdzIHdvcnRoIG91ciBmdXp6aW5nIGVmZm9ydHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcywgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIG5ldGZpbHRlciBmbG93dGFibGUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFja2V0IHByaW9yaXR5IGhhbmRsaW5nLiBXZSd2ZSBnb3Q6XG5cbjEuICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgaW4gYG5mX2Zsb3d0YWJsZS5yc3RgLlxuMi4gIERyaXZlciBhZGRpdGlvbnMgKGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgKSB0aGF0IGltcGxlbWVudCBgRkxPV19BQ1RJT05fUFJJT1JJVFlgLiBUaGlzIHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIHNwZWNpZmljIGhhcmR3YXJlLCBwcm9iYWJseSBjb25jZXJuaW5nIHRyYWZmaWMgcHJpb3JpdGl6YXRpb24uXG4zLiAgSGVhZGVyIGNoYW5nZXMgKGBuZl9mbG93X3RhYmxlLmhgKSB3aGVyZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgbm93IGluY2x1ZGVzIGEgYHUzMiBwcmlvcml0eWAgZmllbGQuXG40LiAgQ29kZSBtb2RpZmljYXRpb25zIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCB3aGVyZSBwcmlvcml0eSBpcyBzZXQgb24gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpZiBpdCBleGlzdHMuXG41LiAgTW9kaWZpY2F0aW9ucyB0byBob3cgcHJpb3JpdHkgaXMgaGFuZGxlZCBpbiBmbG93IHJ1bGUgcm91dGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC5cbjYuICBBbmQgZmluYWxseSwgc2V0dGluZyB0aGUgcHJpb3JpdHkgaW4gYG5mdF9mbG93X29mZmxvYWQuY2AgYmFzZWQgb24gdGhlIHBhY2tldCdzIGBza2JgIHByaW9yaXR5LlxuNy4gIEEgbmV3IHNlbGYtdGVzdCBzY3JpcHQsIHdoaWNoIGlzIGEgZ29vZCBzaWduIGJ1dCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gaXQncyBjb21wbGV0ZS5cblxuU28sIHdoZXJlIGlzIHRoaXMgY29kZSByZXNpZGluZz8gSXQgbG9va3MgbGlrZSB3ZSdyZSBzcXVhcmVseSBpbiB0aGUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGFuZCBuZnRhYmxlcyBmbG93IG9mZmxvYWQuIFRoZXNlIGFyZSBrZXkgYXJlYXMsIHdoaWNoIGFyZSBhbG1vc3QgY2VydGFpbmx5IHJ1bm5pbmcgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc2V0dXBzIOKAkyB0aGluayBRRU1VLCB2aXJ0aW8sIHRhcC92ZXRoIGludGVyZmFjZXMsIG5hbWVzcGFjZXMsIGFuZCwgb2YgY291cnNlLCBuZnRhYmxlcy5cblxuKipNeSBFeHBlcnQgT3BpbmlvbjoqKlxuXG5HaXZlbiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIgY29kZSwgcGFja2V0IGZvcndhcmRpbmcsIGZsb3d0YWJsZSBvZmZsb2FkLCBhbmQgbmZ0YWJsZXMgZXZhbHVhdGlvbiwgX2Fic29sdXRlbHlfLCB0aGlzIHdhcnJhbnRzIGEgZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBpcyBzaWduaWZpY2FudC4gVGhlIGludHJvZHVjdGlvbiBvZiBwcmlvcml0eSBoYW5kbGluZyBjb3VsZCBhbHNvIHJldmVhbCBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBkaWZmZXJlbnQgdHJhZmZpYyBmbG93cy4gTm93LCBsZXQncyBxdWlja2x5IGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlc2UgY2hhbmdlcywgSSdsbCB1c2UgYGdyZXBwZXJgIG9yIHNjYW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCByZWZpbmUgdGhlIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MjcuNDAwNjg2MDI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTgzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTUwND1jb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDU6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDYtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwNTpcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjM6XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyNC1cXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM5PW9iai0kKENPTkZJR19ORlRfRldEX05FVERFVilcXHQrPSBuZnRfZndkX25ldGRldi5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcXHQrPSBuZl9mbG93X3RhYmxlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0My1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ2Om5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICs9IG5mX2Zsb3dfdGFibGVfcHJvY2ZzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NzppZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ4LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgKz0gbmZfZmxvd190YWJsZV9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ5OmVsc2UgaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSkseSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1MC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBuZl9mbG93X3RhYmxlX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTYyND12b2lkIG5mX2Nvbm50cmFja190Y3BfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY1Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxNjU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NTgtXFx0dG4tXFx1MDAzZW9mZmxvYWRfdGltZW91dCA9IDMwICogSFo7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz0xOTU9dm9pZCBuZl9jb25udHJhY2tfdWRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzoyMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMtMjA0LVxcdHVuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4NT1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjA5LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9VTkFDSyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjEwOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MTEtXFx0TkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQUQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjE4LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjIwLVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FELFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6Nzg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6ODM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz05MzU9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTY1LVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXS5kYXRhID0gXFx1MDAyNnRuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTAwMz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMwLVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU1dLmRhdGEgPSBcXHUwMDI2dW4tXFx1MDAzZXRpbWVvdXRzW1VEUF9DVF9SRVBMSUVEXTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMi1cXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0uZGF0YSA9IFxcdTAwMjZ1bi1cXHUwMDNlb2ZmbG9hZF90aW1lb3V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDQ4PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDU3LVxcdFxcdFxcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNTg6XFx0XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0RFQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA1OS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2MS1cXHRcXHRcXHRmbG93X29mZmxvYWRfd29ya19kZWwob2ZmbG9hZCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDYyOlxcdFxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3FfZGVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjUtXFx0XFx0XFx0Zmxvd19vZmZsb2FkX3dvcmtfc3RhdHMob2ZmbG9hZCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY2OlxcdFxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3Ffc3RhdHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3Nj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODAtXFx0aWYgKG9mZmxvYWQtXFx1MDAzZWNtZCA9PSBGTE9XX0NMU19SRVBMQUNFKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDgxOlxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODItXFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgzLVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODQ6XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9kZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4NS1cXHRcXHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2V3b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODYtXFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODc6XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9zdGF0cyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDg4LVxcdFxcdHF1ZXVlX3dvcmsobmZfZmxvd19vZmZsb2FkX3N0YXRzX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTg0PXN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODgtXFx0XFx0X19iZTE2XFx0cHJvdG87XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo4OTpcXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTkwLVxcdHU4IG51bV9lbmNhcHM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTEwND1zdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xMzktXFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE0MDpcXHRcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbnVtX2VuY2FwcyBcXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE0MS1cXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE2Ni1cXHRcXHRcXHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTY3OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIFxcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMTY4LVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MjcuNDUwNjcxOTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxOTg4MjAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gTXkgcGxhbiBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHNlY3Rpb25zIG9mIHRoZSBmaWxlLiBJJ20gdGhpbmtpbmcgbGluZXMgNTAwLTUxNSBhbmQgNzAwLTcyNSBhcmUgcHJvYmFibHkga2V5IGFyZWFzIHRvIGV4YW1pbmUuIFRoZXNlIHNlY3Rpb25zIGxpa2VseSBjb250YWluIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGlvbnNoaXBzIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEJ5IHBpbnBvaW50aW5nIHRoZXNlIHJhbmdlcywgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGhpbiB0aGlzIE5ldGZpbHRlciBjb25maWd1cmF0aW9uIGNvbnRleHQuIEl0J3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhcHByb2FjaCB0aGlzIHNwZWNpZmljIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjI5LjI3MDU1NjUyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdGRlZmF1bHQgblxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDUwMzpcXHRcXG4gNTA0OlxcdGNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxuIDUwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDUwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXFxcIlxcbiA1MDc6XFx0XFx0aGVscFxcbiA1MDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiZmxvd19vZmZsb2FkXFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG4gNTA5OlxcdFxcdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cXG4gNTEwOlxcdFxcbiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuIDUyMDpcXHRjb25maWcgTkZUX0xPR1xcbiA1MjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbG9nIG1vZHVsZVxcXCJcXG4gNTIyOlxcdFxcdGhlbHBcXG4gNTIzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImxvZ1xcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvIGxvZ1xcbiA1MjQ6XFx0XFx0ICBwYWNrZXRzIG1hdGNoaW5nIHNvbWUgY3JpdGVyaWEuXFxuIDUyNTpcXHRcXG4gNTI2OlxcdGNvbmZpZyBORlRfTElNSVRcXG4gNTI3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGxpbWl0IG1vZHVsZVxcXCJcXG4gNTI4OlxcdFxcdGhlbHBcXG4gNTI5OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImxpbWl0XFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MjkuMjcwNjYyNDk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2OTc3MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJ2xsIHdhbnQgdG8gemVybyBpbiBvbiBib3RoIGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAuIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbnRlcm5ldC1zcGVjaWZpYyBvcHRpb25zLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgaXMga2V5IHRvIGRpYWdub3NpbmcsIHR3ZWFraW5nLCBvciBpbnRlZ3JhdGluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdGllcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdGFibGVzIGFyZSBlbmFibGVkLCBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGRlZmF1bHQgc2V0dGluZ3MuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcy4gR290dGEgZ2V0IHRoZSBsb3ctZG93biBvbiB0aGUgYmFzaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzEuNjQwNDM3NTIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHRcXG4gNzAxOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG4gNzA0OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbiA3MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzEwOlxcdFxcbiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcyMDpcXHRcXG4gNzIxOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbiA3MjI6XFx0XFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuIDcyMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzI0OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiA3MjU6XFx0XFx0aGVscFxcbiA3MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG4gNzI3OlxcdFxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbiA3Mjg6XFx0XFxuIDcyOTpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcXG4gNzMwOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgWHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgaXBfdGFibGVzKVxcXCJcXG4gNzMxOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiA3MzI6XFx0XFx0aGVscFxcbiA3MzM6XFx0XFx0ICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgdG8gdXNlIGFueSBvZiBpcF90YWJsZXMsXFxuIDczNDpcXHRcXHQgIGlwNl90YWJsZXMgb3IgYXJwX3RhYmxlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzEuNjQwNTM3NjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAwNDQyMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgTmV0ZmlsdGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCdzIGJlZW4gdG91Y2hlZCByZWNlbnRseSBpbiB0aGUgTmV0ZmlsdGVyIHJlYWxtLiBBaGEsIEkgc2VlIHR3byBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEludGVyZXN0aW5nLiBOb3csIHRoZSBzeW1ib2xzIGludm9sdmVkIGFyZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zPyBBcmUgdGhleSBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXM/IEFyZSB0aGV5IHN0YXRpYyBhbmQgaW50ZXJuYWwgdG8gdGhhdCBmaWxlPyBPciwgZXZlbiBtb3JlIGNyaXRpY2FsbHksIHdoZXJlIGFuZCBob3cgYXJlIHRoZXkgKmNhbGxlZCo/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aHMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgZmxvdyB0YWJsZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjMzLjk0MDk4NjA1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5OTU3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmR8bmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04Njc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4ODc6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4OC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMDE9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNjYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA2NzpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIxOTpcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjIwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjozMy45OTA5OTAxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NDAyMjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3b3Jrcywgc28gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHJvdXRpbmcgZGVjaXNpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgb2ZmbG9hZCBwcm9jZXNzLlxuXG5Ob3csIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gIGlzIHV0aWxpemVkLCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxzLiBXaGVyZSBleGFjdGx5IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgYnJvYWRlciBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGFyY2hpdGVjdHVyZT8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIHdoeSBpdCdzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzYuMDc1MDE1NTY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY1ODg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjgyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY4MzpuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4NC1cXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc1ND1pbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzU4OlxcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1OS1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc4Mz1pbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Nzg3OlxcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4OC1cXHRcXHRyZXR1cm4gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjM2LjEyNjY3NjczOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODUzMDIwODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GVGFibGVzIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGxpdmVzLiBUaGUga2V5IGZ1bmN0aW9uIEkgd2FudCB0byB1bmRlcnN0YW5kIGlzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaW1lIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBzdGFydCBieSBzZWVpbmcgcHJlY2lzZWx5IHdoZXJlIHRoZSBldmFsdWF0aW9uIGlzIGludm9rZWQuIExldCdzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBOZXRmaWx0ZXIgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgcmVhbGx5IGhlbHAgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjM3Ljk3OTY5OTQzOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2OTkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTQxPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9jdF90Y3Aoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNDktXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NTA6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01MS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZmxvd19vZmZsb2FkX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIyNS1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9mbG93X29mZmxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjY6XFx0LmV2YWxcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjctXFx0LmluaXRcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzguMDMxNDAwNTM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5NDAyOTA4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FudGVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29udGV4dCwgc28gSSBjaGVja2VkIGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgIOKAkyBqdXN0IGNvbmZpcm1pbmcgdGhleSdyZSBldGhlcm5ldCBkcml2ZXJzIGZvciBBaXJvaGEgYW5kIE1lZGlhVGVrIFNvQ3MsIHJlc3BlY3RpdmVseS4gVGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIGJlIHdpdGhpbiBgbmV0L25ldGZpbHRlcmAsIHNwZWNpZmljYWxseSBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLlxuXG5JJ2xsIGxpc3Qgb3V0IHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0YCwgYW5kIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NmAuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRob3NlIGZpbGVzLiBJbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFyZSBzdGF0aWMgYW5kIGFyZSBjYWxsZWQgYnkgdGhlIHJlc3BlY3RpdmUgaG9vayBmdW5jdGlvbnMuIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGFsc28gc3RhdGljLCBpbnZva2VkIHRocm91Z2ggYG5mdF9mbG93X29mZmxvYWRfb3BzLmV2YWxgLiAgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gIGlzIHN0YXRpYyBhbmQgdXNlZCBieSBib3RoIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NGAgYW5kIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NmAuXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UncmUgbG9va2luZyBhdCBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfSU5HUkVTU2AuIExldCdzIGNvbmZpcm0gdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBjb3JyZWN0bHkgZGVwZW5kZW50LiBDaGVja2luZyB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYE5GX0ZMT1dfVEFCTEVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gYE5GVF9GTE9XX09GRkxPQURgIGRlcGVuZHMgb24gYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZGVwZW5kcyBvbiBgTkZfRkxPV19UQUJMRWAuIFdlIGtub3cgYE5FVEZJTFRFUl9JTkdSRVNTYCBkZXBlbmRzIG9uIGBORVRGSUxURVJgIHdoaWNoIGlzIHN0YW5kYXJkLCBzbyB3ZSdyZSBjb3ZlcmVkIHdpdGggYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLCBgTkZfVEFCTEVTYCwgYW5kIGBORl9DT05OVFJBQ0tgLlxuXG5UbyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBsZXQncyBkbyBhIHF1aWNrIGRpZmYuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiwgdGhlIGRyaXZlciBmaWxlcyBJIGFscmVhZHkgc2F3LCBhIG5ldyBgcHJpb3JpdHlgIGZpZWxkIGluIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBpbiBgbmZfZmxvd190YWJsZS5oYCwgYW5kLCBpbXBvcnRhbnRseSwgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBgbmV0L25ldGZpbHRlcmAgZmlsZXMgd2hpY2ggc2V0L3BvcHVsYXRlIHRoZSBgc2tiLVx1MDAzZXByaW9yaXR5YCBkdXJpbmcgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nLCBvciByZWNvcmQgYW5kIHNldCBwcmlvcml0eSB2YWx1ZXMgaW50byB0aGUgZmxvdyBkYXRhLCBhbmQgYWRkcyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgLiBQbHVzLCB0aGVyZSdzIGEgbmV3IHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hgLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgaG93IHBhY2tldCBwcmlvcml0eSBpcyBoYW5kbGVkIHdpdGhpbiBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMsIGVuY29tcGFzc2luZyBib3RoIHNvZnR3YXJlIGZhc3RwYXRoIGFuZCBmbG93IG9mZmxvYWRpbmcuIFRoYXQgbWVhbnMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhcmUgYWZmZWN0ZWQuXG5cbioqVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuKipcblxuSGVyZSdzIHRoZSBkYXRhIGZvciBgc2V0LXJlc3VsdHNgOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYFxuKiAgIGBSZWFzb25pbmdgOiBNb2RpZmllcyBuZXRmaWx0ZXIgZmxvd3RhYmxlIGFuZCBuZnRhYmxlcyBmbG93IG9mZmxvYWQgdG8gcmVjb3JkIGFuZCByZXN0b3JlIGBza2JgIHByaW9yaXR5IGFjcm9zcyBmYXN0cGF0aCBhbmQgaGFyZHdhcmUgb2ZmbG9hZCBydWxlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0YCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2YFxuKiAgIGBFbmFibGVDb25maWdzYDogYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLCBgTkZfVEFCTEVTYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJfSU5HUkVTU2BcblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjAwLCJPdXRwdXRUb2tlbnMiOjIzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6NDYuOTcxNjk0MzU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3MjczODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25cIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0XCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfZXZhbFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfaXB2NFwiLFxuICAgIFwibmZfZmxvd19ydWxlX3JvdXRlX2lwdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZCBsb2dpYyB0byBjYXB0dXJlIHBhY2tldCBwcmlvcml0eSBhbmQgcHJvcGFnYXRlIGl0IGR1cmluZyBzb2Z0d2FyZSBmbG93IHRhYmxlIGZvcndhcmRpbmcgKElQdjQvSVB2NikgYXMgd2VsbCBhcyBvZmZsb2FkIHJ1bGUgY29uc3RydWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIGZhc3RwYXRocyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGluIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjQ3LjA0NjQyNzgzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDA1NDQzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6NDcuMDQ2ODczNzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3NDA0OTkzMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGZsb3cgcHJpb3JpdHkgdHJhY2tpbmcgdG8gdGhlIE5ldGZpbHRlciBmbG93dGFibGUgZmFzdHBhdGggYW5kIG9mZmxvYWQgc3Vic3lzdGVtLiBcXG4tIFN0cnVjdCBgZmxvd19vZmZsb2FkYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIChgZmxvd19vZmZsb2FkX2FsbG9jYCksIHplcm9pbmcgYWxsIGZpZWxkcyBpbmNsdWRpbmcgdGhlIG5ldyBgcHJpb3JpdHlgIGZpZWxkLlxcbi0gVGhlIGBmbG93LVxcdTAwM2Vwcmlvcml0eWAgZmllbGQgaXMgYXNzaWduZWQgZnJvbSBgcGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cXHUwMDNlcHJpb3JpdHlgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggb3IgYWRkZWQgYXMgYSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGZsb3cgYWN0aW9uIGVudHJ5IGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC5cXG4tIEZsb3cgcnVsZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGZsb3dfcnVsZV9hbGxvY2AgdXNpbmcgYGt6YWxsb2NfZmxleGAsIGVuc3VyaW5nIGFsbCBhY3Rpb24gZW50cmllcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMxMzQyOWMxN2M5ZWRhYTZmZDU3MWU3N2JhNmEyYjAyOTBlOTBmMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEyOjM2OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdFxuaW5kZXggZDc1N2MyMWMxMGYyZC4uNTg0NGFiMTlhZWM2NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdFxuQEAgLTcxLDcgKzcxLDkgQEAgZm9yd2FyZGluZyBwYXRoIGluY2x1ZGluZyB0aGUgTmV0ZmlsdGVyIGhvb2tzIGFuZCB0aGUgZmxvd3RhYmxlIGZhc3RwYXRoIGJ5cGFzcy5cbiBcbiBUaGUgZmxvd3RhYmxlIGVudHJ5IGFsc28gc3RvcmVzIHRoZSBOQVQgY29uZmlndXJhdGlvbiwgc28gYWxsIHBhY2tldHMgYXJlXG4gbWFuZ2xlZCBhY2NvcmRpbmcgdG8gdGhlIE5BVCBwb2xpY3kgdGhhdCBpcyBzcGVjaWZpZWQgZnJvbSB0aGUgY2xhc3NpYyBJUFxuLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWRcbitmb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBUaGUgZmxvd1xuK2Fsc28gc3RvcmVzIHRoZSBwcmlvcml0eSBvZiB0aGUgcGFja2V0IHRoYXQgY3JlYXRlZCBpdCwgc28gYSBwcmlvcml0eSBzZXQgYmVmb3JlXG4rYGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkXG4gdHJhZmZpYyBpcyBwYXNzZWQgdXAgdG8gZm9sbG93IHRoZSBjbGFzc2ljIElQIGZvcndhcmRpbmcgcGF0aCBnaXZlbiB0aGF0IHRoZVxuIHRyYW5zcG9ydCBoZWFkZXIgaXMgbWlzc2luZywgaW4gdGhpcyBjYXNlLCBmbG93dGFibGUgbG9va3VwcyBhcmUgbm90IHBvc3NpYmxlLlxuIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggOTI2MTE4MDI4MDFlYS4uMmFmY2U3NmFkMTMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0xMTYxLDYgKzExNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbiBcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5pbmRleCA5OWIyOGFhYTdjYzQ3Li40ZWU5OWU4ZTRhMzRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5AQCAtMzc4LDYgKzM3OCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbiBcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggZjJlMjc3MWYxODhmNC4uMjMyMThjOGNiYzNkYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbkBAIC0yMDIsNiArMjAyLDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0XHRmbGFncztcbiBcdHUxNlx0XHRcdFx0XHR0eXBlO1xuIFx0dTMyXHRcdFx0XHRcdHRpbWVvdXQ7XG4rXHR1MzJcdFx0XHRcdFx0cHJpb3JpdHk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRcdHJjdV9oZWFkO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uYzg1ZTJkNjA4YzMyOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTUwOSw2ICs1MDksOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbitcdGlmIChmbG93LVx1MDAzZXByaW9yaXR5KVxuK1x0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuK1xuIFx0aWYgKGZsb3dfdGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxuIFx0XHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVx1MDAzZWN0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyLCBza2ItXHUwMDNlbGVuKTtcbiBcbkBAIC0xMTA0LDYgKzExMDcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdGlwNmgtXHUwMDNlaG9wX2xpbWl0LS07XG4gXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gXG4rXHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbitcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbitcbiBcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiBcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbmluZGV4IDgwMWEzZGQ5Y2VlYTMuLmNhYWFkZmZjMjU2M2UgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5AQCAtNjk2LDYgKzY5NiwxNyBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdCAgICBmbG93X29mZmxvYWRfZXRoX2RzdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuK1x0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpIHtcbitcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbitcbitcdFx0ZW50cnkgPSBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSk7XG4rXHRcdGlmICghZW50cnkpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1xuK1x0XHRlbnRyeS1cdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1BSSU9SSVRZO1xuK1x0XHRlbnRyeS1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4rXHR9XG4rXG4gXHR0dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0dXBsZS1cdTAwM2VlbmNhcF9udW07IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDMuLmNhOTE5MjRiNGRlM2IgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbkBAIC0xMTcsNiArMTE3LDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRpZiAodGNwaClcbiBcdFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XG4gXG4rXHQvKiBUaGUgcGFja2V0cyB0aGUgZmxvdyBmb3J3YXJkcyBpbiBpdHMgcGxhY2UgYnlwYXNzIHRoZSBydWxlcyB0aGF0XG4rXHQgKiBjbGFzc2lmaWVkIHRoaXMgb25lOyBjYXJyeSB0aGUgcmVzdWx0IHdpdGggdGhlIGZsb3cuXG4rXHQgKi9cbitcdGZsb3ctXHUwMDNlcHJpb3JpdHkgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5O1xuK1xuIFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuaW5kZXggNDQ5YzUxOGJkOTQ3ZC4uYWI3NzMyMzU4ZTFkOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5AQCAtNDU4LDYgKzQ1OCwxMDYgQEAgZmlcbiBcdGNoZWNrX2RzY3AgXCJkc2NwX2Z3ZFwiIFwiJHBtdHVcIlxuIH1cbiBcbitjaGVja19wcmlvcml0eSgpXG4re1xuK1x0bG9jYWwgd2hhdD0kMVxuK1x0bG9jYWwgcG10dT1cIiQyXCJcbitcdGxvY2FsIG9rPTFcbitcbitcdGxvY2FsIGNvdW50ZXJcbitcdGNvdW50ZXI9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8zIHwgZ3JlcCBwYWNrZXRzKVxuK1x0bG9jYWwgcGMzPSR7Y291bnRlciUqYnl0ZXMqfVxuK1x0cGMzPSR7cGMzIypwYWNrZXRzfVxuK1xuK1x0Y291bnRlcj0kKGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzAgfCBncmVwIHBhY2tldHMpXG4rXHRsb2NhbCBwYzA9JHtjb3VudGVyJSpieXRlcyp9XG4rXHRwYzA9JHtwYzAjKnBhY2tldHN9XG4rXG4rXHRsb2NhbCBmYWlsbXNnPVwiRkFJTDogcG10dSAkcG10dTogJHdoYXQgY291bnRlcnMgZG8gbm90IG1hdGNoLCBleHBlY3RlZFwiXG4rXG4rXHRjYXNlIFwiJHdoYXRcIiBpblxuK1x0XCJwcmlvX25vbmVcIilcbitcdFx0aWYgWyBcIiRwYzNcIiAtZ3QgMCBdIHx8IFsgXCIkcGMwXCIgLWVxIDAgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCIkZmFpbG1zZyBwcmlvMyA9PSAwLCBwcmlvMCBcdTAwM2UgMCwgYnV0IGdvdCAkcGMzLCRwYzBcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0b2s9MFxuK1x0XHRmaVxuK1x0XHQ7O1xuK1x0XCJwcmlvX2Z3ZFwiKVxuK1x0XHRpZiBbIFwiJHBjM1wiIC1lcSAwIF0gfHwgWyBcIiRwYzBcIiAtZ3QgMCBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIiRmYWlsbXNnIHByaW8zIFx1MDAzZSAwLCBwcmlvMCA9PSAwLCBidXQgZ290ICRwYzMsJHBjMFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRvaz0wXG4rXHRcdGZpXG4rXHRcdDs7XG4rXHQqKVxuK1x0XHRlY2hvIFwiJGZhaWxtc2c6IFVua25vd24gcHJpb3JpdHkgY2hlY2tcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRvaz0wXG4rXHRlc2FjXG4rXG4rXHRpZiBbIFwiJG9rXCIgLWVxIDEgXSA7dGhlblxuK1x0XHRlY2hvIFwiUEFTUzogJHdoYXQ6IHByaW9yaXR5IHBhY2tldCBjb3VudGVycyBtYXRjaFwiXG4rXHRmaVxuK31cbitcbit0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSgpXG4re1xuK1x0bG9jYWwgcG10dT1cIiQzXCJcbitcdGxvY2FsIHByb3RvPVwiJDRcIlxuK1x0bG9jYWwgZHN0aXA9XCIkNVwiXG4rXHRsb2NhbCBkc3Rwb3J0PVwiJDZcIlxuK1x0bG9jYWwgbHJldD0wXG4rXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjRU9GXG4rdGFibGUgbmV0ZGV2IHByaW9jaGVjayB7XG4rICAgY291bnRlciBwcmlvMCB7IH1cbisgICBjb3VudGVyIHByaW8zIHsgfVxuK1xuKyAgIGNoYWluIGVncmVzczAge1xuKyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSBcInZldGgwXCIgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFwicHJpbzNcIlxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcInByaW8wXCJcbisgICB9XG4rXG4rICAgY2hhaW4gZWdyZXNzMSB7XG4rICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlIFwidmV0aDFcIiBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0XG4rICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IDA6MyBjb3VudGVyIG5hbWUgXCJwcmlvM1wiXG4rICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lIFwicHJpbzBcIlxuKyAgIH1cbit9XG4rRU9GXG4rXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IENvdWxkIG5vdCBsb2FkIG5ldGRldjplZ3Jlc3MgZm9yIHZldGgwIGFuZCB2ZXRoMVwiXG4rXHRcdHJldHVybiAwXG4rXHRmaVxuK1xuK1x0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFwiJDFcIiBcIiQyXCIgXCIkcG10dVwiIFwiJHByb3RvXCIgXCIkZHN0aXBcIiBcIiRkc3Rwb3J0XCI7IHRoZW5cbitcdFx0bHJldD0xXG4rXHRmaVxuK1x0Y2hlY2tfcHJpb3JpdHkgXCJwcmlvX25vbmVcIiBcIiRwbXR1XCJcbitcbitcdCMgVGhlIGZsb3cgc3RvcmVzIHRoZSBwcmlvcml0eSBzZXQgYmVmb3JlIGl0IGlzIGFkZGVkLCBzbyB0aGUgcGFja2V0c1xuK1x0IyB0aGUgZmxvd3RhYmxlIGZvcndhcmRzIGxlYXZlIHdpdGggaXQgdG9vLCBpbiBib3RoIGRpcmVjdGlvbnMuXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjRU9GXG4rdGFibGUgaW5ldCBwcmlvc2V0IHtcbisgICBjaGFpbiBmb3J3YXJkIHtcbisgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHRcbisgICAgICBtZXRhIHByaW9yaXR5IHNldCAwOjNcbisgICB9XG4rfVxuK0VPRlxuK1x0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFwiJDFcIiBcIiQyXCIgXCIkcG10dVwiIFwiJHByb3RvXCIgXCIkZHN0aXBcIiBcIiRkc3Rwb3J0XCI7IHRoZW5cbitcdFx0bHJldD0xXG4rXHRmaVxuK1x0Y2hlY2tfcHJpb3JpdHkgXCJwcmlvX2Z3ZFwiIFwiJHBtdHVcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGRlbGV0ZSB0YWJsZSBpbmV0IHByaW9zZXRcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBkZWxldGUgdGFibGUgbmV0ZGV2IHByaW9jaGVja1xuK1xuK1x0cmV0dXJuICRscmV0XG4rfVxuK1xuIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0KClcbiB7XG4gXHRsb2NhbCBuc2E9XCIkMVwiXG5AQCAtNTE2LDYgKzYxNiwxMSBAQCBlbHNlXG4gXHRyZXQ9MVxuIGZpXG4gXG4raWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSBcIiRuczFcIiBcIiRuczJcIiAwIDYgXCJbZGVhZDoyOjo5OV1cIiAxMjM0NTsgdGhlblxuK1x0ZWNobyBcIkZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlXCIgMVx1MDAzZVx1MDAyNjJcbitcdHJldD0xXG4rZmlcbitcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIG5zMSBhbmRcbiAjIHdpbGwgZGVwZW5kIG9uIG5zMSBiZWluZyBtYXNxdWVyYWRlZCBpbiBuc3IxLlxuICMgZXhwZWN0IG5zMSBoYXMgbnNyMSBhZGRyZXNzLlxuQEAgLTU3Miw2ICs2NzcsMTEgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9kc2NwIFwiJG5zMVwiIFwiJG5zMlwiIDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbiBcdGV4aXQgMFxuIGZpXG4gXG4raWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSBcIiRuczFcIiBcIiRuczJcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlIGFuZCBwbXR1IGRpc2NvdmVyeVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRyZXQ9MVxuK2ZpXG4rXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuIFxuIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCIkbnMxXCIgXCIkbnMyXCIgMSBcIlwiOyB0aGVuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjo0Ny4wNDY4NzQ3MzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2ODQ4MDQ3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiB0aGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBMb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciBmbG93IHByaW9yaXR5IGZvcndhcmRpbmcsIHNvbWUgZHJpdmVyIGNvZGUgdGhhdCBzZWVtcyB0byAqaGFuZGxlKiBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGJ5IGVmZmVjdGl2ZWx5IGRvaW5nIG5vdGhpbmcgKHRoYXQncyBvZGQsIHdpbGwga2VlcCBhbiBleWUgb24gdGhhdCksIGFuZCB0aGVuLCBpbXBvcnRhbnRseSwgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgYW5kIGhvdyB0aGUgcHJpb3JpdHkgZmllbGQgaXMgaGFuZGxlZC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIG5ldyBgdTMyIHByaW9yaXR5O2AgZmllbGQgYWRkZWQgdG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBpbiBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaGAuIE9rYXksIHNvIHdlJ3JlIGFkZGluZyBwcmlvcml0eSB0byB0aGUgZmxvdyBvZmZsb2FkIHN0cnVjdHVyZSwgbWFrZXMgc2Vuc2UuIFRoZW4sIEkgc2VlIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCB1c2luZyBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgdG8gc2V0IHRoZSBgc2tiLVx1MDAzZXByaW9yaXR5YCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZyBpbiBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAuIElmIGBmbG93LVx1MDAzZXByaW9yaXR5YCBpcyBzZXQsIGEgYGZsb3dfYWN0aW9uX2VudHJ5YCBpcyBhc3NpZ25lZCwgYW5kIGl0cyBJRCBpcyBzZXQgdG8gYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCwgYW5kIHRoZSBlbnRyeSdzIHByaW9yaXR5IGlzIHNldCB3aXRoIHRoZSBmbG93J3MgcHJpb3JpdHkuIE9rYXksIHNldHRpbmcgcHJpb3JpdHkgYXMgYSBmbG93IGFjdGlvbiwgdGhhdOKAmXMgdXNlZnVsLlxuXG5GaW5hbGx5LCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2UncmUgY29weWluZyB0aGUgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW50byBgZmxvdy1cdTAwM2Vwcmlvcml0eWAuIEludGVyZXN0aW5nLCB3ZSdyZSB0YWtpbmcgdGhlIHBhY2tldCdzIHByaW9yaXR5IHRvIHBvcHVsYXRlIHRoZSBmbG93J3MgcHJpb3JpdHkuLi4gd2hpY2ggaXMgdGhlbiB1c2VkIGJ5IHRoZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgY29kZS5cblxuU28sIHRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRoaXMgYHN0cnVjdCBmbG93X29mZmxvYWRgIGlzICphbGxvY2F0ZWQqIGFuZCAqaW5pdGlhbGl6ZWQqLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdGhhdCB0aGVyZSBhcmUgYSBsb3Qgb2YgY29kZSBwYXRocyBoZXJlIHRoYXQgY2FuIGFzc2lnbiB0aGUgYHByaW9yaXR5YCBmaWVsZCBvZiB0aGUgYGZsb3dgIHN0cnVjdHVyZSBhbmQgdGhlbiBjb3B5IGl0IGFyb3VuZCwgYnV0IHdoYXQgYWJvdXQgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGZpZWxkIGlzICpmaXJzdCogc2V0PyBJIG5lZWQgdG8gdXNlIGdyZXBwZXIgKG9yIGVxdWl2YWxlbnQpIHRvIHNlYXJjaCBmb3IgYWxsb2NhdGlvbnMgb2YgdGhhdCBgZmxvd19vZmZsb2FkYCBzdHJ1Y3QsIG9yIHJlbGV2YW50IGFsbG9jIGFuZCBpbml0IGZ1bmN0aW9ucy4gSSdsbCBzZWFyY2ggZm9yIGBmbG93X29mZmxvYWRfYWxsb2NgIG9yIHNpbWlsYXIgbmFtZXMuIEkgbmVlZCB0byBrbm93ICpleGFjdGx5KiBob3cgYW5kIHdoZXJlIHRoYXQgYHByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBpbml0aWFsbHkuIFRoYXQgd2lsbCBiZSB0aGUgZGV0ZXJtaW5pbmcgZmFjdG9yIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIElmIHRoaXMgZmllbGQgaXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseSwgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlLCBhbmQgcG9zc2libHkgZXhwbG9pdGFibGUsIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyOTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjo1OS43MzE2ODIxNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM1OTYxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjE5PXN0cnVjdCBuZl9mbG93X3JvdXRlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQzLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ1LXZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIyPWZsb3dfb2ZmbG9hZF9maWxsX2RpcihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjUzOnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODcxPXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4Nzk6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODgwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGVbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTg0PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk4OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk4OTpcXHRlcnIgPSBuZl9mbG93X29mZmxvYWRfYWxsb2Mob2ZmbG9hZCwgZmxvd19ydWxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5MC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTEtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTEyOlxcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMy1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQzNC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDM1OlxcdGVudHJ5ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDM2LVxcdGlmICghZW50cnkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MDEuMjM1MzAzNzE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTYyMjc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZmxvd19vZmZsb2FkX2FsbG9jYCBpbXBsZW1lbnRhdGlvbiwgY29uc2lkZXJpbmcgaXQncyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2A6XG5cbioqRGl2aW5nIGludG8gYGZsb3dfb2ZmbG9hZF9hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZsb3cgb2ZmbG9hZCBhbGxvY2F0aW9uIHByb2Nlc3MuIFNpbmNlIHdlJ3JlIGluIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhdCB0aGUgaGVhcnQgb2YgaG93IGZsb3cgZW50cmllcyBhcmUgY3JlYXRlZCBmb3Igb2ZmbG9hZGluZyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEknbSBpbWFnaW5pbmcgaXQgZGVhbHMgd2l0aCB0aGUgY29yZSBsb2dpYywgcG9zc2libHkgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG9yIHRhYmxlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5LCBob3cgdGhlIGZsb3cgZW50cnkgaXRzZWxmIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIElzIGl0IGFsbG9jYXRpbmcgZnJvbSBhIHByZS1kZWZpbmVkIHBvb2wsIG9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGVudHJpZXM/IERvZXMgaXQgY29uc2lkZXIgdGhlIHNwZWNpZmljIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChlLmcuLCBzdXBwb3J0ZWQgcHJvdG9jb2xzLCBtYXRjaCBmaWVsZHMsIGFjdGlvbnMpPyBJJ20gaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBpdCB1c2VzIOKAkyBpcyBpdCBlbXBsb3lpbmcgUkNVLCBvciBhIG1vcmUgdHJhZGl0aW9uYWwgc3BpbmxvY2sgYXBwcm9hY2g/IEFsc28sIEkgZXhwZWN0IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZsb3cgdGFibGUgc3Vic3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGNvbnNpZGVyIHdoYXQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxODksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzowNC41NTE1MzQ5MDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHR9XFxuICA1MTpcXHR9XFxuICA1MjpcXHRcXG4gIDUzOlxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoY3QpKSlcXG4gIDU4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRmbG93ID0ga21lbV9jYWNoZV96YWxsb2MoZmxvd19vZmZsb2FkX2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxuICA2MTpcXHRcXHRpZiAoIWZsb3cpXFxuICA2MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZjdC1cXHUwMDNlY3RfZ2VuZXJhbC51c2UpO1xcbiAgNjU6XFx0XFx0Zmxvdy1cXHUwMDNlY3QgPSBjdDtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbiAgNjg6XFx0XFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19TUkNfTkFUKVxcbiAgNzE6XFx0XFx0XFx0X19zZXRfYml0KE5GX0ZMT1dfU05BVCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4gIDcyOlxcdFxcdGlmIChjdC1cXHUwMDNlc3RhdHVzIFxcdTAwMjYgSVBTX0RTVF9OQVQpXFxuICA3MzpcXHRcXHRcXHRfX3NldF9iaXQoTkZfRkxPV19ETkFULCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRyZXR1cm4gZmxvdztcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxuICA3ODpcXHRcXG4gIDc5OlxcdHN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcXG4gIDgwOlxcdHtcXG4gIDgxOlxcdFxcdGlmIChmbG93X3R1cGxlLVxcdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNilcXG4gIDgyOlxcdFxcdFxcdHJldHVybiBydDZfZ2V0X2Nvb2tpZShkc3RfcnQ2X2luZm8oZmxvd190dXBsZS1cXHUwMDNlZHN0X2NhY2hlKSk7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdHJldHVybiAwO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqbmZ0X3JvdXRlX2RzdF9mZXRjaChzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuICA4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuICA4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjA0LjU1MTYxOTQ5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjY4NjI3MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgUHJpb3JpdHkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBOZXRmaWx0ZXIncyBmbG93IG9mZmxvYWQgaGFuZGxlcyBwYWNrZXQgcHJpb3JpdGllcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgYHByaW9yaXR5YCBmaWVsZCBnZXRzIHBvcHVsYXRlZCBhbmQgdXNlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGBmbG93X29mZmxvYWRfYWxsb2NgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgYWxsb2NhdGluZyBhIG5ldyBmbG93IGVudHJ5LCBsZXZlcmFnZXMgYGttZW1fY2FjaGVfemFsbG9jYC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsIGJlY2F1c2UgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgYGZsb3dgIHN0cnVjdHVyZSBpcyB6ZXJvLWluaXRpYWxpemVkIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGVyZWZvcmUsIHRoZSBgcHJpb3JpdHlgIGZpZWxkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGBmbG93YCBzdHJ1Y3R1cmUgc3RhcnRzIGF0IHplcm8uXG5cbk5vdywgbG9va2luZyBhdCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgSSBzZWUgYGZsb3ctXHUwMDNlcHJpb3JpdHkgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5O2AuIFRoYXQncyB3aGVyZSB0aGUgKmludGVuZGVkKiBwcmlvcml0eSBnZXRzIGFzc2lnbmVkLiBBbmQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaXMgb25lIG9mIHRoZSBzdGFuZGFyZCBmaWVsZHMgaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuXG5cbkhvd2V2ZXIsIHRoZSBwbG90IHRoaWNrZW5zLiBXaGVuIGFuYWx5emluZyB0aGUgYGFjdF9jdC5jYCBtb2R1bGUsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgd2hlbiBgZW50cnlgIGlzIGFsbG9jYXRlZCB2aWEgYGZsb3dfb2ZmbG9hZF9hbGxvYyhjdClgLCBpdHMgYHByaW9yaXR5YCBpcyBzdGFydGluZyBhdCB6ZXJvLCBieSBkZXNpZ24uXG5cbkdpdmVuIHRoZSBpbml0aWFsIHplcm8tYWxsb2NhdGlvbiwgSSdtIG5vdyBjdXJpb3VzIGFib3V0IHdoYXQgYWN0dWFsbHkgaGFwcGVucyBpZiBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgcmVtYWlucyB6ZXJvLiBJbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBJIHNlZSBgaWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpIHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7YC4gTmF0dXJhbGx5LCBpZiB0aGUgcHJpb3JpdHkgaXMgemVybywgdGhhdCBlbnRpcmUgYGlmYCBzdGF0ZW1lbnQgaXMgc2tpcHBlZCwgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGZsb3cgYWN0aW9ucyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gb2YgZmxvdyBlbnRyaWVzIGFuZCB0aGUgYXNzb2NpYXRlZCBhY3Rpb25zIGltcGFjdCB0aGUgYHByaW9yaXR5YCB2YWx1ZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYm90aCBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAgYW5kIGBuZl9mbG93X29mZmxvYWRfYWxsb2NgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgZmxvdyBhY3Rpb25zIGFyZSBjb3VudGVkIGFuZCBhbGxvY2F0ZWQuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgcHJpb3JpdHkgaXMgbWFuYWdlZCB3aXRoIG90aGVyIHBpZWNlcyBvZiB0aGUgb2ZmbG9hZCBmcmFtZXdvcmsuIEkgbmVlZCB0byBjaGVjayBob3cgaXQgYWxsIGludGVncmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzowOS4yMjAyNDk4NTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFxuIDY5MTpcXHRcXHRpZiAoZmxvd19vZmZsb2FkX2RlY2FwX3R1bm5lbChmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwIHx8XFxuIDY5MjpcXHRcXHQgICAgZmxvd19vZmZsb2FkX2VuY2FwX3R1bm5lbChmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwKVxcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHRpZiAoZmxvd19vZmZsb2FkX2V0aF9zcmMobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwIHx8XFxuIDY5NjpcXHRcXHQgICAgZmxvd19vZmZsb2FkX2V0aF9kc3QobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwKVxcbiA2OTc6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRpZiAoZmxvdy1cXHUwMDNlcHJpb3JpdHkpIHtcXG4gNzAwOlxcdFxcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuIDcwMTpcXHRcXG4gNzAyOlxcdFxcdFxcdGVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xcbiA3MDM6XFx0XFx0XFx0aWYgKCFlbnRyeSlcXG4gNzA0OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNzA1OlxcdFxcbiA3MDY6XFx0XFx0XFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XFxuIDcwNzpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlcHJpb3JpdHkgPSBmbG93LVxcdTAwM2Vwcmlvcml0eTtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0dHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0dXBsZS1cXHUwMDNlZW5jYXBfbnVtOyBpKyspIHtcXG4gNzEzOlxcdFxcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuIDcxNDpcXHRcXG4gNzE1OlxcdFxcdFxcdGlmICh0dXBsZS1cXHUwMDNlaW5fdmxhbl9pbmdyZXNzIFxcdTAwMjYgQklUKGkpKVxcbiA3MTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDcxNzpcXHRcXG4gNzE4OlxcdFxcdFxcdGlmICh0dXBsZS1cXHUwMDNlZW5jYXBbaV0ucHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7XFxuIDcxOTpcXHRcXHRcXHRcXHRlbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG4gNzIwOlxcdFxcdFxcdFxcdGlmICghZW50cnkpXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDcyMjpcXHRcXHRcXHRcXHRlbnRyeS1cXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9WTEFOX1BPUDtcXG4gNzIzOlxcdFxcdFxcdH1cXG4gNzI0OlxcdFxcdH1cXG4gNzI1OlxcdFxcbiA3MjY6XFx0XFx0b3RoZXJfdHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb3RoZXJfdHVwbGUtXFx1MDAzZWVuY2FwX251bTsgaSsrKSB7XFxuIDcyOTpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzowOS4yMjAzNDIyOTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUwODMzNDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEZsb3cgUnVsZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGZsb3dfcnVsZWAgaW5zdGFuY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBhbGxvY2F0aW9uIGNhbGxzLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3Igd2hlcmUgYG5mX2Zsb3dfb2ZmbG9hZF9hbGxvY2Ag4oCTIG9yIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiDigJMgaXMgYmVpbmcgdXNlZC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5LCBvciBhdCBsZWFzdCBhIG1ham9yIGNvbnRyaWJ1dG9yLiBXaGVyZSBhcmUgd2UgZ2V0dGluZyB0aGVzZSBgZmxvd19ydWxlYCBzdHJ1Y3R1cmVzIGZyb20/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VlIHdoYXQgdGhlIGFsbG9jYXRpb24gbGFuZHNjYXBlIGxvb2tzIGxpa2UgZm9yIHRoZXNlIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MTAuNzI4Njc5NzUxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIwNzMzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODQtXFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NTQ9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzU3LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc1ODpcXHRpZiAobmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTktXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03ODM9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzg2LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4NzpcXHRpZiAobmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODgtXFx0XFx0cmV0dXJuIC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoxMC45OTA3NjA0NDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3Mjc2MDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmbG93IHJ1bGUgYWN0aW9uIGVudHJpZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgY291bnRpbmcgYW5kIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGBuZl9mbG93X29mZmxvYWRfYWxsb2NgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJJ2xsIG5lZWQgdG8gb3BlbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgYW5kIGZvY3VzIG9uIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIGhvdyB0aGlzIGNydWNpYWwgYWxsb2NhdGlvbiBoYXBwZW5zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjEyLjU2MzUyMjg0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZMT1dfT0ZGTE9BRF9ESVJfTUFYOyBpKyspXFxuIDg3NjpcXHRcXHRcXHRfX25mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KGZsb3dfcnVsZVtpXSk7XFxuIDg3NzpcXHR9XFxuIDg3ODpcXHRcXG4gODc5OlxcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG4gODgwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGVbXSlcXG4gODgxOlxcdHtcXG4gODgyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHRmbG93X3J1bGVbMF0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXFxuIDg4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbiA4ODY6XFx0XFx0aWYgKCFmbG93X3J1bGVbMF0pXFxuIDg4NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODg4OlxcdFxcbiA4ODk6XFx0XFx0Zmxvd19ydWxlWzFdID0gbmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2MobmV0LCBvZmZsb2FkLFxcbiA4OTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG4gODkxOlxcdFxcdGlmICghZmxvd19ydWxlWzFdKSB7XFxuIDg5MjpcXHRcXHRcXHRfX25mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KGZsb3dfcnVsZVswXSk7XFxuIDg5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODk0OlxcdFxcdH1cXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDg5NzpcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9pbml0KHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvdyxcXG4gOTAwOlxcdFxcdFxcdFxcdFxcdCBfX2JlMTYgcHJvdG8sIGludCBwcmlvcml0eSxcXG4gOTAxOlxcdFxcdFxcdFxcdFxcdCBlbnVtIGZsb3dfY2xzX2NvbW1hbmQgY21kLFxcbiA5MDI6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbiA5MDM6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gOTA0OlxcdHtcXG4gOTA1OlxcdFxcdGNsc19mbG93LVxcdTAwM2Vjb21tb24ucHJvdG9jb2wgPSBwcm90bztcXG4gOTA2OlxcdFxcdGNsc19mbG93LVxcdTAwM2Vjb21tb24ucHJpbyA9IHByaW9yaXR5O1xcbiA5MDc6XFx0XFx0Y2xzX2Zsb3ctXFx1MDAzZWNvbW1vbi5leHRhY2sgPSBleHRhY2s7XFxuIDkwODpcXHRcXHRjbHNfZmxvdy1cXHUwMDNlY29tbWFuZCA9IGNtZDtcXG4gOTA5OlxcdFxcdGNsc19mbG93LVxcdTAwM2Vjb29raWUgPSAodW5zaWduZWQgbG9uZyl0dXBsZTtcXG4gOTEwOlxcdH1cXG4gOTExOlxcdFxcbiA5MTI6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbiA5MTM6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuIDkxNDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlLFxcbiA5MTU6XFx0XFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuIDkxNjpcXHRcXHRcXHRcXHRcXHQgaW50IHByaW9yaXR5LCBpbnQgY21kLFxcbiA5MTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmbG93X3N0YXRzICpzdGF0cyxcXG4gOTE4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja19jYl9saXN0KVxcbiA5MTk6XFx0e1xcbiA5MjA6XFx0XFx0c3RydWN0IGZsb3dfY2xzX29mZmxvYWQgY2xzX2Zsb3cgPSB7fTtcXG4gOTIxOlxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgZmxvd19ibG9ja19jYiAqYmxvY2tfY2I7XFxuIDkyMzpcXHRcXHRfX2JlMTYgcHJvdG8gPSBFVEhfUF9BTEw7XFxuIDkyNDpcXHRcXHRpbnQgZXJyLCBpID0gMDtcXG4gOTI1OlxcdFxcbiA5MjY6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2luaXQoXFx1MDAyNmNsc19mbG93LCBwcm90bywgcHJpb3JpdHksIGNtZCxcXG4gOTI3OlxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLCBcXHUwMDI2ZXh0YWNrKTtcXG4gOTI4OlxcdFxcdGlmIChjbWQgPT0gRkxPV19DTFNfUkVQTEFDRSlcXG4gOTI5OlxcdFxcdFxcdGNsc19mbG93LnJ1bGUgPSBmbG93X3J1bGUtXFx1MDAzZXJ1bGU7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGRvd25fcmVhZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xcbiA5MzI6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19jYiwgYmxvY2tfY2JfbGlzdCwgbGlzdCkge1xcbiA5MzM6XFx0XFx0XFx0ZXJyID0gYmxvY2tfY2ItXFx1MDAzZWNiKFRDX1NFVFVQX0NMU0ZMT1dFUiwgXFx1MDAyNmNsc19mbG93LFxcbiA5MzQ6XFx0XFx0XFx0XFx0XFx0ICAgYmxvY2tfY2ItXFx1MDAzZWNiX3ByaXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoxMi41NjM2MzgyMjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2Njk2OTIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBib3VuY2VyLCBpZiB5b3Ugd2lsbCwgZm9yIG5ldyBvZmZsb2FkIHJ1bGVzIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHN1YnN5c3RlbS4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbiBhdXRvbWF0aWNhbGx5OiB3aGF0IGRvZXMgaXQgKmRvKiwgd2hhdCBhcmUgdGhlICppbnB1dHMqLCB3aGF0IGFyZSB0aGUgKm91dHB1dHMqLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgKmZhaWx1cmUgcG9pbnRzKiBhbmQgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXM/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBhcm91bmQgYWxsb2NhdGlvbi4gTWVtb3J5IGFsbG9jYXRpb24sIG9idmlvdXNseSwgYnV0IGFsc28gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBydWxlIGRhdGFiYXNlIGFuZCBhbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJcyBpdCBwcm9wZXJseSBsb2NrZWQ/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGR1cmluZyBoaWdoLXJhdGUgcnVsZSBpbnNlcnRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBlbnN1cmluZyB0aGF0IGEgbmV3IGZsb3cgb2ZmbG9hZCBydWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBoYW5kbGluZyBhIHJ1bGUgc3RydWN0dXJlLCBwb3B1bGF0aW5nIGZpZWxkcyBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzLCBtYW5hZ2luZyByZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFzaCB0YWJsZSBvciBvdGhlciBpbmRleGluZyBtZWNoYW5pc21zIHVzZWQgdG8gb3B0aW1pemUgcnVsZSBsb29rdXAuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIHRvby4gSG93IGFyZSBhbGxvY2F0aW9uIGZhaWx1cmVzIGRlYWx0IHdpdGg/IFdoYXQgYWJvdXQgaW52YWxpZCBpbnB1dHMgb3IgY29uZmxpY3RpbmcgcnVsZSBwYXJhbWV0ZXJzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjb3JuZXIgY2FzZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gZGV0YWlscyBzbyBJIGNhbiBkZXRlcm1pbmUgaG93IHdlbGwgdGhpcyBmdW5jdGlvbiBpcyBwZXJmb3JtaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI1NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MTUuMjMwNjA5NTM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk2MTczNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDg9c3RhdGljIHN0cnVjdCBuZl9mbG93X3J1bGUgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODA5Om5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgxMC1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTg3OT1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg4NDpcXHRmbG93X3J1bGVbMF0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODg4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODg5OlxcdGZsb3dfcnVsZVsxXSA9IG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jKG5ldCwgb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg5MC1cXHRcXHRcXHRcXHRcXHRcXHQgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoxNS40MDAyMzE4MjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYzMjA0MjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIFRoZSBuYW1lIGl0c2VsZiwgYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCwgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24gb2YgYSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBmbG93IG9mZmxvYWRpbmcsIGxpa2VseSB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBkYXRhIHN0cnVjdHVyZSDigJMgcHJvYmFibHkgc29tZSBzb3J0IG9mIHJ1bGUgb3IgZGVzY3JpcHRvciDigJMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgcGFydGljdWxhciBmbG93IGZvciBoYXJkd2FyZSBvZmZsb2FkLiBXZeKAmXJlIG5vdCB0YWxraW5nIGFib3V0IGp1c3QgYW55IGRhdGEgc3RydWN0dXJlLCBidXQgb25lIHRoYXQncyBmdW5kYW1lbnRhbCB0byBwdXNoaW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBkb3duIHRvIHRoZSBOSUMuIFRoYXQncyB0aGUga2V5LiBXaGF0IGlzIGl0cyBkZXNpZ24/IFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHMgaXQgbmVlZHMgdG8gaG9sZD9cbkkgd2FudCB0byBrbm93IGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIE5ldGZpbHRlciBvZmZsb2FkIGZyYW1ld29yay4gSG93IGRvZXMgdGhpcyBhbGxvY2F0aW9uIGhhcHBlbiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlPyBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdydzIGl0IG1hbmFnZWQgZm9yIGNvbmN1cnJlbmN5PyBXaGF0IG1lbW9yeSBwb29sIG9yIGFsbG9jYXRvciBpcyBiZWluZyB1c2VkPyBBbmQgd2hhdCdzIGdvaW5nIHRvIGJlIHRoZSBldmVudHVhbCByZWxlYXNlIGZ1bmN0aW9uLCBpdCdzIHR3aW4sIGFuZCB3aGF0IGFyZSB0aGUgaW1wb3J0YW50IGVsZW1lbnRzIG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGNhbGxlZD8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGFsc28gaW1wb3J0YW50LiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHRoaXMgYWxsb2NhdGlvbiB0byBmYWlsLCBhbmQgaG93IGFyZSB0aG9zZSBmYWlsdXJlcyBoYW5kbGVkPyBUaGUgdXN1YWwgc3R1ZmYuXG5UaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlc2lnbiBpc3N1ZXMgZW1lcmdlIOKAkyBob3cgZWZmaWNpZW50IGlzIHRoaXMgcHJvY2VzcywgYW5kIGhvdyBtdWNoIG92ZXJoZWFkIGRvZXMgdGhlIGFsbG9jYXRpb24gYWRkIHRvIHRoZSBvdmVyYWxsIG9mZmxvYWQgcGF0aD8gSXMgdGhpcyBkb25lIGF0IGZsb3cgY3JlYXRpb24gb3IgZHVyaW5nIHRoZSBkYXRhIHBhdGg/IExldCdzIGdldCBpbnRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjE5LjAzMjI3NjA4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwODpcXHRzdGF0aWMgc3RydWN0IG5mX2Zsb3dfcnVsZSAqXFxuIDgwOTpcXHRuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIDgxMDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuIDgxMTpcXHRcXHRcXHRcXHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbiA4MTI6XFx0e1xcbiA4MTM6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlID0gb2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlO1xcbiA4MTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcXG4gODE1OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cgPSBvZmZsb2FkLVxcdTAwM2VmbG93O1xcbiA4MTY6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0ID0gTlVMTDtcXG4gODE3OlxcdFxcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZTtcXG4gODE4OlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRmbG93X3J1bGUgPSBremFsbG9jX29iaigqZmxvd19ydWxlKTtcXG4gODIxOlxcdFxcdGlmICghZmxvd19ydWxlKVxcbiA4MjI6XFx0XFx0XFx0Z290byBlcnJfZmxvdztcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0Zmxvd19ydWxlLVxcdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYKTtcXG4gODI1OlxcdFxcdGlmICghZmxvd19ydWxlLVxcdTAwM2VydWxlKVxcbiA4MjY6XFx0XFx0XFx0Z290byBlcnJfZmxvd19ydWxlO1xcbiA4Mjc6XFx0XFxuIDgyODpcXHRcXHRmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZW1hdGNoLmRpc3NlY3RvciA9IFxcdTAwMjZmbG93X3J1bGUtXFx1MDAzZW1hdGNoLmRpc3NlY3RvcjtcXG4gODI5OlxcdFxcdGZsb3dfcnVsZS1cXHUwMDNlcnVsZS1cXHUwMDNlbWF0Y2gubWFzayA9IFxcdTAwMjZmbG93X3J1bGUtXFx1MDAzZW1hdGNoLm1hc2s7XFxuIDgzMDpcXHRcXHRmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZW1hdGNoLmtleSA9IFxcdTAwMjZmbG93X3J1bGUtXFx1MDAzZW1hdGNoLmtleTtcXG4gODMxOlxcdFxcbiA4MzI6XFx0XFx0dHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxuIDgzMzpcXHRcXHRvdGhlcl90dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XFxuIDgzNDpcXHRcXHRpZiAob3RoZXJfdHVwbGUtXFx1MDAzZXhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSClcXG4gODM1OlxcdFxcdFxcdG90aGVyX2RzdCA9IG90aGVyX3R1cGxlLVxcdTAwM2Vkc3RfY2FjaGU7XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGVyciA9IG5mX2Zsb3dfcnVsZV9tYXRjaChcXHUwMDI2Zmxvd19ydWxlLVxcdTAwM2VtYXRjaCwgdHVwbGUsIG90aGVyX2RzdCk7XFxuIDgzODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gODM5OlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfbWF0Y2g7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdGZsb3dfcnVsZS1cXHUwMDNlcnVsZS1cXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzID0gMDtcXG4gODQyOlxcdFxcdGlmIChmbG93dGFibGUtXFx1MDAzZXR5cGUtXFx1MDAzZWFjdGlvbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcXHUwMDNjIDApXFxuIDg0MzpcXHRcXHRcXHRnb3RvIGVycl9mbG93X21hdGNoO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gZmxvd19ydWxlO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRlcnJfZmxvd19tYXRjaDpcXG4gODQ4OlxcdFxcdGtmcmVlKGZsb3dfcnVsZS1cXHUwMDNlcnVsZSk7XFxuIDg0OTpcXHRlcnJfZmxvd19ydWxlOlxcbiA4NTA6XFx0XFx0a2ZyZWUoZmxvd19ydWxlKTtcXG4gODUxOlxcdGVycl9mbG93OlxcbiA4NTI6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg1MzpcXHR9XFxuIDg1NDpcXHRcXG4gODU1OlxcdHN0YXRpYyB2b2lkIF9fbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbiA4NTY6XFx0e1xcbiA4NTc6XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcXG4gODU4OlxcdFxcdGludCBpO1xcbiA4NTk6XFx0XFxuIDg2MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZmxvd19ydWxlLVxcdTAwM2VydWxlLVxcdTAwM2VhY3Rpb24ubnVtX2VudHJpZXM7IGkrKykge1xcbiA4NjE6XFx0XFx0XFx0ZW50cnkgPSBcXHUwMDI2Zmxvd19ydWxlLVxcdTAwM2VydWxlLVxcdTAwM2VhY3Rpb24uZW50cmllc1tpXTtcXG4gODYyOlxcdFxcdFxcdGlmIChlbnRyeS1cXHUwMDNlaWQgIT0gRkxPV19BQ1RJT05fUkVESVJFQ1QpXFxuIDg2MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0XFx0ZGV2X3B1dChlbnRyeS1cXHUwMDNlZGV2KTtcXG4gODY2OlxcdFxcdH1cXG4gODY3OlxcdFxcdGtmcmVlKGZsb3dfcnVsZS1cXHUwMDNlcnVsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjE5LjAzMjM3Mjc5OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA2ODQzOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBGbG93IFRhYmxlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBmbG93IHJ1bGUgYWxsb2NhdGlvbiBtZWNoYW5pc21zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmbG93X3J1bGVfYWxsb2NgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyB0aGUgbGluY2hwaW4gZm9yIGFsbG9jYXRpbmcgbmV3IGZsb3cgcnVsZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG51YW5jZXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHNjYWxhYmlsaXR5LiBJIGFsc28gd2FudCB0byB2ZXJpZnkgdGhlIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgYWN0aW9ucyB3ZSBzdXBwb3J0IHBlciBmbG93IHJ1bGUuIExldCBtZSBsb29rIHVwIGBORl9GTE9XX1JVTEVfQUNUSU9OX01BWGAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhY3Rpb24gbGltaXQuIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoZSBwbGFjZW1lbnQgb2YgYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgIHdpdGhpbiB0aGUgc3RydWN0dXJlLCBob3cgZG9lcyB0aGUgbGlua2VkIGxpc3Qgb2YgYWN0aW9ucyBiZWhhdmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzgwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoyMi4wMzkyMTg4NzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUyNzEwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfRkxPV19SVUxFX0FDVElPTl9NQVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjE4OiNkZWZpbmUgTkZfRkxPV19SVUxFX0FDVElPTl9NQVhcXHQyNFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIyMD1mbG93X2FjdGlvbl9lbnRyeV9uZXh0KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjI0OlxcdGlmICh1bmxpa2VseShmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcyBcXHUwMDNlPSBORl9GTE9XX1JVTEVfQUNUSU9OX01BWCkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMjUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTgwOT1uZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgyMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgyNDpcXHRmbG93X3J1bGUtXFx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoTkZfRkxPV19SVUxFX0FDVElPTl9NQVgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODI1LVxcdGlmICghZmxvd19ydWxlLVxcdTAwM2VydWxlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoyMy42MzQ0OTg0NjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExOTY5Mzk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBvZiBGbG93IFJ1bGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsb3cgcnVsZXMgYXJlIGJlaW5nIGJyb3VnaHQgdG8gbGlmZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGZsb3dfcnVsZV9hbGxvY2AuIFRoYXQgZnVuY3Rpb24gaXMgY2xlYXJseSB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBiaXJ0aHBsYWNlIG9mIHRoZXNlIGVudHJpZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGR1cmluZyB0aGF0IGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCByaWdodCBvZmYgdGhlIGJhdC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhbmQgb3B0aW1pemF0aW9uIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgc28gbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjI1Ljc1NDE5NTA1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjU1Nzk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X3J1bGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9NzA5PXN0YXRpYyBpbnQgbmZwX2ZsX21lcmdlX2FjdGlvbnNfb2ZmbG9hZChzdHJ1Y3QgZmxvd19ydWxlICoqcnVsZXMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy03MjYtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6NzI3OlxcdGFfcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhudW1fYWN0aW9ucyArIChudW1fcnVsZXMgLyAyKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmMtNzI4LVxcdGlmICghYV9ydWxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9MTQ3OT1uZnBfZmxfY3RfZmxvd19lbnRyeSAqbmZwX2ZsX2N0X2FkZF9mbG93KHN0cnVjdCBuZnBfZmxfY3Rfem9uZV9lbnRyeSAqenQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jOjE0OTQ6XFx0ZW50cnktXFx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoZmxvdy1cXHUwMDNlcnVsZS1cXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDk1LVxcdGlmICghZW50cnktXFx1MDAzZXJ1bGUpIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oPTQ0MT1zdHJ1Y3QgZmxvd19ydWxlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTQ0NS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaDo0NDY6c3RydWN0IGZsb3dfcnVsZSAqZmxvd19ydWxlX2FsbG9jKHVuc2lnbmVkIGludCBudW1fYWN0aW9ucyk7XFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtNDQ3LVxcbi0tXFxubmV0L2NvcmUvZmxvd19vZmZsb2FkLmMtOS1cXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYzoxMDpzdHJ1Y3QgZmxvd19ydWxlICpmbG93X3J1bGVfYWxsb2ModW5zaWduZWQgaW50IG51bV9hY3Rpb25zKVxcbm5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jLTExLXtcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jLTI3LX1cXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYzoyODpFWFBPUlRfU1lNQk9MKGZsb3dfcnVsZV9hbGxvYyk7XFxubmV0L2NvcmUvZmxvd19vZmZsb2FkLmMtMjktXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM3MTc9ZXRodG9vbF9yeF9mbG93X3J1bGVfY3JlYXRlKGNvbnN0IHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlY19pbnB1dCAqaW5wdXQpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM3MjktXFx0LyogZXRodG9vbF9yeCBzdXBwb3J0cyBvbmx5IG9uZSBzaW5nbGUgYWN0aW9uIHBlciBydWxlLiAqL1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzczMDpcXHRmbG93LVxcdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKDEpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzczMS1cXHRpZiAoIWZsb3ctXFx1MDAzZXJ1bGUpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODA5PW5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODI0OlxcdGZsb3dfcnVsZS1cXHUwMDNlcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhORl9GTE9XX1JVTEVfQUNUSU9OX01BWCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MjUtXFx0aWYgKCFmbG93X3J1bGUtXFx1MDAzZXJ1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtOS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MTA6c3RhdGljIHN0cnVjdCBuZnRfZmxvd19ydWxlICpuZnRfZmxvd19ydWxlX2FsbG9jKGludCBudW1fYWN0aW9ucylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoxODpcXHRmbG93LVxcdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKG51bV9hY3Rpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTktXFx0aWYgKCFmbG93LVxcdTAwM2VydWxlKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9ODg9c3RydWN0IG5mdF9mbG93X3J1bGUgKm5mdF9mbG93X3J1bGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xMDctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjEwODpcXHRmbG93ID0gbmZ0X2Zsb3dfcnVsZV9hbGxvYyhudW1fYWN0aW9ucyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTEwOS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTQ1OT1zdGF0aWMgaW50IGZsX2h3X3JlcGxhY2VfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy00NjctXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo0Njg6XFx0Y2xzX2Zsb3dlci5ydWxlID0gZmxvd19ydWxlX2FsbG9jKHRjZl9leHRzX251bV9hY3Rpb25zKFxcdTAwMjZmLVxcdTAwM2VleHRzKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy00NjktXFx0aWYgKCFjbHNfZmxvd2VyLnJ1bGUpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI2Nzc9c3RhdGljIGludCBmbF9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNjkyLVxcdFxcdGNsc19mbG93ZXIucnVsZSA9XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyNjkzOlxcdFxcdFxcdGZsb3dfcnVsZV9hbGxvYyh0Y2ZfZXh0c19udW1fYWN0aW9ucyhcXHUwMDI2Zi1cXHUwMDNlZXh0cykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjY5NC1cXHRcXHRpZiAoIWNsc19mbG93ZXIucnVsZSkge1xcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yNzYzPXN0YXRpYyBpbnQgZmxfaHdfY3JlYXRlX3RtcGx0KHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNzY4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mjc2OTpcXHRjbHNfZmxvd2VyLnJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoMCk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNzcwLVxcdGlmICghY2xzX2Zsb3dlci5ydWxlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yODU3PXN0YXRpYyB2b2lkIGZsX3RtcGx0X3Jlb2ZmbG9hZChzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbiwgYm9vbCBhZGQsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4NjItXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyODYzOlxcdGNsc19mbG93ZXIucnVsZSA9IGZsb3dfcnVsZV9hbGxvYygwKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4NjQtXFx0aWYgKCFjbHNfZmxvd2VyLnJ1bGUpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9ODQ9c3RhdGljIGludCBtYWxsX3JlcGxhY2VfaHdfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTkzLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYzo5NDpcXHRjbHNfbWFsbC5ydWxlID1cXHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXFx1MDAyNmhlYWQtXFx1MDAzZWV4dHMpKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtOTUtXFx0aWYgKCFjbHNfbWFsbC5ydWxlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTI3NT1zdGF0aWMgaW50IG1hbGxfcmVvZmZsb2FkKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBib29sIGFkZCwgZmxvd19zZXR1cF9jYl90ICpjYixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0yODUtXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjI4NjpcXHRjbHNfbWFsbC5ydWxlID1cXHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXFx1MDAyNmhlYWQtXFx1MDAzZWV4dHMpKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjg3LVxcdGlmICghY2xzX21hbGwucnVsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MjcuMjE2NzU3Mzk2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQ1OTU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBGbG93IE9mZmxvYWQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGZsb3cgb2ZmbG9hZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L2NvcmUvZmxvd19vZmZsb2FkLmNgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB3aGVyZSB0aGUgcHJpbWFyeSBsb2dpYyBmb3Igb2ZmbG9hZGluZyBuZXR3b3JrIGZsb3dzIHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB0aGVyZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZGlmZmVyZW50IGFjdGlvbnMgdGhhdCBhcmUgcGVyZm9ybWVkIG9uY2UgYSBmbG93IGVudHJ5IG1hdGNoZXMsIHNvIEkgc2hvdWxkIGxvb2sgYXQgYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHRyYWNpbmcgdGhlIG9mZmxvYWQgcHJvY2Vzcy4gVGhlc2UgdHdvIHBvaW50cyB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSBhbmQgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjI5LjI1MTM1NjQwM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9mbG93X29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2Zsb3dfb2ZmbG9hZC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRzdHJ1Y3QgZmxvd19ydWxlICpmbG93X3J1bGVfYWxsb2ModW5zaWduZWQgaW50IG51bV9hY3Rpb25zKVxcbiAgMTE6XFx0e1xcbiAgMTI6XFx0XFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZTtcXG4gIDEzOlxcdFxcdGludCBpO1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHRydWxlID0ga3phbGxvY19mbGV4KCpydWxlLCBhY3Rpb24uZW50cmllcywgbnVtX2FjdGlvbnMpO1xcbiAgMTY6XFx0XFx0aWYgKCFydWxlKVxcbiAgMTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdHJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcyA9IG51bV9hY3Rpb25zO1xcbiAgMjA6XFx0XFx0LyogUHJlLWZpbGwgZWFjaCBhY3Rpb24gaHdfc3RhdHMgd2l0aCBET05UX0NBUkUuXFxuICAyMTpcXHRcXHQgKiBDYWxsZXIgY2FuIG92ZXJyaWRlIHRoaXMgaWYgaXQgd2FudHMgc3RhdHMgZm9yIGEgZ2l2ZW4gYWN0aW9uLlxcbiAgMjI6XFx0XFx0ICovXFxuICAyMzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2FjdGlvbnM7IGkrKylcXG4gIDI0OlxcdFxcdFxcdHJ1bGUtXFx1MDAzZWFjdGlvbi5lbnRyaWVzW2ldLmh3X3N0YXRzID0gRkxPV19BQ1RJT05fSFdfU1RBVFNfRE9OVF9DQVJFO1xcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHRyZXR1cm4gcnVsZTtcXG4gIDI3OlxcdH1cXG4gIDI4OlxcdEVYUE9SVF9TWU1CT0woZmxvd19ydWxlX2FsbG9jKTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF9hY3Rpb24gKm9mZmxvYWRfYWN0aW9uX2FsbG9jKHVuc2lnbmVkIGludCBudW1fYWN0aW9ucylcXG4gIDMxOlxcdHtcXG4gIDMyOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfYWN0aW9uICpmbF9hY3Rpb247XFxuICAzMzpcXHRcXHRpbnQgaTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ZmxfYWN0aW9uID0ga3phbGxvY19mbGV4KCpmbF9hY3Rpb24sIGFjdGlvbi5lbnRyaWVzLCBudW1fYWN0aW9ucyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjI5LjI1MTQzMTYzM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjM5MTc1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZl9mbG93X3RhYmxlX29mZmxvYWQuYyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyB3aXRoaW4gYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGhvdyB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IG9mZmxvYWRlZC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IGl0IGhhbmRsZXMgdGhlIFwibmV4dFwiIHN0YXRlIG9yIGFjdGlvbiBmb3IgYSBnaXZlbiBmbG93IGVudHJ5LiBJcyBpdCBhIHN0YXRlIG1hY2hpbmU/IERvZXMgaXQgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYWNrZXQgc2hvdWxkIGJlIHNlbnQgbmV4dCwgcGVyaGFwcyBiYXNlZCBvbiBvZmZsb2FkIGNhcGFiaWxpdGllcyBvciB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXRlPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgZ3JlcHBpbmcgZm9yIGNhbGxzIHRvIGBmbG93X2FjdGlvbl9lbnRyeV9uZXh0YCB0byBnZXQgYW4gaWRlYSBvZiB3aGVyZSBpdCdzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBzdXJyb3VuZHMgaXQuIFRoZW4sIEknbGwgZXhhbWluZSB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBmbG93IGNvbnRyb2wgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBzZWUgaG93IGZsb3cgc3RhdGUgaXMgYWN0dWFsbHkgbWFuYWdlZCB3aXRoaW4gdGhlIG9mZmxvYWQgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBvdmVyYWxsIG9mZmxvYWQgbWVjaGFuaXNtLCBlc3BlY2lhbGx5IGluIHRlcm1zIG9mIGhhcmR3YXJlIG9mZmxvYWQgdmVyc3VzIHNvZnR3YXJlIGZhbGxiYWNrIHNjZW5hcmlvcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIFwibmV4dFwiIGFjdGlvbiBpcyBjb21tdW5pY2F0ZWQgdG8gdGhlIGhhcmR3YXJlIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgaXMgdW5hYmxlIHRvIHBlcmZvcm0gdGhhdCBhY3Rpb24gZm9yIHNvbWUgcmVhc29uLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZWl0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MzEuODkwNjEwMjgxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdFxcdG1lbWNweShcXHUwMDI2ZW50cnktXFx1MDAzZW1hbmdsZS5tYXNrLCBtYXNrLCBzaXplb2YodTMyKSk7XFxuIDIxNjpcXHRcXHRtZW1jcHkoXFx1MDAyNmVudHJ5LVxcdTAwM2VtYW5nbGUudmFsLCB2YWx1ZSwgc2l6ZW9mKHUzMikpO1xcbiAyMTc6XFx0fVxcbiAyMTg6XFx0XFxuIDIxOTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqXFxuIDIyMDpcXHRmbG93X2FjdGlvbl9lbnRyeV9uZXh0KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG4gMjIxOlxcdHtcXG4gMjIyOlxcdFxcdGludCBpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAodW5saWtlbHkoZmxvd19ydWxlLVxcdTAwM2VydWxlLVxcdTAwM2VhY3Rpb24ubnVtX2VudHJpZXMgXFx1MDAzZT0gTkZfRkxPV19SVUxFX0FDVElPTl9NQVgpKVxcbiAyMjU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdGkgPSBmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcysrO1xcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRyZXR1cm4gXFx1MDAyNmZsb3dfcnVsZS1cXHUwMDNlcnVsZS1cXHUwMDNlYWN0aW9uLmVudHJpZXNbaV07XFxuIDIzMDpcXHR9XFxuIDIzMTpcXHRcXG4gMjMyOlxcdHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2V0aF9zcmMoc3RydWN0IG5ldCAqbmV0LFxcbiAyMzM6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gMjM0OlxcdFxcdFxcdFxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuIDIzNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxuIDIzNjpcXHR7XFxuIDIzNzpcXHRcXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5MCA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG4gMjM4OlxcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xcbiAyMzk6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGUsICp0aGlzX3R1cGxlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzozMS44OTA3MDgwNjFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4MzI5NzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gRmxvdyBBY3Rpb24gRW50cmllcyoqXG5cbk9rYXksIGxldCdzIGdldCByaWdodCB0byBpdC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG9uIHRoZSBzYW1lIHBhZ2UgcmVnYXJkaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIGhlcmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnlgLiBJIG5lZWQgdG8gcmV2aWV3IGFsbCBvZiBpdHMgbWVtYmVycywgZW5zdXJlIHRoYXQgSSBoYXZlIHRoZSBjb3JyZWN0IHVuZGVyc3RhbmRpbmcgb2YgZWFjaCBmaWVsZCBhbmQgdGhhdCBJIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgc3RydWN0dXJlIGNvcnJlY3RseSB1bmRlcnN0b29kLiBUaGlzIHN0cnVjdCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIHRoZSB3YXkgdGhpcyB3aG9sZSBzeXN0ZW0gb3BlcmF0ZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXQgY29tcGxldGVseSBpcyBub3Qgb3B0aW9uYWwuIEl0IG1pZ2h0IHNlZW0gbGlrZSBhIHNpbXBsZSBzdGVwLCBidXQgSSd2ZSBsZWFybmVkIHRoYXQgYSBzb2xpZCBmb3VuZGF0aW9uIGhlcmUgc2F2ZXMgaG91cnMgb2YgZGVidWdnaW5nIGxhdGVyIG9uLiBTbywgbGV0J3MgY29uZmlybSB0aGUgZGVmaW5pdGlvbiBhbmQgZ2V0IHN0YXJ0ZWQgZnJvbSBhIHNvbGlkIHBvc2l0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MzQuMDc0MDA3OTE2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA2NzAzNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaD0yMzQ9c3RydWN0IGZsb3dfYWN0aW9uX3BvbGljZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yNDgtXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg6MjQ5OnN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSB7XFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMjUwLVxcdGVudW0gZmxvd19hY3Rpb25faWRcXHRcXHRpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MzYuMTgwNzE4MjEyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzIxMzA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gRmxvdyBPZmZsb2FkKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBvZmZsb2FkIHNpdHVhdGlvbiBiZXR0ZXIsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgb3ZlciB0byBgaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmhgLCBhbmQgSSBmaWd1cmUgbGluZSAyNDkgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGllIHRoZXJlLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBob2xkcyBzb21lIGtleSBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyBhd2FpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzozOC4xMTI4NTE0MzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdFxcdHUzMiBleHR2YWw7XFxuIDI0NjpcXHRcXHR9IGV4Y2VlZCwgbm90ZXhjZWVkO1xcbiAyNDc6XFx0fTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5IHtcXG4gMjUwOlxcdFxcdGVudW0gZmxvd19hY3Rpb25faWRcXHRcXHRpZDtcXG4gMjUxOlxcdFxcdHUzMlxcdFxcdFxcdFxcdGh3X2luZGV4O1xcbiAyNTI6XFx0XFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGNvb2tpZTtcXG4gMjUzOlxcdFxcdHU2NFxcdFxcdFxcdFxcdG1pc3NfY29va2llO1xcbiAyNTQ6XFx0XFx0ZW51bSBmbG93X2FjdGlvbl9od19zdGF0c1xcdGh3X3N0YXRzO1xcbiAyNTU6XFx0XFx0YWN0aW9uX2Rlc3RyXFx0XFx0XFx0ZGVzdHJ1Y3RvcjtcXG4gMjU2OlxcdFxcdHZvaWRcXHRcXHRcXHRcXHQqZGVzdHJ1Y3Rvcl9wcml2O1xcbiAyNTc6XFx0XFx0dW5pb24ge1xcbiAyNTg6XFx0XFx0XFx0dTMyXFx0XFx0XFx0Y2hhaW5faW5kZXg7XFx0LyogRkxPV19BQ1RJT05fR09UTyAqL1xcbiAyNTk6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqZGV2O1xcdFxcdC8qIEZMT1dfQUNUSU9OX1JFRElSRUNUICovXFxuIDI2MDpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX1ZMQU4gKi9cXG4gMjYxOlxcdFxcdFxcdFxcdHUxNlxcdFxcdHZpZDtcXG4gMjYyOlxcdFxcdFxcdFxcdF9fYmUxNlxcdFxcdHByb3RvO1xcbiAyNjM6XFx0XFx0XFx0XFx0dThcXHRcXHRwcmlvO1xcbiAyNjQ6XFx0XFx0XFx0fSB2bGFuO1xcbiAyNjU6XFx0XFx0XFx0c3RydWN0IHtcXHRcXHRcXHRcXHQvKiBGTE9XX0FDVElPTl9WTEFOX1BVU0hfRVRIICovXFxuIDI2NjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyIGRzdFtFVEhfQUxFTl07XFxuIDI2NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyIHNyY1tFVEhfQUxFTl07XFxuIDI2ODpcXHRcXHRcXHR9IHZsYW5fcHVzaF9ldGg7XFxuIDI2OTpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX01BTkdMRSAqL1xcbiAyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogRkxPV19BQ1RJT05fQUREICovXFxuIDI3MTpcXHRcXHRcXHRcXHRlbnVtIGZsb3dfYWN0aW9uX21hbmdsZV9iYXNlIGh0eXBlO1xcbiAyNzI6XFx0XFx0XFx0XFx0dTMyXFx0XFx0b2Zmc2V0O1xcbiAyNzM6XFx0XFx0XFx0XFx0dTMyXFx0XFx0bWFzaztcXG4gMjc0OlxcdFxcdFxcdFxcdHUzMlxcdFxcdHZhbDtcXG4gMjc1OlxcdFxcdFxcdH0gbWFuZ2xlO1xcbiAyNzY6XFx0XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvXFx0KnR1bm5lbDtcXHQvKiBGTE9XX0FDVElPTl9UVU5ORUxfRU5DQVAgKi9cXG4gMjc3OlxcdFxcdFxcdHUzMlxcdFxcdFxcdGNzdW1fZmxhZ3M7XFx0LyogRkxPV19BQ1RJT05fQ1NVTSAqL1xcbiAyNzg6XFx0XFx0XFx0dTMyXFx0XFx0XFx0bWFyaztcXHRcXHQvKiBGTE9XX0FDVElPTl9NQVJLICovXFxuIDI3OTpcXHRcXHRcXHR1MTYgICAgICAgICAgICAgICAgICAgICBwdHlwZTsgICAgICAgICAgLyogRkxPV19BQ1RJT05fUFRZUEUgKi9cXG4gMjgwOlxcdFxcdFxcdHUxNlxcdFxcdFxcdHJ4X3F1ZXVlO1xcdC8qIEZMT1dfQUNUSU9OX1JYX1FVRVVFX01BUFBJTkcgKi9cXG4gMjgxOlxcdFxcdFxcdHUzMlxcdFxcdFxcdHByaW9yaXR5O1xcdC8qIEZMT1dfQUNUSU9OX1BSSU9SSVRZICovXFxuIDI4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX1FVRVVFICovXFxuIDI4MzpcXHRcXHRcXHRcXHR1MzJcXHRcXHRjdHg7XFxuIDI4NDpcXHRcXHRcXHRcXHR1MzJcXHRcXHRpbmRleDtcXG4gMjg1OlxcdFxcdFxcdFxcdHU4XFx0XFx0dmY7XFxuIDI4NjpcXHRcXHRcXHR9IHF1ZXVlO1xcbiAyODc6XFx0XFx0XFx0c3RydWN0IHtcXHRcXHRcXHRcXHQvKiBGTE9XX0FDVElPTl9TQU1QTEUgKi9cXG4gMjg4OlxcdFxcdFxcdFxcdHN0cnVjdCBwc2FtcGxlX2dyb3VwXFx0KnBzYW1wbGVfZ3JvdXA7XFxuIDI4OTpcXHRcXHRcXHRcXHR1MzJcXHRcXHRcXHRyYXRlO1xcbiAyOTA6XFx0XFx0XFx0XFx0dTMyXFx0XFx0XFx0dHJ1bmNfc2l6ZTtcXG4gMjkxOlxcdFxcdFxcdFxcdGJvb2xcXHRcXHRcXHR0cnVuY2F0ZTtcXG4gMjkyOlxcdFxcdFxcdH0gc2FtcGxlO1xcbiAyOTM6XFx0XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX3BvbGljZSBwb2xpY2U7XFx0LyogRkxPV19BQ1RJT05fUE9MSUNFICovXFxuIDI5NDpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX0NUICovXFxuIDI5NTpcXHRcXHRcXHRcXHRpbnQgYWN0aW9uO1xcbiAyOTY6XFx0XFx0XFx0XFx0dTE2IHpvbmU7XFxuIDI5NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlO1xcbiAyOTg6XFx0XFx0XFx0fSBjdDtcXG4gMjk5OlxcdFxcdFxcdHN0cnVjdCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjM4LjExMjkzNzU5MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDU0OTYzNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGTE9XX0FDVElPTl9QUklPUklUWSBVc2FnZSBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UgYWNyb3NzIGRpZmZlcmVudCBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zLCBzbyBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCB0aGUgcGF0Y2ggbm90ZXMuIEkgc2VlIHRoYXQgdGhlIGBhaXJvaGFfcHBlYCBhbmQgYG10a19wcGVfb2ZmbG9hZGAgZHJpdmVycyBhcmUgaGFuZGxpbmcgdGhpcyB3aXRoIGEgc2ltcGxlIGBjYXNlYCBzdGF0ZW1lbnQgYW5kIGBicmVha2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMuXG5cbk5vdywgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIEkgc2VlIHRoYXQgaWYgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIGhhcyBhIHZhbHVlLCB0aGV5IGFyZSBzZXR0aW5nIHRoZSBgc2tiLVx1MDAzZXByaW9yaXR5YC4gT2theSwgaW50ZXJlc3RpbmcuIEFuZCwgdGhlIHJldmVyc2UgaXMgaGFwcGVuaW5nIGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCB3aGVyZSB0aGV5J3JlIHRha2luZyBgcGt0LVx1MDAzZXNrYi1cdTAwM2Vwcmlvcml0eWAgYW5kIHNldHRpbmcgaXQgb24gdGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YC4gU2VlbXMgbGlrZSB3ZSdyZSBwYXNzaW5nIGl0IGJvdGggd2F5cy5cblxuVGhlbiwgdGhlcmUncyBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgYSBsaXR0bGUgbW9yZSBjb21wbGV4LiBIZXJlLCBpZiBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgaXMgc2V0LCBhIGBmbG93X2FjdGlvbl9lbnRyeWAgaXMgcG9wdWxhdGVkIHdpdGggYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBhbmQgdGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCB2YWx1ZS4gVGhpcyBpcyBsaWtlbHkgaG93IHRoZSBwcmlvcml0eSBpcyBiZWluZyAqcGVyc2lzdGVkKiBvciAqYWN0ZWQgdXBvbiogaW4gdGhlIGZsb3cgdGFibGUgb2ZmbG9hZC4gTWFrZXMgc2Vuc2UuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXdoZXJlKiB0aGlzIGlzIHVzZWQuIEl0J3MgdGltZSB0byBsZXZlcmFnZSBteSBncmVwIHNraWxscy4gTGV0J3MgZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg3MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjQyLjE2NzkwMzYxNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTA2NjYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGTE9XX0FDVElPTl9QUklPUklUWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM9MTU3PXN0YXRpYyBpbnQga3N6OTQ3N19mbG93ZXJfcGFyc2VfYWN0aW9uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X3RjX2Zsb3dlci5jLTE3Ni1cXHRcXHRzd2l0Y2ggKGFjdC1cXHUwMDNlaWQpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM6MTc3OlxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X3RjX2Zsb3dlci5jLTE3OC1cXHRcXHRcXHRpZiAoYWN0LVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlIEtTWjk0NzdfTUFYX1RDKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM9MjAyMT15dDkyMXhfYWNsX3J1bGVfZXh0X3BhcnNlX2Zsb3dfYWN0aW9uKHN0cnVjdCB5dDkyMXhfYWNsX3J1bGVfZXh0ICpydWxlZXh0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTIwNzYtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjIwNzc6XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtMjA3OC1cXHRcXHRcXHRpZiAoc2Vlbl9wcmlvcml0eSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDg4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTYzLVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE2NDpcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE2NS1cXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYz0yNzY9bXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMzgwLVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjM4MTpcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTM4Mi1cXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYz01OD1zdGF0aWMgaW50IG1seHN3X3NwX2Zsb3dlcl9wYXJzZV9hY3Rpb25zKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYy0yMTgtXFx0XFx0XFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2Zsb3dlci5jOjIxOTpcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2Zsb3dlci5jLTIyMC1cXHRcXHRcXHRlcnIgPSBtbHhzd19zcF9hY2xfcnVsZWlfYWN0X3ByaW9yaXR5KG1seHN3X3NwLCBydWxlaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X2Zsb3dlci5jPTI1Nz1zdGF0aWMgaW50IG9jZWxvdF9mbG93ZXJfcGFyc2VfYWN0aW9uKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCwgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYy00NjUtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmxvd2VyLmM6NDY2OlxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmxvd2VyLmMtNDY3LVxcdFxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZWJsb2NrX2lkICE9IFZDQVBfSVMxKSB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaD0xNTA9ZW51bSBmbG93X2FjdGlvbl9pZCB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0xNjgtXFx0RkxPV19BQ1RJT05fUFRZUEUsXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg6MTY5OlxcdEZMT1dfQUNUSU9OX1BSSU9SSVRZLFxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTE3MC1cXHRGTE9XX0FDVElPTl9SWF9RVUVVRV9NQVBQSU5HLFxcbi0tXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9MjQ5PXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yODAtXFx0XFx0dTE2XFx0XFx0XFx0cnhfcXVldWU7XFx0LyogRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyAqL1xcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjI4MTpcXHRcXHR1MzJcXHRcXHRcXHRwcmlvcml0eTtcXHQvKiBGTE9XX0FDVElPTl9QUklPUklUWSAqL1xcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTI4Mi1cXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX1FVRVVFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzA2OlxcdFxcdGVudHJ5LVxcdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1BSSU9SSVRZO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzA3LVxcdFxcdGVudHJ5LVxcdTAwM2Vwcmlvcml0eSA9IGZsb3ctXFx1MDAzZXByaW9yaXR5O1xcbi0tXFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM9MzcwPXN0YXRpYyBpbnQgdGNmX3NrYmVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtMzgzLVxcdFxcdH0gZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KSkge1xcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjM4NDpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTtcXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zODUtXFx0XFx0XFx0ZW50cnktXFx1MDAzZXByaW9yaXR5ID0gdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KTtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQwNy1cXHRcXHRlbHNlIGlmIChpc190Y2Zfc2tiZWRpdF9wcmlvcml0eShhY3QpKVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjQwODpcXHRcXHRcXHRmbF9hY3Rpb24tXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtNDA5LVxcdFxcdGVsc2UgaWYgKGlzX3RjZl9za2JlZGl0X3J4X3F1ZXVlX21hcHBpbmcoYWN0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6NDMuNjA4OTc0NDYyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk0NTA2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGbG93IE9mZmxvYWQgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBmbG93X29mZmxvYWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgaXRzIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcbnN0cnVjdCBmbG93X29mZmxvYWQge1xuXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoXHRcdHR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07XG5cdHN0cnVjdCBuZl9jb25uXHRcdFx0XHQqY3Q7XG5cdHVuc2lnbmVkIGxvbmdcdFx0XHRcdGZsYWdzO1xuXHR1MTZcdFx0XHRcdFx0dHlwZTtcblx0dTMyXHRcdFx0XHRcdHRpbWVvdXQ7XG5cdHUzMlx0XHRcdFx0XHRwcmlvcml0eTtcblx0c3RydWN0IHJjdV9oZWFkXHRcdFx0XHRyY3VfaGVhZDtcbn07XG5gYGBcblxuUmlnaHQsIHRoYXQgZ2l2ZXMgbWUgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrczogdGhlIHR1cGxlIGhhc2gsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHBvaW50ZXIsIHNvbWUgZmxhZ3MsIGEgdHlwZSwgdGltZW91dCwgcHJpb3JpdHkgYW5kIHRoZSBSQ1UgaGVhZC4gTm93IHRoZSBpbXBvcnRhbnQgcGFydCwgSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSBsb2NhdGlvbnMgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgY3JlYXRlZCwgY29waWVkLCB0cmFuc21pdHRlZCB0byB1c2VyIHNwYWNlLCBvciByZWFkIGZyb20uIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgY3J1Y2lhbCBsb2NhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6NDUuOTQ4NDI4Njk0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyMjUwNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmbG93X29mZmxvYWQgXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NTI9c3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNTUtXFx0aW50XFx0XFx0XFx0XFx0KCppbml0KShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo1NjpcXHRib29sXFx0XFx0XFx0XFx0KCpnYykoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC01Ny1cXHRpbnRcXHRcXHRcXHRcXHQoKnNldHVwKShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNjAtXFx0aW50XFx0XFx0XFx0XFx0KCphY3Rpb24pKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTYyLVxcdFxcdFxcdFxcdFxcdFxcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MTk0PWVudW0gZmxvd19vZmZsb2FkX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0xOTgtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDoxOTk6c3RydWN0IGZsb3dfb2ZmbG9hZCB7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yMDAtXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaFxcdFxcdHR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTIxMS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjIxMjp1bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTIxMy1cXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjE5PXN0cnVjdCBuZl9mbG93X3JvdXRlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQzLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ1OnZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDYtXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI4Nz1uZl9mbG93X3RhYmxlX29mZmxvYWRfZGVsX2NiKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMwNi1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMwNzp2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMDgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzA5LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzEwOmludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzExLXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMxMjpcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGJvb2wgZm9yY2UpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzEzLVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMzA9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzEtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMzI6dm9pZCBmbG93X29mZmxvYWRfdGVhcmRvd24oc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzMtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMzQ6dm9pZCBuZl9mbG93X3NuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzM1LVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzYtXFx0XFx0ICAgICAgIHU4IHByb3RvY29sLCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMzNzp2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzgtXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzY4PXZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNjk6XFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzcwLXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzcxOlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNzItdm9pZCBuZl9mbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM3MzpcXHRcXHRcXHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNzQtdm9pZCBuZl9mbG93X29mZmxvYWRfc3RhdHMoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6Mzc1OlxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzc2LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zODA9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM4Mi1cXHRcXHRcXHRcXHRlbnVtIGZsb3dfYmxvY2tfY29tbWFuZCBjbWQpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzgzOmludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zODQtXFx0XFx0XFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zODUtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozODY6aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM4Ny1cXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0zNj1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDAtXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqbmZfZmxvd190YWJsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6NDE6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqbmZfZmxvdztcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIxPXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMjpmbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTIzLVxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NTM6c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU0LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU1OlxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01Ni1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODc9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjk3OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTk4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTU3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTU4OnN0YXRpYyB2b2lkIG5mdF9mbG93X2RzdF9yZWxlYXNlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNTktXFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE2My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE2NDp2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNjUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE3MT1FWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfcm91dGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzItXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNzM6c3RhdGljIGlubGluZSBib29sIG5mX2Zsb3dfaGFzX2V4cGlyZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE3NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE3OD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZml4dXBfdGNwKHN0cnVjdCBuZl9jb25uICpjdCwgdTggdGNwX3N0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yMDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2ZpeHVwX2N0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yMDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNTQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNTU6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX3JlbGVhc2Uoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI1Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI2MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI2MTp2b2lkIGZsb3dfb2ZmbG9hZF9mcmVlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMDE9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMDgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMDk6dW5zaWduZWQgbG9uZyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMxMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjMyODppbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzYwPXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM2MTpcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGJvb2wgZm9yY2UpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zODA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzgxOlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM4Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM5Mjp2b2lkIGZsb3dfb2ZmbG9hZF90ZWFyZG93bihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzkzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDAxPWZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA0LVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQwNTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA2LVxcdGludCBkaXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNj1uZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNy1cXHRcXHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI5LVxcdFxcdCAgICAgIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQzMi1cXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGh0aTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQzMzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDM0LVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz00NjA9c3RhdGljIGJvb2wgbmZfZmxvd19jdXN0b21fZ2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQ2MTpcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDYyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTY4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1Njk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02Mzk9c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY1MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY1Mjp2b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NTMtXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Njc2PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfc25hdF9wb3J0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY3ODp2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzktXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCB0aG9mZiwgdTggcHJvdG9jb2wsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcyOD1zdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjcyOTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz00NT1zdGF0aWMgaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjQ2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00Ny1cXHRcXHRcXHRcXHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMjQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MjU6c3RhdGljIGludCBuZl9mbG93X3N0YXRlX2NoZWNrKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGludCBwcm90byxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9Njk9c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXBfbDRwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgzOnN0YXRpYyB2b2lkIG5mX2Zsb3dfc25hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDY6c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjk6c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXAoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMzAtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDczLVxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDc0OlxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDc1LVxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODAxPXN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODA3LVxcdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwODpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwOS1cXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTkyND1zdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2X2w0cHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKmlwNmgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MzctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTM4OnN0YXRpYyB2b2lkIG5mX2Zsb3dfc25hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTM5LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICppcDZoLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjk2MTpzdGF0aWMgdm9pZCBuZl9mbG93X2RuYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk2Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5ODQ6c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDY3PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA3Mi1cXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNzM6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDc0LVxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTEzMj1zdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMzktXFx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE0MDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExNDEtXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIzMj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfc3JjKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIzMzpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM0LVxcdFxcdFxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTI4Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfZHN0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjI4MzpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjg0LVxcdFxcdFxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM0Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MzQzOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM0NC1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM3Mz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Mzc0OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3NS1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQyMz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDI0OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNS1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ0OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDQ5OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ1MC1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjQ3MzpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9sNHByb3RvKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00NzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00OTI9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjQ5MzpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00OTQtXFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01MjY9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjUyNzpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01MjgtXFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01NjA9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9jaGVja3N1bShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1NjE6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU2Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTU4NT1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9yZWRpcmVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1ODY6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01ODctXFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjYyNTpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9lbmNhcF90dW5uZWwoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNi1cXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY1NDpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9kZWNhcF90dW5uZWwoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1NS1cXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODQtXFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3NTQ6aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1NS1cXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NzgxPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4MzppbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzg0LVxcdFxcdFxcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDk9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MTQtXFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgxNTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93ID0gb2ZmbG9hZC1cXHUwMDNlZmxvdztcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgxNi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpvdGhlcl9kc3QgPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05MTI9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTEzOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTE0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwOTM9bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA5NDpcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB1bnNpZ25lZCBpbnQgY21kKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA5NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMTQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTE1OnN0YXRpYyBib29sIG5mX2Zsb3dfb2ZmbG9hZF91bnN1cHBvcnRlZChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTExNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMjQ9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTI1OlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTM2PXZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTM3OlxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzOC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNDY9dm9pZCBuZl9mbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNDc6XFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTQ4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1OT12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTYwOlxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTYxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01OC1cXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1OTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTYwLVxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MjQ0PXN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjQ1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjQ2LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIHRkaXIsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyODg6c3RhdGljIGJvb2wgdGNmX2N0X2Zsb3dfaXNfb3V0ZGF0ZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0zOTc9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHV0KHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGNfaWZpZHgoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnksXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwNy1cXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dCwgdTggZGlyKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEzOnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxNC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQyOC1cXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0Mjk6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQzMC1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTY1OD1zdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjY3LVxcdGJvb2wgZm9yY2VfcmVmcmVzaCA9IGZhbHNlO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo2Njg6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjY5LVxcdHN0cnVjdCBuZl9jb25uICpjdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6NDcuNDgwNjg1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2NDQyOTA3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLCBidXQgSSB3YW50IHRvIGdldCBhIGNvbmNyZXRlIGdyYXNwIG9mIGhvdyB0aGUgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZXZhbHVhdGVkIGFuZCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIG9mZmxvYWQgaG9va3MsIHRoZSBydWxlIG1hdGNoaW5nLCBhbmQgdGhlIGFjdHVhbCBwYWNrZXQgaGFuZGxpbmcgbG9naWMuIEknbGwgbmVlZCB0byByZWFsbHkgcGFyc2UgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJuIHRoaXMgcHJvY2Vzcy4gVGhpcyB3aWxsIGhlbHAgbWUgZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQxNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjU3LjEyNDk3ODI0NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDU6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykpXFxuIDEwNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbiAxMDk6XFx0XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4gMTEwOlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xcbiAxMTM6XFx0XFx0aWYgKCFmbG93KVxcbiAxMTQ6XFx0XFx0XFx0Z290byBlcnJfZmxvd19hbGxvYztcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXFx1MDAyNnJvdXRlKTtcXG4gMTE3OlxcdFxcdGlmICh0Y3BoKVxcbiAxMTg6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdC8qIFRoZSBwYWNrZXRzIHRoZSBmbG93IGZvcndhcmRzIGluIGl0cyBwbGFjZSBieXBhc3MgdGhlIHJ1bGVzIHRoYXRcXG4gMTIxOlxcdFxcdCAqIGNsYXNzaWZpZWQgdGhpcyBvbmU7IGNhcnJ5IHRoZSByZXN1bHQgd2l0aCB0aGUgZmxvdy5cXG4gMTIyOlxcdFxcdCAqL1xcbiAxMjM6XFx0XFx0Zmxvdy1cXHUwMDNlcHJpb3JpdHkgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJpb3JpdHk7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuIDEyNjpcXHRcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxuIDEyNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTI4OlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfYWRkO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRyZXR1cm47XFxuIDEzMTpcXHRcXG4gMTMyOlxcdGVycl9mbG93X2FkZDpcXG4gMTMzOlxcdFxcdGZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpO1xcbiAxMzQ6XFx0ZXJyX2Zsb3dfYWxsb2M6XFxuIDEzNTpcXHRcXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XFxuIDEzNjpcXHRcXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xcbiAxMzc6XFx0ZXJyX2Zsb3dfcm91dGU6XFxuIDEzODpcXHRcXHRjbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cyk7XFxuIDEzOTpcXHRvdXQ6XFxuIDE0MDpcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuIDE0MTpcXHR9XFxuIDE0MjpcXHRcXG4gMTQzOlxcdHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiAxNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjU3LjEyNTA0OTQzNFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc2NTk2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDpcblxuKipBbmFseXppbmcgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBJUHY0IGFuZCBJUHY2IGZvcndhcmRpbmcuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBsaWVzIGluIHRoZSBmdW5jdGlvbnMgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB0ZXJtcyBvZiBhY3R1YWxseSBmb3J3YXJkaW5nIHRoZSBvZmZsb2FkZWQgZmxvd3MuIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgZm9yd2FyZGluZyBkZWNpc2lvbiBhbmQgYWN0aW9ucyBhcmUgbWFkZS4gSSdtIGhvcGluZyB0byBkaXNjb3ZlciB0aGUga2V5IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjUwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODowMC45MDE2NDk0NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXG4gNTAxOlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XFxuIDUwNDpcXHRcXHR0aG9mZiAtPSBjdHgtXFx1MDAzZW9mZnNldDtcXG4gNTA1OlxcdFxcbiA1MDY6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIDUwNzpcXHRcXHRuZl9mbG93X25hdF9pcChmbG93LCBza2IsIHRob2ZmLCBkaXIsIGlwaCk7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdGlwX2RlY3JlYXNlX3R0bChpcGgpO1xcbiA1MTA6XFx0XFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAoZmxvdy1cXHUwMDNlcHJpb3JpdHkpXFxuIDUxMzpcXHRcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gZmxvdy1cXHUwMDNlcHJpb3JpdHk7XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdGlmIChmbG93X3RhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxcbiA1MTY6XFx0XFx0XFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cXHUwMDNlY3QsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyLCBza2ItXFx1MDAzZWxlbik7XFxuIDUxNzpcXHRcXG4gNTE4OlxcdFxcdHJldHVybiAxO1xcbiA1MTk6XFx0fVxcbiA1MjA6XFx0XFxuIDUyMTpcXHQvKiBTaW1pbGFyIHRvIHNrYl92bGFuX3B1c2guICovXFxuIDUyMjpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bywgdTE2IGlkLFxcbiA1MjM6XFx0XFx0XFx0XFx0ICAgICB1MzIgbmVlZGVkX2hlYWRyb29tKVxcbiA1MjQ6XFx0e1xcbiA1MjU6XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gNTI2OlxcdFxcdFxcdHN0cnVjdCB2bGFuX2hkciAqdmhkcjtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSArIFZMQU5fSExFTikpXFxuIDUyOTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdFxcdF9fc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pO1xcbiA1MzI6XFx0XFx0XFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4gNTMzOlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciAtPSBWTEFOX0hMRU47XFxuIDUzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MDAuOTAxNzU3NTg0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjM5NTY5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSVB2NiBGbG93IE9mZmxvYWQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIG1vZHVsZS4gSSByZW1lbWJlciB3ZSB3ZXJlIGhhdmluZyBzb21lIGlzc3VlcyBhcm91bmQgbGluZSAxMTAwLCBzbyBsZXQncyBqdW1wIHJpZ2h0IHRoZXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBzb21ldGhpbmcgbWlnaHQgYmUgYW1pc3MsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBJUHY2IGZvcndhcmRpbmcgcGF0aC4gV2Uga25vdyB0aGUgY29tcGxleGl0aWVzIGhlcmUuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDY5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODowNS40NjU3MTY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTU6XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHRob2ZmICsgY3R4LVxcdTAwM2VoZHJzaXplKSlcXG4xMDk4OlxcdFxcdFxcdHJldHVybiAtMTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgZmFsc2UpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRuZl9mbG93X2VuY2FwX3BvcChjdHgsIHNrYiwgdHVwbGVoYXNoKTtcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuMTEwNTpcXHRcXHRuZl9mbG93X25hdF9pcHY2KGZsb3csIHNrYiwgZGlyLCBpcDZoKTtcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aXA2aC1cXHUwMDNlaG9wX2xpbWl0LS07XFxuMTEwODpcXHRcXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdGlmIChmbG93LVxcdTAwM2Vwcmlvcml0eSlcXG4xMTExOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBmbG93LVxcdTAwM2Vwcmlvcml0eTtcXG4xMTEyOlxcdFxcbjExMTM6XFx0XFx0aWYgKGZsb3dfdGFibGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXFxuMTExNDpcXHRcXHRcXHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVxcdTAwM2VjdCwgdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXIsIHNrYi1cXHUwMDNlbGVuKTtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0cmV0dXJuIDE7XFxuMTExNzpcXHR9XFxuMTExODpcXHRcXG4xMTE5OlxcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG4xMTIwOlxcdG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbjExMjE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuMTEyMjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMTIzOlxcdHtcXG4xMTI0OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuMTEyNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MDUuNDY1ODEyNThaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUzODY2ODk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRkxPV19BQ1RJT05fUFJJT1JJVFkgaW4gRXRoZXJuZXQgT2ZmbG9hZCBEcml2ZXJzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jbHVzaW9uIG9mIGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlc2Ugc3BlY2lmaWMgZXRoZXJuZXQgb2ZmbG9hZCBkcml2ZXJzLCBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYC4gTG9va2luZyBhdCB0aGUgZGlmZnMsIGl0J3MgY2xlYXIgdGhleSBib3RoIG5vdyBpbmNsdWRlIGEgYGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFlgIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGBfcmVwbGFjZWAgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gc3VwcG9ydCBvciBhY2tub3dsZWRnZSBhIHByaW9yaXR5LXJlbGF0ZWQgZmxvdyBhY3Rpb24gZHVyaW5nIG9mZmxvYWQgcmVwbGFjZW1lbnQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHM/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGlzIGludHJvZHVjdGlvbiBwcmVzZW50cyBhbnkgb2J2aW91cyBidWdzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIGluIHRoZSBjb2RlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhhdCBhIG5ldyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGNhc2UgbWlnaHQgbm90IGJlIGltcGxlbWVudGVkIGZ1bGx5IGV2ZXJ5d2hlcmUgaXQgbmVlZHMgdG8gYmUsIG9yIHRoYXQgdGhlIGN1cnJlbnQgaGFuZGxpbmcgb2YgdGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgY2FzZSBtaWdodCBiZSBpbmNvbXBsZXRlLlxuXG5OZXh0LCBJJ2xsIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNoYW5nZSByaXBwbGVzIG91dC4gRG9lcyB0aGUgY2hhbmdlIHRvIHRoZXNlIHR3byBkcml2ZXJzIGhhdmUgaW1wbGljYXRpb25zIGluIG90aGVyIHJlbGF0ZWQgZXRoZXJuZXQgb2ZmbG9hZCBkcml2ZXJzPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBvciBhbnkgcG90ZW50aWFsIHJlbGF0ZWQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlbS5cblxuRmluYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB3ZSBoYW5kbGUgdW5rbm93biBhY3Rpb24gSURzIGNvcnJlY3RseS4gSG93IGRvIG90aGVyIGZsb3dlci9vZmZsb2FkIGRyaXZlcnMgZGVhbCB3aXRoIGZsb3cgYWN0aW9ucyB0aGV5IGRvbid0IGV4cGxpY2l0bHkgcmVjb2duaXplPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGdyYWNlZnVsbHkgaGFuZGxpbmcgYW55IGZsb3cgYWN0aW9ucyB3ZSBkb24ndCBmdWxseSBzdXBwb3J0IHNvIHRoYXQgd2UgZG9uJ3QgaW50cm9kdWNlIGluc3RhYmlsaXR5LiBUaGlzIGlzIGFib3V0IHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MTAuMDA0NDg1MDM3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgzODYxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmYXVsdDpcXFxccypyZXR1cm4gLUVPUE5PVFNVUFA7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jPTE2MjA9aW50IG12cHAyX2V0aHRvb2xfcnhmaF9zZXQoc3RydWN0IG12cHAyX3BvcnQgKnBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jLTE2NTItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuYzoxNjUzOlxcdGRlZmF1bHQ6IHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jLTE2NTQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODoxMC42MDI4NzU1NThaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1MjYwMzg3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmlzayBBc3Nlc3NtZW50IGZvciBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBmbG93IG9mZmxvYWQgcGF0Y2guIE15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggdGhlc2UgdHlwZXMgb2YgY2hhbmdlcywgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcGF0Y2ggaW5hZHZlcnRlbnRseSBjcmVhdGVzIGEgc2NlbmFyaW8gd2hlcmUga2VybmVsIGRhdGEsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZmxvdyBvZmZsb2FkLCBtaWdodCBiZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBiZWZvcmUgaXQncyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5NeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBsaWtlIGBmbG93X2FjdGlvbl9iYXNpY19od19zdGF0c190eXBlc19jaGVja2Agb3IgYW55IHNpbWlsYXIgcm91dGluZXMgdGhhdCBwbGF5IGEgcm9sZSBpbiBmbG93IG9mZmxvYWQuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUga2V5IGFyZWFzLiBUaGUgY3J1eCBvZiB0aGUgbWF0dGVyIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCwgaW4gYW55IHdheSwgaW1wYWN0cyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4cG9zdXJlIG9mIHJlbGV2YW50IGtlcm5lbCBkYXRhLlxuXG5Ob3csIGxldCdzIHN5c3RlbWF0aWNhbGx5IGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYS4gRmlyc3QgdXAsIHdlJ3JlIGxvb2tpbmcgZm9yIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgZ2V0IHNlbnQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNrYiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuIEFyZSB0aGVyZSBhbnkgbmV3IGNhbmRpZGF0ZXMgaW4gdGhpcyBwYXRjaD9cblxuSSdtIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHRoZSBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgZmllbGQuIFdoaWxlIGBza2ItXHUwMDNlcHJpb3JpdHlgIGlzIHN0YW5kYXJkIGtlcm5lbCBtZXRhZGF0YSBhbmQgc2hvdWxkIGJlIGZpbmUsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGluIGFueSB3YXkuIE15IG5leHQgc3RlcCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlcy4gRG9lcyBgY3RuZXRsaW5rYCwgYG5mdGFibGVzYCwgb3IgYW55IG90aGVyIHJlbGV2YW50IG5ldGxpbmsgY29kZSBleHBvc2UgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIG9yIGFueSBwYXJ0cyBvZiB0aGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIHN0cnVjdHVyZT8gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBuZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBgbmZfZmxvd190YWJsZV9uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IGRhdGEgZHVtcHMuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3JlIG5vdCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aHJvdWdoIGEgbmV0bGluayBhdHRyaWJ1dGUgb3Igc2ltaWxhciBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM4OjMwLjEyODkxNjY2M1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NTAyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVxcdFxcdCs9IG5mdF9jdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXFx0Kz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcXHRcXHQrPSBuZnRfbGltaXQub1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTE3MT12b2lkIG5mdF9vZmZsb2FkX3VwZGF0ZV9kZXBlbmRlbmN5KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xODgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjE4OTpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2NvbW1vbl9pbml0KHN0cnVjdCBmbG93X2Nsc19jb21tb25fb2ZmbG9hZCAqY29tbW9uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xOTAtXFx0XFx0XFx0XFx0XFx0IF9fYmUxNiBwcm90bywgaW50IHByaW9yaXR5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTI0Nj1zdGF0aWMgdm9pZCBuZnRfZmxvd19jbHNfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyNjA6XFx0bmZ0X2Zsb3dfb2ZmbG9hZF9jb21tb25faW5pdChcXHUwMDI2Y2xzX2Zsb3ctXFx1MDAzZWNvbW1vbiwgcHJvdG8sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2MS1cXHRcXHRcXHRcXHQgICAgIGJhc2VjaGFpbi1cXHUwMDNlb3BzLnByaW9yaXR5LCBleHRhY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MjY4OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF9jbWQoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2OS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyODg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3J1bGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI4OS1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9ydWxlICpydWxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI5NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6Mjk1OlxcdHJldHVybiBuZnRfZmxvd19vZmZsb2FkX2NtZChjaGFpbiwgcnVsZSwgZmxvdywgY29tbWFuZCwgXFx1MDAyNmNsc19mbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjk2LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz0yOTg9aW50IG5mdF9mbG93X3J1bGVfc3RhdHMoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzA0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzozMDU6XFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9jbWQoY2hhaW4sIHJ1bGUsIE5VTEwsIEZMT1dfQ0xTX1NUQVRTLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMDYtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmNsc19mbG93KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMTctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjMxODpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfYmluZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzE5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMjQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjMyNTpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfdW5iaW5kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMjYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MzUwPXN0YXRpYyBpbnQgbmZ0X2Jsb2NrX3NldHVwKHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTM1Ny1cXHRjYXNlIEZMT1dfQkxPQ0tfQklORDpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzU4OlxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfYmluZChibywgYmFzZWNoYWluKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzU5LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zNjAtXFx0Y2FzZSBGTE9XX0JMT0NLX1VOQklORDpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzYxOlxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfdW5iaW5kKGJvLCBiYXNlY2hhaW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zNjItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDA0PXN0YXRpYyB2b2lkIG5mdF9pbmRyX2Jsb2NrX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTQxOC1cXHRsaXN0X21vdmUoXFx1MDAyNmJsb2NrX2NiLVxcdTAwM2VsaXN0LCBcXHUwMDI2Ym8uY2JfbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjQxOTpcXHRuZnRfZmxvd19vZmZsb2FkX3VuYmluZChcXHUwMDI2Ym8sIGJhc2VjaGFpbik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTQyMC1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWNvbW1pdF9tdXRleCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDU4PXN0YXRpYyBpbnQgbmZ0X2Zsb3dfYmxvY2tfY2hhaW4oc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNDk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo0OTc6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2NoYWluKHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLCB1OCAqcHBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNDk4LVxcdFxcdFxcdFxcdCAgZW51bSBmbG93X2Jsb2NrX2NvbW1hbmQgY21kKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzMS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTMyOlxcdFxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY2hhaW4obmZ0X3RyYW5zX2NoYWluKHRyYW5zKSwgTlVMTCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRkxPV19CTE9DS19VTkJJTkQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzOC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTM5OlxcdFxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY2hhaW4obmZ0X3RyYW5zX2NoYWluKHRyYW5zKSwgTlVMTCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0NjpcXHRcXHRcXHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX3J1bGUobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mdF90cmFuc19ydWxlKHRyYW5zKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU1NDpcXHRcXHRcXHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX3J1bGUobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mdF90cmFuc19ydWxlKHRyYW5zKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01NjY9aW50IG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9jb21taXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4My1cXHRcXHRcXHRwb2xpY3kgPSBuZnRfdHJhbnNfY2hhaW5fcG9saWN5KHRyYW5zKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg0OlxcdFxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY2hhaW4obmZ0X3RyYW5zX2NoYWluKHRyYW5zKSwgXFx1MDAyNnBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTEtXFx0XFx0XFx0cG9saWN5ID0gbmZ0X3RyYW5zX2NoYWluX3BvbGljeSh0cmFucyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU5MjpcXHRcXHRcXHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2NoYWluKG5mdF90cmFuc19jaGFpbih0cmFucyksIFxcdTAwMjZwb2xpY3ksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU5My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIEZMT1dfQkxPQ0tfVU5CSU5EKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MDMtXFx0XFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MDQ6XFx0XFx0XFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9ydWxlKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MTM6XFx0XFx0XFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9ydWxlKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMDpzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjEtXFx0c3RydWN0IG5mdF9mbG93dGFibGVcXHQqZmxvd3RhYmxlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjQ6c3RhdGljIGJvb2wgbmZ0X2Zsb3dfb2ZmbG9hZF9za2lwKHN0cnVjdCBza19idWZmICpza2IsIGludCBmYW1pbHkpXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NDE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2N0X3RjcChzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy00OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1MDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTUxLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTMte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjU0OlxcdHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01NS1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VkYXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNjMtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NjQ6XFx0aWYgKG5mdF9mbG93X29mZmxvYWRfc2tpcChwa3QtXFx1MDAzZXNrYiwgbmZ0X3BmKHBrdCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTY1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE0MzpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNDQtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNTUtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTU2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZmxvd19vZmZsb2FkX3BvbGljeVtORlRBX0ZMT1dfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTU3LVxcdFtORlRBX0ZMT1dfVEFCTEVfTkFNRV1cXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE2MTpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE2Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTY0LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxNjU6XFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE2Ni1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXFx1MDAzZW5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xODQtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTg1OnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE4Ni1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xODgte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE4OTpcXHRzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTkwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE5NDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2FjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk1LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOTYte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE5NzpcXHRzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIwMjpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDMtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDctXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjA4OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjA5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjEwLXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMTE6XFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIxMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIyMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjI6c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjM6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI0OlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyNTpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9mbG93X29mZmxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjY6XFx0LmV2YWxcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjc6XFx0LmluaXRcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjg6XFx0LmFjdGl2YXRlXFx0PSBuZnRfZmxvd19vZmZsb2FkX2FjdGl2YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyOTpcXHQuZGVhY3RpdmF0ZVxcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9kZWFjdGl2YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMDpcXHQuZGVzdHJveVxcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9kZXN0cm95LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMTpcXHQudmFsaWRhdGVcXHQ9IG5mdF9mbG93X29mZmxvYWRfdmFsaWRhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjMyOlxcdC5kdW1wXFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLX07XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzNTpzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjM2LVxcdC5uYW1lXFx0XFx0PSBcXFwiZmxvd19vZmZsb2FkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzc6XFx0Lm9wc1xcdFxcdD0gXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzODpcXHQucG9saWN5XFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzktXFx0Lm1heGF0dHJcXHQ9IE5GVEFfRkxPV19NQVgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yNTY9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjI2MDpzdGF0aWMgaW50IF9faW5pdCBuZnRfZmxvd19vZmZsb2FkX21vZHVsZV9pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjYxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyNjg6XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjY5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjc5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjI4MDpzdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI4MS17XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjgyOlxcdG5mdF91bnJlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjgzLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI4NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyODY6bW9kdWxlX2luaXQobmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6Mjg3Om1vZHVsZV9leGl0KG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2V4aXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI4OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MzAuMTc3NDY4NjkzWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzQzNzc5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQWxsIENsZWFyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ3ZlIHJldmlld2VkIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byB0aGUgYHByaW9yaXR5YCBmaWVsZCB3aXRoaW4gdGhlIGZsb3cgb2ZmbG9hZCBzeXN0ZW0gYW5kIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIEtNU0FOIGNvbmNlcm5zLiBUaGUgaW5pdGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYGZsb3dfb2ZmbG9hZGAgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCBndWFyYW50ZWVzIHRoYXQgdGhlIGBwcmlvcml0eWAgZmllbGQgaXMgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBUaGVuLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBleHBsaWNpdGx5IHNldHMgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIGJhc2VkIG9uIHRoZSBwYWNrZXQncyBTS0IgcHJpb3JpdHkuIFRoaXMgaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdGhlbiByZWFkIGFuZCB1c2VkIHRvIHNldCB0aGUgU0tCIHByaW9yaXR5IGluIHRoZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucywgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGNvZGUgcGF0aCB0aGF0IHVzZXMgYGZsb3dfYWN0aW9uX2VudHJ5YCBvYnRhaW5lZCBmcm9tIGBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSlgIGFsc28gYXBwZWFycyBzYWZlLiBUaGUgYGZsb3dfcnVsZWAgaXRzZWxmIGlzIGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2NfZmxleGAgZHVyaW5nIGBmbG93X3J1bGVfYWxsb2NgLlxuXG5JIHNlZSB0aGF0IGRyaXZlciBoYW5kbGVycyBsaWtlIHRob3NlIGluIGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgIGV4cGxpY2l0bHkgYWNjb3VudCBmb3IgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBieSBhZGRpbmcgdGhlIGNhc2UgZm9yIHRoYXQgYWN0aW9uLCBlbGltaW5hdGluZyBwb3RlbnRpYWwgaXNzdWVzIG9mIGZhbGxpbmcgaW50byB0aGUgZGVmYXVsdCBjYXNlLlxuXG5JbiBlc3NlbmNlLCB0aGVyZSBhcmUgbm8gaWRlbnRpZmllZCBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCwgbm8gdW5jaGVja2VkIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBtYW5pcHVsYXRlIGxlbmd0aCBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGlzIHRob3JvdWdoIGFuYWx5c2lzLCBJIGFtIGNvbWZvcnRhYmxlIHdpdGggdGhlIGNvbmNsdXNpb24gdGhhdCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBmaW5kaW5ncywgYW5kIEkgYW0gcmVhZHkgdG8gcHJlcGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDc3LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODozNC40NTE4NDk0MjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxcbi0gU3RydWN0IGBmbG93X29mZmxvYWRgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGBmbG93X29mZmxvYWRfYWxsb2NgKSwgemVyb2luZyBhbGwgZmllbGRzIGluY2x1ZGluZyB0aGUgbmV3IGBwcmlvcml0eWAgZmllbGQuXFxuLSBUaGUgYGZsb3ctXFx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJpb3JpdHlgIGluIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGFuZCBsYXRlciByZWFkIHRvIHNldCBgc2tiLVxcdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxcbi0gRmxvdyBydWxlcyBhcmUgYWxsb2NhdGVkIHZpYSBgZmxvd19ydWxlX2FsbG9jYCB1c2luZyBga3phbGxvY19mbGV4YCwgZW5zdXJpbmcgYWxsIGFjdGlvbiBlbnRyaWVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbi0gTm8gdW5pbml0aWFsaXplZCBkYXRhLCBzdGFjay9oZWFwIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmbG93IHByaW9yaXR5IHRyYWNraW5nIHRvIHRoZSBOZXRmaWx0ZXIgZmxvd3RhYmxlIGZhc3RwYXRoIGFuZCBvZmZsb2FkIHN1YnN5c3RlbS4gXFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cXG4tIFRoZSBgZmxvdy1cXHUwMDNlcHJpb3JpdHlgIGZpZWxkIGlzIGFzc2lnbmVkIGZyb20gYHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcmlvcml0eWAgaW4gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgYW5kIGxhdGVyIHJlYWQgdG8gc2V0IGBza2ItXFx1MDAzZXByaW9yaXR5YCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIG9yIGFkZGVkIGFzIGEgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBmbG93IGFjdGlvbiBlbnRyeSBpbiBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAuXFxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIGRhdGEsIHN0YWNrL2hlYXAgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2lfv4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 12:35:04 +0000 UTC FinishedAt: 2026-09-03 12:38:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS" ], "series_id": "b4e67ed6-75ba-4808-8d7c-9977a18a3669" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_flow_offload_eval", "nf_flow_offload_forward", "nf_flow_offload_ipv6_forward", "nf_flow_offload_ip_hook", "nf_flow_offload_ipv6_hook", "nf_flow_rule_route_common", "nf_flow_rule_route_ipv4", "nf_flow_rule_route_ipv6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cbi0gVGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZCBsb2dpYyB0byBjYXB0dXJlIHBhY2tldCBwcmlvcml0eSBhbmQgcHJvcGFnYXRlIGl0IGR1cmluZyBzb2Z0d2FyZSBmbG93IHRhYmxlIGZvcndhcmRpbmcgKElQdjQvSVB2NikgYXMgd2VsbCBhcyBvZmZsb2FkIHJ1bGUgY29uc3RydWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIGZhc3RwYXRocyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGluIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMTM0MjljMTdjOWVkYWE2ZmQ1NzFlNzdiYTZhMmIwMjkwZTkwZjA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozNjoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XG5pbmRleCBkNzU3YzIxYzEwZjJkLi41ODQ0YWIxOWFlYzY2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XG5AQCAtNzEsNyAmIzQzOzcxLDkgQEAgZm9yd2FyZGluZyBwYXRoIGluY2x1ZGluZyB0aGUgTmV0ZmlsdGVyIGhvb2tzIGFuZCB0aGUgZmxvd3RhYmxlIGZhc3RwYXRoIGJ5cGFzcy5cbiBcbiBUaGUgZmxvd3RhYmxlIGVudHJ5IGFsc28gc3RvcmVzIHRoZSBOQVQgY29uZmlndXJhdGlvbiwgc28gYWxsIHBhY2tldHMgYXJlXG4gbWFuZ2xlZCBhY2NvcmRpbmcgdG8gdGhlIE5BVCBwb2xpY3kgdGhhdCBpcyBzcGVjaWZpZWQgZnJvbSB0aGUgY2xhc3NpYyBJUFxuLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWRcbiYjNDM7Zm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3dcbiYjNDM7YWxzbyBzdG9yZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBwYWNrZXQgdGhhdCBjcmVhdGVkIGl0LCBzbyBhIHByaW9yaXR5IHNldCBiZWZvcmVcbiYjNDM7YGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkXG4gdHJhZmZpYyBpcyBwYXNzZWQgdXAgdG8gZm9sbG93IHRoZSBjbGFzc2ljIElQIGZvcndhcmRpbmcgcGF0aCBnaXZlbiB0aGF0IHRoZVxuIHRyYW5zcG9ydCBoZWFkZXIgaXMgbWlzc2luZywgaW4gdGhpcyBjYXNlLCBmbG93dGFibGUgbG9va3VwcyBhcmUgbm90IHBvc3NpYmxlLlxuIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggOTI2MTE4MDI4MDFlYS4uMmFmY2U3NmFkMTMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0xMTYxLDYgJiM0MzsxMTYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4gXHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxuIFx0XHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fVkxBTl9QVVNIOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbmluZGV4IDk5YjI4YWFhN2NjNDcuLjRlZTk5ZThlNGEzNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC0zNzgsNiAmIzQzOzM3OCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbiBcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjIzMjE4YzhjYmMzZGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMjAyLDYgJiM0MzsyMDIsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkIHtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRcdGZsYWdzO1xuIFx0dTE2XHRcdFx0XHRcdHR5cGU7XG4gXHR1MzJcdFx0XHRcdFx0dGltZW91dDtcbiYjNDM7XHR1MzJcdFx0XHRcdFx0cHJpb3JpdHk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRcdHJjdV9oZWFkO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uYzg1ZTJkNjA4YzMyOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTUwOSw2ICYjNDM7NTA5LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aXBfZGVjcmVhc2VfdHRsKGlwaCk7XG4gXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gXG4mIzQzO1x0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpXG4mIzQzO1x0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuJiM0MztcbiBcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiBcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gXG5AQCAtMTEwNCw2ICYjNDM7MTEwNyw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aXA2aC1cdTAwM2Vob3BfbGltaXQtLTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbiYjNDM7XHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbiYjNDM7XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4mIzQzO1xuIFx0aWYgKGZsb3dfdGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxuIFx0XHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVx1MDAzZWN0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyLCBza2ItXHUwMDNlbGVuKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuaW5kZXggODAxYTNkZDljZWVhMy4uY2FhYWRmZmMyNTYzZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbkBAIC02OTYsNiAmIzQzOzY5NiwxNyBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdCAgICBmbG93X29mZmxvYWRfZXRoX2RzdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuJiM0MztcdGlmIChmbG93LVx1MDAzZXByaW9yaXR5KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuJiM0MztcbiYjNDM7XHRcdGVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xuJiM0MztcdFx0aWYgKCFlbnRyeSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG4mIzQzO1x0XHRlbnRyeS1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHR1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1cGxlLVx1MDAzZWVuY2FwX251bTsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi5jYTkxOTI0YjRkZTNiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsMTEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdGlmICh0Y3BoKVxuIFx0XHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcbiBcbiYjNDM7XHQvKiBUaGUgcGFja2V0cyB0aGUgZmxvdyBmb3J3YXJkcyBpbiBpdHMgcGxhY2UgYnlwYXNzIHRoZSBydWxlcyB0aGF0XG4mIzQzO1x0ICogY2xhc3NpZmllZCB0aGlzIG9uZTsgY2FycnkgdGhlIHJlc3VsdCB3aXRoIHRoZSBmbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGZsb3ctXHUwMDNlcHJpb3JpdHkgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5O1xuJiM0MztcbiBcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLmFiNzczMjM1OGUxZDggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTQ1OCw2ICYjNDM7NDU4LDEwNiBAQCBmaVxuIFx0Y2hlY2tfZHNjcCBcJiMzNDtkc2NwX2Z3ZFwmIzM0OyBcJiMzNDskcG10dVwmIzM0O1xuIH1cbiBcbiYjNDM7Y2hlY2tfcHJpb3JpdHkoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgd2hhdD0kMVxuJiM0MztcdGxvY2FsIHBtdHU9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvaz0xXG4mIzQzO1xuJiM0MztcdGxvY2FsIGNvdW50ZXJcbiYjNDM7XHRjb3VudGVyPSQoaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8zIHwgZ3JlcCBwYWNrZXRzKVxuJiM0MztcdGxvY2FsIHBjMz0ke2NvdW50ZXIlKmJ5dGVzKn1cbiYjNDM7XHRwYzM9JHtwYzMjKnBhY2tldHN9XG4mIzQzO1xuJiM0MztcdGNvdW50ZXI9JChpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzAgfCBncmVwIHBhY2tldHMpXG4mIzQzO1x0bG9jYWwgcGMwPSR7Y291bnRlciUqYnl0ZXMqfVxuJiM0MztcdHBjMD0ke3BjMCMqcGFja2V0c31cbiYjNDM7XG4mIzQzO1x0bG9jYWwgZmFpbG1zZz1cJiMzNDtGQUlMOiBwbXR1ICRwbXR1OiAkd2hhdCBjb3VudGVycyBkbyBub3QgbWF0Y2gsIGV4cGVjdGVkXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGNhc2UgXCYjMzQ7JHdoYXRcJiMzNDsgaW5cbiYjNDM7XHRcJiMzNDtwcmlvX25vbmVcJiMzNDspXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyRwYzNcJiMzNDsgLWd0IDAgXSB8fCBbIFwmIzM0OyRwYzBcJiMzNDsgLWVxIDAgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0OyRmYWlsbXNnIHByaW8zID09IDAsIHByaW8wIFx1MDAzZSAwLCBidXQgZ290ICRwYzMsJHBjMFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0XHRyZXQ9MVxuJiM0MztcdFx0XHRvaz0wXG4mIzQzO1x0XHRmaVxuJiM0MztcdFx0OztcbiYjNDM7XHRcJiMzNDtwcmlvX2Z3ZFwmIzM0OylcbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JHBjM1wmIzM0OyAtZXEgMCBdIHx8IFsgXCYjMzQ7JHBjMFwmIzM0OyAtZ3QgMCBdOyB0aGVuXG4mIzQzO1x0XHRcdGVjaG8gXCYjMzQ7JGZhaWxtc2cgcHJpbzMgXHUwMDNlIDAsIHByaW8wID09IDAsIGJ1dCBnb3QgJHBjMywkcGMwXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRcdHJldD0xXG4mIzQzO1x0XHRcdG9rPTBcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHQ7O1xuJiM0MztcdCopXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRmYWlsbXNnOiBVbmtub3duIHByaW9yaXR5IGNoZWNrXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0b2s9MFxuJiM0MztcdGVzYWNcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDskb2tcJiMzNDsgLWVxIDEgXSA7dGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtQQVNTOiAkd2hhdDogcHJpb3JpdHkgcGFja2V0IGNvdW50ZXJzIG1hdGNoXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7dGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgcG10dT1cJiMzNDskM1wmIzM0O1xuJiM0MztcdGxvY2FsIHByb3RvPVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1x0bG9jYWwgZHN0aXA9XCYjMzQ7JDVcJiMzNDtcbiYjNDM7XHRsb2NhbCBkc3Rwb3J0PVwmIzM0OyQ2XCYjMzQ7XG4mIzQzO1x0bG9jYWwgbHJldD0wXG4mIzQzO1xuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtZiAtIFx1MDAzY1x1MDAzY0VPRlxuJiM0Mzt0YWJsZSBuZXRkZXYgcHJpb2NoZWNrIHtcbiYjNDM7ICAgY291bnRlciBwcmlvMCB7IH1cbiYjNDM7ICAgY291bnRlciBwcmlvMyB7IH1cbiYjNDM7XG4mIzQzOyAgIGNoYWluIGVncmVzczAge1xuJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgXCYjMzQ7dmV0aDBcJiMzNDsgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxuJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSBcJiMzNDtwcmlvM1wmIzM0O1xuJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgbm9uZSBjb3VudGVyIG5hbWUgXCYjMzQ7cHJpbzBcJiMzNDtcbiYjNDM7ICAgfVxuJiM0MztcbiYjNDM7ICAgY2hhaW4gZWdyZXNzMSB7XG4mIzQzOyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSBcJiMzNDt2ZXRoMVwmIzM0OyBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0XG4mIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFwmIzM0O3ByaW8zXCYjMzQ7XG4mIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcJiMzNDtwcmlvMFwmIzM0O1xuJiM0MzsgICB9XG4mIzQzO31cbiYjNDM7RU9GXG4mIzQzO1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O1NLSVA6IENvdWxkIG5vdCBsb2FkIG5ldGRldjplZ3Jlc3MgZm9yIHZldGgwIGFuZCB2ZXRoMVwmIzM0O1xuJiM0MztcdFx0cmV0dXJuIDBcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgXCYjMzQ7JDFcJiMzNDsgXCYjMzQ7JDJcJiMzNDsgXCYjMzQ7JHBtdHVcJiMzNDsgXCYjMzQ7JHByb3RvXCYjMzQ7IFwmIzM0OyRkc3RpcFwmIzM0OyBcJiMzNDskZHN0cG9ydFwmIzM0OzsgdGhlblxuJiM0MztcdFx0bHJldD0xXG4mIzQzO1x0ZmlcbiYjNDM7XHRjaGVja19wcmlvcml0eSBcJiMzNDtwcmlvX25vbmVcJiMzNDsgXCYjMzQ7JHBtdHVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBUaGUgZmxvdyBzdG9yZXMgdGhlIHByaW9yaXR5IHNldCBiZWZvcmUgaXQgaXMgYWRkZWQsIHNvIHRoZSBwYWNrZXRzXG4mIzQzO1x0IyB0aGUgZmxvd3RhYmxlIGZvcndhcmRzIGxlYXZlIHdpdGggaXQgdG9vLCBpbiBib3RoIGRpcmVjdGlvbnMuXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjRU9GXG4mIzQzO3RhYmxlIGluZXQgcHJpb3NldCB7XG4mIzQzOyAgIGNoYWluIGZvcndhcmQge1xuJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHRcbiYjNDM7ICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozXG4mIzQzOyAgIH1cbiYjNDM7fVxuJiM0MztFT0ZcbiYjNDM7XHRpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgXCYjMzQ7JDFcJiMzNDsgXCYjMzQ7JDJcJiMzNDsgXCYjMzQ7JHBtdHVcJiMzNDsgXCYjMzQ7JHByb3RvXCYjMzQ7IFwmIzM0OyRkc3RpcFwmIzM0OyBcJiMzNDskZHN0cG9ydFwmIzM0OzsgdGhlblxuJiM0MztcdFx0bHJldD0xXG4mIzQzO1x0ZmlcbiYjNDM7XHRjaGVja19wcmlvcml0eSBcJiMzNDtwcmlvX2Z3ZFwmIzM0OyBcJiMzNDskcG10dVwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgZGVsZXRlIHRhYmxlIG5ldGRldiBwcmlvY2hlY2tcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICRscmV0XG4mIzQzO31cbiYjNDM7XG4gdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQoKVxuIHtcbiBcdGxvY2FsIG5zYT1cJiMzNDskMVwmIzM0O1xuQEAgLTUxNiw2ICYjNDM7NjE2LDExIEBAIGVsc2VcbiBcdHJldD0xXG4gZmlcbiBcbiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMCA2IFwmIzM0O1tkZWFkOjI6Ojk5XVwmIzM0OyAxMjM0NTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7RkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBwcmlvcml0eSB1cGRhdGVcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24mIzM5O3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cbkBAIC01NzIsNiAmIzQzOzY3NywxMSBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X2RzY3AgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbiBcdGV4aXQgMFxuIGZpXG4gXG4mIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSBhbmQgcG10dSBkaXNjb3ZlcnlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbiBcbiBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIFwmIzM0O1wmIzM0OzsgdGhlblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbiYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZCBsb2dpYyB0byBjYXB0dXJlIHBhY2tldCBwcmlvcml0eSBhbmQgcHJvcGFnYXRlIGl0IGR1cmluZyBzb2Z0d2FyZSBmbG93IHRhYmxlIGZvcndhcmRpbmcgKElQdjQvSVB2NikgYXMgd2VsbCBhcyBvZmZsb2FkIHJ1bGUgY29uc3RydWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIGZhc3RwYXRocyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGluIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMTM0MjljMTdjOWVkYWE2ZmQ1NzFlNzdiYTZhMmIwMjkwZTkwZjA3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxMjozNjoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QKaW5kZXggZDc1N2MyMWMxMGYyZC4uNTg0NGFiMTlhZWM2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QKQEAgLTcxLDcgJiM0Mzs3MSw5IEBAIGZvcndhcmRpbmcgcGF0aCBpbmNsdWRpbmcgdGhlIE5ldGZpbHRlciBob29rcyBhbmQgdGhlIGZsb3d0YWJsZSBmYXN0cGF0aCBieXBhc3MuCiAKIFRoZSBmbG93dGFibGUgZW50cnkgYWxzbyBzdG9yZXMgdGhlIE5BVCBjb25maWd1cmF0aW9uLCBzbyBhbGwgcGFja2V0cyBhcmUKIG1hbmdsZWQgYWNjb3JkaW5nIHRvIHRoZSBOQVQgcG9saWN5IHRoYXQgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGNsYXNzaWMgSVAKLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWQKJiM0Mztmb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBUaGUgZmxvdwomIzQzO2Fsc28gc3RvcmVzIHRoZSBwcmlvcml0eSBvZiB0aGUgcGFja2V0IHRoYXQgY3JlYXRlZCBpdCwgc28gYSBwcmlvcml0eSBzZXQgYmVmb3JlCiYjNDM7YGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkCiB0cmFmZmljIGlzIHBhc3NlZCB1cCB0byBmb2xsb3cgdGhlIGNsYXNzaWMgSVAgZm9yd2FyZGluZyBwYXRoIGdpdmVuIHRoYXQgdGhlCiB0cmFuc3BvcnQgaGVhZGVyIGlzIG1pc3NpbmcsIGluIHRoaXMgY2FzZSwgZmxvd3RhYmxlIGxvb2t1cHMgYXJlIG5vdCBwb3NzaWJsZS4KIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IDkyNjExODAyODAxZWEuLjJhZmNlNzZhZDEzMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwpAQCAtMTE2MSw2ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQljYXNlIEZMT1dfQUNUSU9OX1JFRElSRUNUOgogCQkJb2RldiA9IGFjdC0mZ3Q7ZGV2OwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOgogCQljYXNlIEZMT1dfQUNUSU9OX0NTVU06CiAJCQlicmVhazsKIAkJY2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IDk5YjI4YWFhN2NjNDcuLjRlZTk5ZThlNGEzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCkBAIC0zNzgsNiAmIzQzOzM3OCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZiwKIAkJY2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDoKIAkJCW9kZXYgPSBhY3QtJmd0O2RldjsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBGTE9XX0FDVElPTl9QUklPUklUWToKIAkJY2FzZSBGTE9XX0FDVElPTl9DU1VNOgogCQkJYnJlYWs7CiAJCWNhc2UgRkxPV19BQ1RJT05fVkxBTl9QVVNIOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggZjJlMjc3MWYxODhmNC4uMjMyMThjOGNiYzNkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCkBAIC0yMDIsNiAmIzQzOzIwMiw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWQgewogCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7CiAJdTE2CQkJCQl0eXBlOwogCXUzMgkJCQkJdGltZW91dDsKJiM0MzsJdTMyCQkJCQlwcmlvcml0eTsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQkJcmN1X2hlYWQ7CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IGM4YzI5YTlhMTY4NDQuLmM4NWUyZDYwOGMzMjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCkBAIC01MDksNiAmIzQzOzUwOSw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlpcF9kZWNyZWFzZV90dGwoaXBoKTsKIAlza2JfY2xlYXJfdHN0YW1wKHNrYik7CiAKJiM0MzsJaWYgKGZsb3ctJmd0O3ByaW9yaXR5KQomIzQzOwkJc2tiLSZndDtwcmlvcml0eSA9IGZsb3ctJmd0O3ByaW9yaXR5OwomIzQzOwogCWlmIChmbG93X3RhYmxlLSZndDtmbGFncyAmYW1wOyBORl9GTE9XVEFCTEVfQ09VTlRFUikKIAkJbmZfY3RfYWNjdF91cGRhdGUoZmxvdy0mZ3Q7Y3QsIHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyLCBza2ItJmd0O2xlbik7CiAKQEAgLTExMDQsNiAmIzQzOzExMDcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlpcDZoLSZndDtob3BfbGltaXQtLTsKIAlza2JfY2xlYXJfdHN0YW1wKHNrYik7CiAKJiM0MzsJaWYgKGZsb3ctJmd0O3ByaW9yaXR5KQomIzQzOwkJc2tiLSZndDtwcmlvcml0eSA9IGZsb3ctJmd0O3ByaW9yaXR5OwomIzQzOwogCWlmIChmbG93X3RhYmxlLSZndDtmbGFncyAmYW1wOyBORl9GTE9XVEFCTEVfQ09VTlRFUikKIAkJbmZfY3RfYWNjdF91cGRhdGUoZmxvdy0mZ3Q7Y3QsIHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZGlyLCBza2ItJmd0O2xlbik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCmluZGV4IDgwMWEzZGQ5Y2VlYTMuLmNhYWFkZmZjMjU2M2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwpAQCAtNjk2LDYgJiM0Mzs2OTYsMTcgQEAgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiAJICAgIGZsb3dfb2ZmbG9hZF9ldGhfZHN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpICZsdDsgMCkKIAkJcmV0dXJuIC0xOwogCiYjNDM7CWlmIChmbG93LSZndDtwcmlvcml0eSkgewomIzQzOwkJc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTsKJiM0MzsKJiM0MzsJCWVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpOwomIzQzOwkJaWYgKCFlbnRyeSkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CQllbnRyeS0mZ3Q7aWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTsKJiM0MzsJCWVudHJ5LSZndDtwcmlvcml0eSA9IGZsb3ctJmd0O3ByaW9yaXR5OwomIzQzOwl9CiYjNDM7CiAJdHVwbGUgPSAmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IHR1cGxlLSZndDtlbmNhcF9udW07IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCmluZGV4IDMyYjQyODEwMzhkZDMuLmNhOTE5MjRiNGRlM2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCkBAIC0xMTcsNiAmIzQzOzExNywxMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCWlmICh0Y3BoKQogCQlmbG93X29mZmxvYWRfY3RfdGNwKGN0KTsKIAomIzQzOwkvKiBUaGUgcGFja2V0cyB0aGUgZmxvdyBmb3J3YXJkcyBpbiBpdHMgcGxhY2UgYnlwYXNzIHRoZSBydWxlcyB0aGF0CiYjNDM7CSAqIGNsYXNzaWZpZWQgdGhpcyBvbmU7IGNhcnJ5IHRoZSByZXN1bHQgd2l0aCB0aGUgZmxvdy4KJiM0MzsJICovCiYjNDM7CWZsb3ctJmd0O3ByaW9yaXR5ID0gcGt0LSZndDtza2ItJmd0O3ByaW9yaXR5OwomIzQzOwogCV9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwogCXJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTsKIAlpZiAocmV0ICZsdDsgMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCA0NDljNTE4YmQ5NDdkLi5hYjc3MzIzNThlMWQ4IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCkBAIC00NTgsNiAmIzQzOzQ1OCwxMDYgQEAgZmkKIAljaGVja19kc2NwICYjMzQ7ZHNjcF9md2QmIzM0OyAmIzM0OyRwbXR1JiMzNDsKIH0KIAomIzQzO2NoZWNrX3ByaW9yaXR5KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHdoYXQ9JDEKJiM0MzsJbG9jYWwgcG10dT0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgb2s9MQomIzQzOwomIzQzOwlsb2NhbCBjb3VudGVyCiYjNDM7CWNvdW50ZXI9JChpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8zIHwgZ3JlcCBwYWNrZXRzKQomIzQzOwlsb2NhbCBwYzM9JHtjb3VudGVyJSpieXRlcyp9CiYjNDM7CXBjMz0ke3BjMyMqcGFja2V0c30KJiM0MzsKJiM0MzsJY291bnRlcj0kKGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzAgfCBncmVwIHBhY2tldHMpCiYjNDM7CWxvY2FsIHBjMD0ke2NvdW50ZXIlKmJ5dGVzKn0KJiM0MzsJcGMwPSR7cGMwIypwYWNrZXRzfQomIzQzOwomIzQzOwlsb2NhbCBmYWlsbXNnPSYjMzQ7RkFJTDogcG10dSAkcG10dTogJHdoYXQgY291bnRlcnMgZG8gbm90IG1hdGNoLCBleHBlY3RlZCYjMzQ7CiYjNDM7CiYjNDM7CWNhc2UgJiMzNDskd2hhdCYjMzQ7IGluCiYjNDM7CSYjMzQ7cHJpb19ub25lJiMzNDspCiYjNDM7CQlpZiBbICYjMzQ7JHBjMyYjMzQ7IC1ndCAwIF0gfHwgWyAmIzM0OyRwYzAmIzM0OyAtZXEgMCBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0OyRmYWlsbXNnIHByaW8zID09IDAsIHByaW8wICZndDsgMCwgYnV0IGdvdCAkcGMzLCRwYzAmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJb2s9MAomIzQzOwkJZmkKJiM0MzsJCTs7CiYjNDM7CSYjMzQ7cHJpb19md2QmIzM0OykKJiM0MzsJCWlmIFsgJiMzNDskcGMzJiMzNDsgLWVxIDAgXSB8fCBbICYjMzQ7JHBjMCYjMzQ7IC1ndCAwIF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7JGZhaWxtc2cgcHJpbzMgJmd0OyAwLCBwcmlvMCA9PSAwLCBidXQgZ290ICRwYzMsJHBjMCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQkJcmV0PTEKJiM0MzsJCQlvaz0wCiYjNDM7CQlmaQomIzQzOwkJOzsKJiM0MzsJKikKJiM0MzsJCWVjaG8gJiMzNDskZmFpbG1zZzogVW5rbm93biBwcmlvcml0eSBjaGVjayYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJb2s9MAomIzQzOwllc2FjCiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskb2smIzM0OyAtZXEgMSBdIDt0aGVuCiYjNDM7CQllY2hvICYjMzQ7UEFTUzogJHdoYXQ6IHByaW9yaXR5IHBhY2tldCBjb3VudGVycyBtYXRjaCYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO3Rlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X3ByaW9yaXR5KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBtdHU9JiMzNDskMyYjMzQ7CiYjNDM7CWxvY2FsIHByb3RvPSYjMzQ7JDQmIzM0OwomIzQzOwlsb2NhbCBkc3RpcD0mIzM0OyQ1JiMzNDsKJiM0MzsJbG9jYWwgZHN0cG9ydD0mIzM0OyQ2JiMzNDsKJiM0MzsJbG9jYWwgbHJldD0wCiYjNDM7CiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1mIC0gJmx0OyZsdDtFT0YKJiM0Mzt0YWJsZSBuZXRkZXYgcHJpb2NoZWNrIHsKJiM0MzsgICBjb3VudGVyIHByaW8wIHsgfQomIzQzOyAgIGNvdW50ZXIgcHJpbzMgeyB9CiYjNDM7CiYjNDM7ICAgY2hhaW4gZWdyZXNzMCB7CiYjNDM7ICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlICYjMzQ7dmV0aDAmIzM0OyBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IDA6MyBjb3VudGVyIG5hbWUgJiMzNDtwcmlvMyYjMzQ7CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lICYjMzQ7cHJpbzAmIzM0OwomIzQzOyAgIH0KJiM0MzsKJiM0MzsgICBjaGFpbiBlZ3Jlc3MxIHsKJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgJiMzNDt2ZXRoMSYjMzQ7IHByaW9yaXR5IDA7IHBvbGljeSBhY2NlcHQKJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSAmIzM0O3ByaW8zJiMzNDsKJiM0MzsgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgbm9uZSBjb3VudGVyIG5hbWUgJiMzNDtwcmlvMCYjMzQ7CiYjNDM7ICAgfQomIzQzO30KJiM0MztFT0YKJiM0MzsJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IGxvYWQgbmV0ZGV2OmVncmVzcyBmb3IgdmV0aDAgYW5kIHZldGgxJiMzNDsKJiM0MzsJCXJldHVybiAwCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19pcCAmIzM0OyQxJiMzNDsgJiMzNDskMiYjMzQ7ICYjMzQ7JHBtdHUmIzM0OyAmIzM0OyRwcm90byYjMzQ7ICYjMzQ7JGRzdGlwJiMzNDsgJiMzNDskZHN0cG9ydCYjMzQ7OyB0aGVuCiYjNDM7CQlscmV0PTEKJiM0MzsJZmkKJiM0MzsJY2hlY2tfcHJpb3JpdHkgJiMzNDtwcmlvX25vbmUmIzM0OyAmIzM0OyRwbXR1JiMzNDsKJiM0MzsKJiM0MzsJIyBUaGUgZmxvdyBzdG9yZXMgdGhlIHByaW9yaXR5IHNldCBiZWZvcmUgaXQgaXMgYWRkZWQsIHNvIHRoZSBwYWNrZXRzCiYjNDM7CSMgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcyBsZWF2ZSB3aXRoIGl0IHRvbywgaW4gYm90aCBkaXJlY3Rpb25zLgomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtZiAtICZsdDsmbHQ7RU9GCiYjNDM7dGFibGUgaW5ldCBwcmlvc2V0IHsKJiM0MzsgICBjaGFpbiBmb3J3YXJkIHsKJiM0MzsgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHQKJiM0MzsgICAgICBtZXRhIHByaW9yaXR5IHNldCAwOjMKJiM0MzsgICB9CiYjNDM7fQomIzQzO0VPRgomIzQzOwlpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgJiMzNDskMSYjMzQ7ICYjMzQ7JDImIzM0OyAmIzM0OyRwbXR1JiMzNDsgJiMzNDskcHJvdG8mIzM0OyAmIzM0OyRkc3RpcCYjMzQ7ICYjMzQ7JGRzdHBvcnQmIzM0OzsgdGhlbgomIzQzOwkJbHJldD0xCiYjNDM7CWZpCiYjNDM7CWNoZWNrX3ByaW9yaXR5ICYjMzQ7cHJpb19md2QmIzM0OyAmIzM0OyRwbXR1JiMzNDsKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IGRlbGV0ZSB0YWJsZSBpbmV0IHByaW9zZXQKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IGRlbGV0ZSB0YWJsZSBuZXRkZXYgcHJpb2NoZWNrCiYjNDM7CiYjNDM7CXJldHVybiAkbHJldAomIzQzO30KJiM0MzsKIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0KCkKIHsKIAlsb2NhbCBuc2E9JiMzNDskMSYjMzQ7CkBAIC01MTYsNiAmIzQzOzYxNiwxMSBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MztpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X3ByaW9yaXR5ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDAgNiAmIzM0O1tkZWFkOjI6Ojk5XSYjMzQ7IDEyMzQ1OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIG5zMSBhbmQKICMgd2lsbCBkZXBlbmQgb24gbnMxIGJlaW5nIG1hc3F1ZXJhZGVkIGluIG5zcjEuCiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy4KQEAgLTU3Miw2ICYjNDM7Njc3LDExIEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfZHNjcCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuCiAJZXhpdCAwCiBmaQogCiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBwcmlvcml0eSB1cGRhdGUgYW5kIHBtdHUgZGlzY292ZXJ5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzOwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyICZndDsvZGV2L251bGwKIAogaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxICYjMzQ7JiMzNDs7IHRoZW4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFzc2Vzc21lbnQ6IE5ldGZpbHRlciBGbG93dGFibGUgUHJpb3JpdHkgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBvdXIgZnV6emluZyBlZmZvcnRzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuCgpMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldGZpbHRlciBmbG93dGFibGUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFja2V0IHByaW9yaXR5IGhhbmRsaW5nLiBXZSYjMzk7dmUgZ290OgoKMS4gIERvY3VtZW50YXRpb24gdXBkYXRlcyBpbiBgbmZfZmxvd3RhYmxlLnJzdGAuCjIuICBEcml2ZXIgYWRkaXRpb25zIChgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCkgdGhhdCBpbXBsZW1lbnQgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYC4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggc3BlY2lmaWMgaGFyZHdhcmUsIHByb2JhYmx5IGNvbmNlcm5pbmcgdHJhZmZpYyBwcmlvcml0aXphdGlvbi4KMy4gIEhlYWRlciBjaGFuZ2VzIChgbmZfZmxvd190YWJsZS5oYCkgd2hlcmUgYHN0cnVjdCBmbG93X29mZmxvYWRgIG5vdyBpbmNsdWRlcyBhIGB1MzIgcHJpb3JpdHlgIGZpZWxkLgo0LiAgQ29kZSBtb2RpZmljYXRpb25zIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCB3aGVyZSBwcmlvcml0eSBpcyBzZXQgb24gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpZiBpdCBleGlzdHMuCjUuICBNb2RpZmljYXRpb25zIHRvIGhvdyBwcmlvcml0eSBpcyBoYW5kbGVkIGluIGZsb3cgcnVsZSByb3V0aW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLgo2LiAgQW5kIGZpbmFsbHksIHNldHRpbmcgdGhlIHByaW9yaXR5IGluIGBuZnRfZmxvd19vZmZsb2FkLmNgIGJhc2VkIG9uIHRoZSBwYWNrZXQmIzM5O3MgYHNrYmAgcHJpb3JpdHkuCjcuICBBIG5ldyBzZWxmLXRlc3Qgc2NyaXB0LCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBidXQgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgbWVhbiBpdCYjMzk7cyBjb21wbGV0ZS4KClNvLCB3aGVyZSBpcyB0aGlzIGNvZGUgcmVzaWRpbmc/IEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHNxdWFyZWx5IGluIHRoZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZC4gVGhlc2UgYXJlIGtleSBhcmVhcywgd2hpY2ggYXJlIGFsbW9zdCBjZXJ0YWlubHkgcnVubmluZyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzZXR1cHMg4oCTIHRoaW5rIFFFTVUsIHZpcnRpbywgdGFwL3ZldGggaW50ZXJmYWNlcywgbmFtZXNwYWNlcywgYW5kLCBvZiBjb3Vyc2UsIG5mdGFibGVzLgoKKipNeSBFeHBlcnQgT3BpbmlvbjoqKgoKR2l2ZW4gdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvcmUgbmV0d29ya2luZywgbmV0ZmlsdGVyIGNvZGUsIHBhY2tldCBmb3J3YXJkaW5nLCBmbG93dGFibGUgb2ZmbG9hZCwgYW5kIG5mdGFibGVzIGV2YWx1YXRpb24sIF9hYnNvbHV0ZWx5XywgdGhpcyB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24uIFRoZSBwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yaywgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcHJpb3JpdHkgaGFuZGxpbmcgY291bGQgYWxzbyByZXZlYWwgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggZGlmZmVyZW50IHRyYWZmaWMgZmxvd3MuIE5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIHNjYW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCByZWZpbmUgdGhlIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTA0PWNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA1Olx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjcwNTpcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNi1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjM6XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjQtXHRkZXBlbmRzIG9uIFBST0NfRlNcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXHQmIzQzOz0gbmZ0X2Z3ZF9uZXRkZXYub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0My1uZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NjpuZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSAmIzQzOz0gbmZfZmxvd190YWJsZV9wcm9jZnMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDc6aWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSksbSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ4LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ5OmVsc2UgaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSkseSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUwLW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSBuZl9mbG93X3RhYmxlX2JwZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTE2MjQ9dm9pZCBuZl9jb25udHJhY2tfdGNwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xNjU2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTY1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NTgtXHR0bi1cdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jPTE5NT12b2lkIG5mX2Nvbm50cmFja191ZHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jOjIwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwNC1cdHVuLVx1MDAzZW9mZmxvYWRfdGltZW91dCA9IDMwICogSFo7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4NT1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYwOS1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9VTkFDSyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo2MTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjExLVx0TkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQUQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYxOC1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYyMC1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FELFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz02NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTc4Ni1cdH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6Nzg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTc4OC1cdFtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9UQ1BfT0ZGTE9BRF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTgzNi1cdH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6ODM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTgzOC1cdFtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTkzNT1zdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3RjcF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk2NS1cdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXS5kYXRhID0gXHUwMDI2dG4tXHUwMDNlb2ZmbG9hZF90aW1lb3V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0xMDAzPXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMwLVx0dGFibGVbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVURQX1NUUkVBTV0uZGF0YSA9IFx1MDAyNnVuLVx1MDAzZXRpbWVvdXRzW1VEUF9DVF9SRVBMSUVEXTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMzItXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0uZGF0YSA9IFx1MDAyNnVuLVx1MDAzZW9mZmxvYWRfdGltZW91dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwNDg9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDU3LVx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA1ODpcdFx0XHRORl9GTE9XX1RBQkxFX1NUQVRfREVDX0FUT01JQyhuZXQsIGNvdW50X3dxX2FkZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNTktXHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDYxLVx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX2RlbChvZmZsb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA2MjpcdFx0XHRORl9GTE9XX1RBQkxFX1NUQVRfREVDX0FUT01JQyhuZXQsIGNvdW50X3dxX2RlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjMtXHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY1LVx0XHRcdGZsb3dfb2ZmbG9hZF93b3JrX3N0YXRzKG9mZmxvYWQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY2Olx0XHRcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3Ffc3RhdHMpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDY3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3Nj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgwLVx0aWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX1JFUExBQ0UpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA4MTpcdFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgyLVx0XHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9hZGRfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODMtXHR9IGVsc2UgaWYgKG9mZmxvYWQtXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA4NDpcdFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9kZWwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDg1LVx0XHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODYtXHR9IGVsc2Uge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDg3Olx0XHRORl9GTE9XX1RBQkxFX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50X3dxX3N0YXRzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4OC1cdFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfc3RhdHNfd3EsIFx1MDAyNm9mZmxvYWQtXHUwMDNld29yayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz04ND1zdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy04OC1cdFx0X19iZTE2XHRwcm90bztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6ODk6XHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtOTAtXHR1OCBudW1fZW5jYXBzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xMzktXHRcdFx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTQwOlx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xNDEtXHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE2Ni1cdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoxNjc6XHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE2OC1cdFx0XHRcdFx0Z290byBlcnJfb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIE15IHBsYW4gaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzZWN0aW9ucyBvZiB0aGUgZmlsZS4gSSYjMzk7bSB0aGlua2luZyBsaW5lcyA1MDAtNTE1IGFuZCA3MDAtNzI1IGFyZSBwcm9iYWJseSBrZXkgYXJlYXMgdG8gZXhhbWluZS4gVGhlc2Ugc2VjdGlvbnMgbGlrZWx5IGNvbnRhaW4gY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHJlbGF0aW9uc2hpcHMgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gQnkgcGlucG9pbnRpbmcgdGhlc2UgcmFuZ2VzLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aGluIHRoaXMgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSXQmIzM5O3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhcHByb2FjaCB0aGlzIHNwZWNpZmljIHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGRlZmF1bHQgblxuIDUwMTpcdFx0aGVscFxuIDUwMjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXG4gNTAzOlx0XG4gNTA0Olx0Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbiA1MDU6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4gNTA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcJiMzNDtcbiA1MDc6XHRcdGhlbHBcbiA1MDg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUwOTpcdFx0ICBjaG9vc2Ugd2hhdCBmbG93cyBhcmUgcGxhY2VkIGludG8gdGhlIGhhcmR3YXJlLlxuIDUxMDpcdFxuIDUxMTpcdGNvbmZpZyBORlRfQ09OTkxJTUlUXG4gNTEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcJiMzNDtcbiA1MTM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNTE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDUxNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbiA1MTY6XHRcdGhlbHBcbiA1MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Y29ubmxpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUxODpcdFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxuIDUxOTpcdFxuIDUyMDpcdGNvbmZpZyBORlRfTE9HXG4gNTIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGxvZyBtb2R1bGVcJiMzNDtcbiA1MjI6XHRcdGhlbHBcbiA1MjM6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7bG9nXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0byBsb2dcbiA1MjQ6XHRcdCAgcGFja2V0cyBtYXRjaGluZyBzb21lIGNyaXRlcmlhLlxuIDUyNTpcdFxuIDUyNjpcdGNvbmZpZyBORlRfTElNSVRcbiA1Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbGltaXQgbW9kdWxlXCYjMzQ7XG4gNTI4Olx0XHRoZWxwXG4gNTI5Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFwmIzM0O2xpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIE5ldGZpbHRlciBmbG93IHRhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTtsbCB3YW50IHRvIHplcm8gaW4gb24gYm90aCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVybmV0LXNwZWNpZmljIG9wdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBpcyBrZXkgdG8gZGlhZ25vc2luZywgdHdlYWtpbmcsIG9yIGludGVncmF0aW5nIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0YWJsZXMgYXJlIGVuYWJsZWQsIGlmIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gSXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcy4gR290dGEgZ2V0IHRoZSBsb3ctZG93biBvbiB0aGUgYmFzaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcbiA3MDE6XHRlbmRpZiAjIE5GX1RBQkxFU1xuIDcwMjpcdFxuIDcwMzpcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbiA3MDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbiA3MDU6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcwNjpcdFx0aGVscFxuIDcwNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBzdXBwb3J0LlxuIDcwODpcdFxuIDcwOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcxMDpcdFxuIDcxMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFXG4gNzEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiA3MTM6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcbiA3MTQ6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNzE1Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuIDcxNjpcdFx0aGVscFxuIDcxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXG4gNzE4Olx0XG4gNzE5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzIwOlx0XG4gNzIxOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG4gNzIyOlx0XHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4gNzIzOlx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MjQ6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDcyNTpcdFx0aGVscFxuIDcyNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcbiA3Mjc6XHRcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxuIDcyODpcdFxuIDcyOTpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xuIDczMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIFh0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGlwX3RhYmxlcylcJiMzNDtcbiA3MzE6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDczMjpcdFx0aGVscFxuIDczMzpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgdG8gdXNlIGFueSBvZiBpcF90YWJsZXMsXG4gNzM0Olx0XHQgIGlwNl90YWJsZXMgb3IgYXJwX3RhYmxlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzOAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgTmV0ZmlsdGVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZCByZWNlbnRseSBpbiB0aGUgTmV0ZmlsdGVyIHJlYWxtLiBBaGEsIEkgc2VlIHR3byBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEludGVyZXN0aW5nLiBOb3csIHRoZSBzeW1ib2xzIGludm9sdmVkIGFyZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IHdoYXQgaXMgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucz8gQXJlIHRoZXkgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzPyBBcmUgdGhleSBzdGF0aWMgYW5kIGludGVybmFsIHRvIHRoYXQgZmlsZT8gT3IsIGV2ZW4gbW9yZSBjcml0aWNhbGx5LCB3aGVyZSBhbmQgaG93IGFyZSB0aGV5ICpjYWxsZWQqPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBmbG93IHRhYmxlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZHxuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDU3PW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0Njg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04Njc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4ODc6XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4OC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTAwMT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVwbGVfaXB2NihzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNjYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDY3OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2OC1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjE4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIxOTpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjIwLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgd29ya3MsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSByb3V0aW5nIGRlY2lzaW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIG9mZmxvYWQgcHJvY2Vzcy4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAgaXMgdXRpbGl6ZWQsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbHMuIFdoZXJlIGV4YWN0bHkgZG9lcyB0aGlzIGZ1bmN0aW9uIGZpdCBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgYXJjaGl0ZWN0dXJlPyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIHdoeSBpdCYjMzk7cyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz02ODI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4NC1cdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NTQ9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1Ny17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc1ODpcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTktXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc4Mz1pbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzg2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Nzg3Olx0aWYgKG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24obmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4OC1cdFx0cmV0dXJuIC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgTkZUYWJsZXMgRmxvdyBPZmZsb2FkIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIFRoZSBrZXkgZnVuY3Rpb24gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAuIFRpbWUgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBzdGFydCBieSBzZWVpbmcgcHJlY2lzZWx5IHdoZXJlIHRoZSBldmFsdWF0aW9uIGlzIGludm9rZWQuIExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIHJlYWxseSBoZWxwIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NDE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2N0X3RjcChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNDktXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1MDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTEtXHRcdFx0XHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjI1LVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCkpLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI2Olx0LmV2YWxcdFx0PSBuZnRfZmxvd19vZmZsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjctXHQuaW5pdFx0XHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDAKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMTIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhbnRlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQsIHNvIEkgY2hlY2tlZCBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYCDigJMganVzdCBjb25maXJtaW5nIHRoZXkmIzM5O3JlIGV0aGVybmV0IGRyaXZlcnMgZm9yIEFpcm9oYSBhbmQgTWVkaWFUZWsgU29DcywgcmVzcGVjdGl2ZWx5LiBUaGUgY29yZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyYCwgc3BlY2lmaWNhbGx5IGBuZnRfZmxvd19vZmZsb2FkLmNgLCBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kIGBuZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuCgpJJiMzOTtsbCBsaXN0IG91dCB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbjogYG5mdF9mbG93X29mZmxvYWRfZXZhbGAsIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAsIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NGAsIGFuZCBgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjZgLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRob3NlIGZpbGVzLiBJbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFyZSBzdGF0aWMgYW5kIGFyZSBjYWxsZWQgYnkgdGhlIHJlc3BlY3RpdmUgaG9vayBmdW5jdGlvbnMuIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGFsc28gc3RhdGljLCBpbnZva2VkIHRocm91Z2ggYG5mdF9mbG93X29mZmxvYWRfb3BzLmV2YWxgLiAgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gIGlzIHN0YXRpYyBhbmQgdXNlZCBieSBib3RoIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NGAgYW5kIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NmAuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBORl9GTE9XX1RBQkxFYCwgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX1RBQkxFU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9JTkdSRVNTYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBjb3JyZWN0bHkgZGVwZW5kZW50LiBDaGVja2luZyB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYE5GX0ZMT1dfVEFCTEVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gYE5GVF9GTE9XX09GRkxPQURgIGRlcGVuZHMgb24gYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZGVwZW5kcyBvbiBgTkZfRkxPV19UQUJMRWAuIFdlIGtub3cgYE5FVEZJTFRFUl9JTkdSRVNTYCBkZXBlbmRzIG9uIGBORVRGSUxURVJgIHdoaWNoIGlzIHN0YW5kYXJkLCBzbyB3ZSYjMzk7cmUgY292ZXJlZCB3aXRoIGBORl9GTE9XX1RBQkxFYCwgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZfQ09OTlRSQUNLYC4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBsZXQmIzM5O3MgZG8gYSBxdWljayBkaWZmLiBUaGUgY2hhbmdlcyBpbmNsdWRlIGRvY3VtZW50YXRpb24sIHRoZSBkcml2ZXIgZmlsZXMgSSBhbHJlYWR5IHNhdywgYSBuZXcgYHByaW9yaXR5YCBmaWVsZCBpbiBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgaW4gYG5mX2Zsb3dfdGFibGUuaGAsIGFuZCwgaW1wb3J0YW50bHksIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwgYG5ldC9uZXRmaWx0ZXJgIGZpbGVzIHdoaWNoIHNldC9wb3B1bGF0ZSB0aGUgYHNrYi0mZ3Q7cHJpb3JpdHlgIGR1cmluZyBJUHY0IGFuZCBJUHY2IGZvcndhcmRpbmcsIG9yIHJlY29yZCBhbmQgc2V0IHByaW9yaXR5IHZhbHVlcyBpbnRvIHRoZSBmbG93IGRhdGEsIGFuZCBhZGRzIGBGTE9XX0FDVElPTl9QUklPUklUWWAuIFBsdXMsIHRoZXJlJiMzOTtzIGEgbmV3IHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hgLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBwYXRjaCBjbGVhcmx5IG1vZGlmaWVzIGhvdyBwYWNrZXQgcHJpb3JpdHkgaXMgaGFuZGxlZCB3aXRoaW4gbmV0ZmlsdGVyIGZsb3cgdGFibGVzLCBlbmNvbXBhc3NpbmcgYm90aCBzb2Z0d2FyZSBmYXN0cGF0aCBhbmQgZmxvdyBvZmZsb2FkaW5nLiBUaGF0IG1lYW5zIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgYXJlIGFmZmVjdGVkLgoKKipUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4qKgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgYHNldC1yZXN1bHRzYDoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgUmVhc29uaW5nYDogTW9kaWZpZXMgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIHRvIHJlY29yZCBhbmQgcmVzdG9yZSBgc2tiYCBwcmlvcml0eSBhY3Jvc3MgZmFzdHBhdGggYW5kIGhhcmR3YXJlIG9mZmxvYWQgcnVsZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0YCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2YAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUl9JTkdSRVNTYAoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cbi0gVGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEzNDI5YzE3YzllZGFhNmZkNTcxZTc3YmE2YTJiMDI5MGU5MGYwNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTI6MzY6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0CmluZGV4IGQ3NTdjMjFjMTBmMmQuLjU4NDRhYjE5YWVjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0CkBAIC03MSw3ICYjNDM7NzEsOSBAQCBmb3J3YXJkaW5nIHBhdGggaW5jbHVkaW5nIHRoZSBOZXRmaWx0ZXIgaG9va3MgYW5kIHRoZSBmbG93dGFibGUgZmFzdHBhdGggYnlwYXNzLgogCiBUaGUgZmxvd3RhYmxlIGVudHJ5IGFsc28gc3RvcmVzIHRoZSBOQVQgY29uZmlndXJhdGlvbiwgc28gYWxsIHBhY2tldHMgYXJlCiBtYW5nbGVkIGFjY29yZGluZyB0byB0aGUgTkFUIHBvbGljeSB0aGF0IGlzIHNwZWNpZmllZCBmcm9tIHRoZSBjbGFzc2ljIElQCi1mb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBGcmFnbWVudGVkCiYjNDM7Zm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3cKJiM0MzthbHNvIHN0b3JlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIHBhY2tldCB0aGF0IGNyZWF0ZWQgaXQsIHNvIGEgcHJpb3JpdHkgc2V0IGJlZm9yZQomIzQzO2BgZmxvdyBhZGRgYCBhcHBsaWVzIHRvIHRoZSBwYWNrZXRzIHRoYXQgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcy4gRnJhZ21lbnRlZAogdHJhZmZpYyBpcyBwYXNzZWQgdXAgdG8gZm9sbG93IHRoZSBjbGFzc2ljIElQIGZvcndhcmRpbmcgcGF0aCBnaXZlbiB0aGF0IHRoZQogdHJhbnNwb3J0IGhlYWRlciBpcyBtaXNzaW5nLCBpbiB0aGlzIGNhc2UsIGZsb3d0YWJsZSBsb29rdXBzIGFyZSBub3QgcG9zc2libGUuCiBUQ1AgUlNUIGFuZCBGSU4gcGFja2V0cyBhcmUgYWxzbyBwYXNzZWQgdXAgdG8gdGhlIGNsYXNzaWMgSVAgZm9yd2FyZGluZyBwYXRoIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwppbmRleCA5MjYxMTgwMjgwMWVhLi4yYWZjZTc2YWQxMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTExNjEsNiAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJY2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDoKIAkJCW9kZXYgPSBhY3QtJmd0O2RldjsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBGTE9XX0FDVElPTl9QUklPUklUWToKIAkJY2FzZSBGTE9XX0FDVElPTl9DU1VNOgogCQkJYnJlYWs7CiAJCWNhc2UgRkxPV19BQ1RJT05fVkxBTl9QVVNIOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYwppbmRleCA5OWIyOGFhYTdjYzQ3Li40ZWU5OWU4ZTRhMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYwpAQCAtMzc4LDYgJiM0MzszNzgsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsCiAJCWNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6CiAJCQlvZGV2ID0gYWN0LSZndDtkZXY7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6CiAJCWNhc2UgRkxPV19BQ1RJT05fQ1NVTToKIAkJCWJyZWFrOwogCQljYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCmluZGV4IGYyZTI3NzFmMTg4ZjQuLjIzMjE4YzhjYmMzZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMjAyLDYgJiM0MzsyMDIsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkIHsKIAl1bnNpZ25lZCBsb25nCQkJCWZsYWdzOwogCXUxNgkJCQkJdHlwZTsKIAl1MzIJCQkJCXRpbWVvdXQ7CiYjNDM7CXUzMgkJCQkJcHJpb3JpdHk7CiAJc3RydWN0IHJjdV9oZWFkCQkJCXJjdV9oZWFkOwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwppbmRleCBjOGMyOWE5YTE2ODQ0Li5jODVlMmQ2MDhjMzI5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYwpAQCAtNTA5LDYgJiM0Mzs1MDksOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaXBfZGVjcmVhc2VfdHRsKGlwaCk7CiAJc2tiX2NsZWFyX3RzdGFtcChza2IpOwogCiYjNDM7CWlmIChmbG93LSZndDtwcmlvcml0eSkKJiM0MzsJCXNrYi0mZ3Q7cHJpb3JpdHkgPSBmbG93LSZndDtwcmlvcml0eTsKJiM0MzsKIAlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpCiAJCW5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctJmd0O2N0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpciwgc2tiLSZndDtsZW4pOwogCkBAIC0xMTA0LDYgJiM0MzsxMTA3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaXA2aC0mZ3Q7aG9wX2xpbWl0LS07CiAJc2tiX2NsZWFyX3RzdGFtcChza2IpOwogCiYjNDM7CWlmIChmbG93LSZndDtwcmlvcml0eSkKJiM0MzsJCXNrYi0mZ3Q7cHJpb3JpdHkgPSBmbG93LSZndDtwcmlvcml0eTsKJiM0MzsKIAlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpCiAJCW5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctJmd0O2N0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpciwgc2tiLSZndDtsZW4pOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYwppbmRleCA4MDFhM2RkOWNlZWEzLi5jYWFhZGZmYzI1NjNlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMKQEAgLTY5Niw2ICYjNDM7Njk2LDE3IEBAIG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAogCSAgICBmbG93X29mZmxvYWRfZXRoX2RzdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSAmbHQ7IDApCiAJCXJldHVybiAtMTsKIAomIzQzOwlpZiAoZmxvdy0mZ3Q7cHJpb3JpdHkpIHsKJiM0MzsJCXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7CiYjNDM7CiYjNDM7CQllbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTsKJiM0MzsJCWlmICghZW50cnkpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwkJZW50cnktJmd0O2lkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7CiYjNDM7CQllbnRyeS0mZ3Q7cHJpb3JpdHkgPSBmbG93LSZndDtwcmlvcml0eTsKJiM0MzsJfQomIzQzOwogCXR1cGxlID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0dXBsZS0mZ3Q7ZW5jYXBfbnVtOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwppbmRleCAzMmI0MjgxMDM4ZGQzLi5jYTkxOTI0YjRkZTNiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYwpAQCAtMTE3LDYgJiM0MzsxMTcsMTEgQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKIAlpZiAodGNwaCkKIAkJZmxvd19vZmZsb2FkX2N0X3RjcChjdCk7CiAKJiM0MzsJLyogVGhlIHBhY2tldHMgdGhlIGZsb3cgZm9yd2FyZHMgaW4gaXRzIHBsYWNlIGJ5cGFzcyB0aGUgcnVsZXMgdGhhdAomIzQzOwkgKiBjbGFzc2lmaWVkIHRoaXMgb25lOyBjYXJyeSB0aGUgcmVzdWx0IHdpdGggdGhlIGZsb3cuCiYjNDM7CSAqLwomIzQzOwlmbG93LSZndDtwcmlvcml0eSA9IHBrdC0mZ3Q7c2tiLSZndDtwcmlvcml0eTsKJiM0MzsKIAlfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKTsKIAlyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7CiAJaWYgKHJldCAmbHQ7IDApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKaW5kZXggNDQ5YzUxOGJkOTQ3ZC4uYWI3NzMyMzU4ZTFkOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaApAQCAtNDU4LDYgJiM0Mzs0NTgsMTA2IEBAIGZpCiAJY2hlY2tfZHNjcCAmIzM0O2RzY3BfZndkJiMzNDsgJiMzNDskcG10dSYjMzQ7CiB9CiAKJiM0MztjaGVja19wcmlvcml0eSgpCiYjNDM7ewomIzQzOwlsb2NhbCB3aGF0PSQxCiYjNDM7CWxvY2FsIHBtdHU9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG9rPTEKJiM0MzsKJiM0MzsJbG9jYWwgY291bnRlcgomIzQzOwljb3VudGVyPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXIgbmV0ZGV2IHByaW9jaGVjayBwcmlvMyB8IGdyZXAgcGFja2V0cykKJiM0MzsJbG9jYWwgcGMzPSR7Y291bnRlciUqYnl0ZXMqfQomIzQzOwlwYzM9JHtwYzMjKnBhY2tldHN9CiYjNDM7CiYjNDM7CWNvdW50ZXI9JChpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8wIHwgZ3JlcCBwYWNrZXRzKQomIzQzOwlsb2NhbCBwYzA9JHtjb3VudGVyJSpieXRlcyp9CiYjNDM7CXBjMD0ke3BjMCMqcGFja2V0c30KJiM0MzsKJiM0MzsJbG9jYWwgZmFpbG1zZz0mIzM0O0ZBSUw6IHBtdHUgJHBtdHU6ICR3aGF0IGNvdW50ZXJzIGRvIG5vdCBtYXRjaCwgZXhwZWN0ZWQmIzM0OwomIzQzOwomIzQzOwljYXNlICYjMzQ7JHdoYXQmIzM0OyBpbgomIzQzOwkmIzM0O3ByaW9fbm9uZSYjMzQ7KQomIzQzOwkJaWYgWyAmIzM0OyRwYzMmIzM0OyAtZ3QgMCBdIHx8IFsgJiMzNDskcGMwJiMzNDsgLWVxIDAgXTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDskZmFpbG1zZyBwcmlvMyA9PSAwLCBwcmlvMCAmZ3Q7IDAsIGJ1dCBnb3QgJHBjMywkcGMwJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCW9rPTAKJiM0MzsJCWZpCiYjNDM7CQk7OwomIzQzOwkmIzM0O3ByaW9fZndkJiMzNDspCiYjNDM7CQlpZiBbICYjMzQ7JHBjMyYjMzQ7IC1lcSAwIF0gfHwgWyAmIzM0OyRwYzAmIzM0OyAtZ3QgMCBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0OyRmYWlsbXNnIHByaW8zICZndDsgMCwgcHJpbzAgPT0gMCwgYnV0IGdvdCAkcGMzLCRwYzAmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJb2s9MAomIzQzOwkJZmkKJiM0MzsJCTs7CiYjNDM7CSopCiYjNDM7CQllY2hvICYjMzQ7JGZhaWxtc2c6IFVua25vd24gcHJpb3JpdHkgY2hlY2smIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCW9rPTAKJiM0MzsJZXNhYwomIzQzOwomIzQzOwlpZiBbICYjMzQ7JG9rJiMzNDsgLWVxIDEgXSA7dGhlbgomIzQzOwkJZWNobyAmIzM0O1BBU1M6ICR3aGF0OiBwcmlvcml0eSBwYWNrZXQgY291bnRlcnMgbWF0Y2gmIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mzt0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSgpCiYjNDM7ewomIzQzOwlsb2NhbCBwbXR1PSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCBwcm90bz0mIzM0OyQ0JiMzNDsKJiM0MzsJbG9jYWwgZHN0aXA9JiMzNDskNSYjMzQ7CiYjNDM7CWxvY2FsIGRzdHBvcnQ9JiMzNDskNiYjMzQ7CiYjNDM7CWxvY2FsIGxyZXQ9MAomIzQzOwomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtZiAtICZsdDsmbHQ7RU9GCiYjNDM7dGFibGUgbmV0ZGV2IHByaW9jaGVjayB7CiYjNDM7ICAgY291bnRlciBwcmlvMCB7IH0KJiM0MzsgICBjb3VudGVyIHByaW8zIHsgfQomIzQzOwomIzQzOyAgIGNoYWluIGVncmVzczAgewomIzQzOyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSAmIzM0O3ZldGgwJiMzNDsgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdAomIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lICYjMzQ7cHJpbzMmIzM0OwomIzQzOyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSAmIzM0O3ByaW8wJiMzNDsKJiM0MzsgICB9CiYjNDM7CiYjNDM7ICAgY2hhaW4gZWdyZXNzMSB7CiYjNDM7ICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlICYjMzQ7dmV0aDEmIzM0OyBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IDA6MyBjb3VudGVyIG5hbWUgJiMzNDtwcmlvMyYjMzQ7CiYjNDM7ICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lICYjMzQ7cHJpbzAmIzM0OwomIzQzOyAgIH0KJiM0Mzt9CiYjNDM7RU9GCiYjNDM7CWlmIFsgJD8gLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IENvdWxkIG5vdCBsb2FkIG5ldGRldjplZ3Jlc3MgZm9yIHZldGgwIGFuZCB2ZXRoMSYjMzQ7CiYjNDM7CQlyZXR1cm4gMAomIzQzOwlmaQomIzQzOwomIzQzOwlpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfaXAgJiMzNDskMSYjMzQ7ICYjMzQ7JDImIzM0OyAmIzM0OyRwbXR1JiMzNDsgJiMzNDskcHJvdG8mIzM0OyAmIzM0OyRkc3RpcCYjMzQ7ICYjMzQ7JGRzdHBvcnQmIzM0OzsgdGhlbgomIzQzOwkJbHJldD0xCiYjNDM7CWZpCiYjNDM7CWNoZWNrX3ByaW9yaXR5ICYjMzQ7cHJpb19ub25lJiMzNDsgJiMzNDskcG10dSYjMzQ7CiYjNDM7CiYjNDM7CSMgVGhlIGZsb3cgc3RvcmVzIHRoZSBwcmlvcml0eSBzZXQgYmVmb3JlIGl0IGlzIGFkZGVkLCBzbyB0aGUgcGFja2V0cwomIzQzOwkjIHRoZSBmbG93dGFibGUgZm9yd2FyZHMgbGVhdmUgd2l0aCBpdCB0b28sIGluIGJvdGggZGlyZWN0aW9ucy4KJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWYgLSAmbHQ7Jmx0O0VPRgomIzQzO3RhYmxlIGluZXQgcHJpb3NldCB7CiYjNDM7ICAgY2hhaW4gZm9yd2FyZCB7CiYjNDM7ICAgICAgdHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IC0xOyBwb2xpY3kgYWNjZXB0CiYjNDM7ICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozCiYjNDM7ICAgfQomIzQzO30KJiM0MztFT0YKJiM0MzsJaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwICYjMzQ7JDEmIzM0OyAmIzM0OyQyJiMzNDsgJiMzNDskcG10dSYjMzQ7ICYjMzQ7JHByb3RvJiMzNDsgJiMzNDskZHN0aXAmIzM0OyAmIzM0OyRkc3Rwb3J0JiMzNDs7IHRoZW4KJiM0MzsJCWxyZXQ9MQomIzQzOwlmaQomIzQzOwljaGVja19wcmlvcml0eSAmIzM0O3ByaW9fZndkJiMzNDsgJiMzNDskcG10dSYjMzQ7CiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBkZWxldGUgdGFibGUgbmV0ZGV2IHByaW9jaGVjawomIzQzOwomIzQzOwlyZXR1cm4gJGxyZXQKJiM0Mzt9CiYjNDM7CiB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCgpCiB7CiAJbG9jYWwgbnNhPSYjMzQ7JDEmIzM0OwpAQCAtNTE2LDYgJiM0Mzs2MTYsMTEgQEAgZWxzZQogCXJldD0xCiBmaQogCiYjNDM7aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAwIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgomIzQzOwllY2hvICYjMzQ7RkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBwcmlvcml0eSB1cGRhdGUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwlyZXQ9MQomIzQzO2ZpCiYjNDM7CiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24mIzM5O3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kCiAjIHdpbGwgZGVwZW5kIG9uIG5zMSBiZWluZyBtYXNxdWVyYWRlZCBpbiBuc3IxLgogIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuCkBAIC01NzIsNiAmIzQzOzY3NywxMSBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X2RzY3AgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlbgogCWV4aXQgMAogZmkKIAomIzQzO2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlbgomIzQzOwllY2hvICYjMzQ7RkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlIGFuZCBwbXR1IGRpc2NvdmVyeSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CXJldD0xCiYjNDM7ZmkKJiM0MzsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciAmZ3Q7L2Rldi9udWxsCiAKIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgJiMzNDskbnMxJiMzNDsgJiMzNDskbnMyJiMzNDsgMSAmIzM0OyYjMzQ7OyB0aGVuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgZm9yIGZsb3cgcHJpb3JpdHkgZm9yd2FyZGluZywgc29tZSBkcml2ZXIgY29kZSB0aGF0IHNlZW1zIHRvICpoYW5kbGUqIGBGTE9XX0FDVElPTl9QUklPUklUWWAgYnkgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZyAodGhhdCYjMzk7cyBvZGQsIHdpbGwga2VlcCBhbiBleWUgb24gdGhhdCksIGFuZCB0aGVuLCBpbXBvcnRhbnRseSwgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgYW5kIGhvdyB0aGUgcHJpb3JpdHkgZmllbGQgaXMgaGFuZGxlZC4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBuZXcgYHUzMiBwcmlvcml0eTtgIGZpZWxkIGFkZGVkIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLiBPa2F5LCBzbyB3ZSYjMzk7cmUgYWRkaW5nIHByaW9yaXR5IHRvIHRoZSBmbG93IG9mZmxvYWQgc3RydWN0dXJlLCBtYWtlcyBzZW5zZS4gVGhlbiwgSSBzZWUgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIHVzaW5nIGBmbG93LSZndDtwcmlvcml0eWAgdG8gc2V0IHRoZSBgc2tiLSZndDtwcmlvcml0eWAsIHdoaWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgdGhpbmdzIGdldCBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nIGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC4gSWYgYGZsb3ctJmd0O3ByaW9yaXR5YCBpcyBzZXQsIGEgYGZsb3dfYWN0aW9uX2VudHJ5YCBpcyBhc3NpZ25lZCwgYW5kIGl0cyBJRCBpcyBzZXQgdG8gYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCwgYW5kIHRoZSBlbnRyeSYjMzk7cyBwcmlvcml0eSBpcyBzZXQgd2l0aCB0aGUgZmxvdyYjMzk7cyBwcmlvcml0eS4gT2theSwgc2V0dGluZyBwcmlvcml0eSBhcyBhIGZsb3cgYWN0aW9uLCB0aGF04oCZcyB1c2VmdWwuCgpGaW5hbGx5LCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2UmIzM5O3JlIGNvcHlpbmcgdGhlIGBza2ItJmd0O3ByaW9yaXR5YCBpbnRvIGBmbG93LSZndDtwcmlvcml0eWAuIEludGVyZXN0aW5nLCB3ZSYjMzk7cmUgdGFraW5nIHRoZSBwYWNrZXQmIzM5O3MgcHJpb3JpdHkgdG8gcG9wdWxhdGUgdGhlIGZsb3cmIzM5O3MgcHJpb3JpdHkuLi4gd2hpY2ggaXMgdGhlbiB1c2VkIGJ5IHRoZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgY29kZS4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBpcyAqYWxsb2NhdGVkKiBhbmQgKmluaXRpYWxpemVkKi4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0aGF0IHRoZXJlIGFyZSBhIGxvdCBvZiBjb2RlIHBhdGhzIGhlcmUgdGhhdCBjYW4gYXNzaWduIHRoZSBgcHJpb3JpdHlgIGZpZWxkIG9mIHRoZSBgZmxvd2Agc3RydWN0dXJlIGFuZCB0aGVuIGNvcHkgaXQgYXJvdW5kLCBidXQgd2hhdCBhYm91dCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgZmllbGQgaXMgKmZpcnN0KiBzZXQ/IEkgbmVlZCB0byB1c2UgZ3JlcHBlciAob3IgZXF1aXZhbGVudCkgdG8gc2VhcmNoIGZvciBhbGxvY2F0aW9ucyBvZiB0aGF0IGBmbG93X29mZmxvYWRgIHN0cnVjdCwgb3IgcmVsZXZhbnQgYWxsb2MgYW5kIGluaXQgZnVuY3Rpb25zLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBmbG93X29mZmxvYWRfYWxsb2NgIG9yIHNpbWlsYXIgbmFtZXMuIEkgbmVlZCB0byBrbm93ICpleGFjdGx5KiBob3cgYW5kIHdoZXJlIHRoYXQgYHByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBpbml0aWFsbHkuIFRoYXQgd2lsbCBiZSB0aGUgZGV0ZXJtaW5pbmcgZmFjdG9yIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIElmIHRoaXMgZmllbGQgaXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseSwgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlLCBhbmQgcG9zc2libHkgZXhwbG9pdGFibGUsIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dfb2ZmbG9hZF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTIxOT1zdHJ1Y3QgbmZfZmxvd19yb3V0ZSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDMtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0NDpzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ1LXZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yMj1mbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTUyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1MzpzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03Ni19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODcxPXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODc4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4Nzk6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04ODAtXHRcdFx0XHQgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05ODQ9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTg5Olx0ZXJyID0gbmZfZmxvd19vZmZsb2FkX2FsbG9jKG9mZmxvYWQsIGZsb3dfcnVsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5MC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTEtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMTI6XHRmbG93ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMy1cdGlmICghZmxvdylcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MzQtXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDM1Olx0ZW50cnkgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xubmV0L3NjaGVkL2FjdF9jdC5jLTQzNi1cdGlmICghZW50cnkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBmbG93X29mZmxvYWRfYWxsb2NgIGltcGxlbWVudGF0aW9uLCBjb25zaWRlcmluZyBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2A6CgoqKkRpdmluZyBpbnRvIGBmbG93X29mZmxvYWRfYWxsb2NgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmxvdyBvZmZsb2FkIGFsbG9jYXRpb24gcHJvY2Vzcy4gU2luY2Ugd2UmIzM5O3JlIGluIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIGhvdyBmbG93IGVudHJpZXMgYXJlIGNyZWF0ZWQgZm9yIG9mZmxvYWRpbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJiMzOTttIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBwb3NzaWJseSBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgb3IgdGFibGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5LCBob3cgdGhlIGZsb3cgZW50cnkgaXRzZWxmIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIElzIGl0IGFsbG9jYXRpbmcgZnJvbSBhIHByZS1kZWZpbmVkIHBvb2wsIG9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGVudHJpZXM/IERvZXMgaXQgY29uc2lkZXIgdGhlIHNwZWNpZmljIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChlLmcuLCBzdXBwb3J0ZWQgcHJvdG9jb2xzLCBtYXRjaCBmaWVsZHMsIGFjdGlvbnMpPyBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBsb2NraW5nIG1lY2hhbmlzbXMgaXQgdXNlcyDigJMgaXMgaXQgZW1wbG95aW5nIFJDVSwgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIHNwaW5sb2NrIGFwcHJvYWNoPyBBbHNvLCBJIGV4cGVjdCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBmbG93IHRhYmxlIHN1YnN5c3RlbSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzIG9yIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxlbWVudGF0aW9uIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgY29uc2lkZXIgd2hhdCB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0fVxuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxuICA1NDpcdHtcbiAgNTU6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gIDU2Olx0XG4gIDU3Olx0XHRpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoY3QpKSlcbiAgNTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDU5Olx0XG4gIDYwOlx0XHRmbG93ID0ga21lbV9jYWNoZV96YWxsb2MoZmxvd19vZmZsb2FkX2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gIDYxOlx0XHRpZiAoIWZsb3cpXG4gIDYyOlx0XHRcdHJldHVybiBOVUxMO1xuICA2MzpcdFxuICA2NDpcdFx0cmVmY291bnRfaW5jKFx1MDAyNmN0LVx1MDAzZWN0X2dlbmVyYWwudXNlKTtcbiAgNjU6XHRcdGZsb3ctXHUwMDNlY3QgPSBjdDtcbiAgNjY6XHRcbiAgNjc6XHRcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbiAgNjg6XHRcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbiAgNjk6XHRcbiAgNzA6XHRcdGlmIChjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IElQU19TUkNfTkFUKVxuICA3MTpcdFx0XHRfX3NldF9iaXQoTkZfRkxPV19TTkFULCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAgNzI6XHRcdGlmIChjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IElQU19EU1RfTkFUKVxuICA3MzpcdFx0XHRfX3NldF9iaXQoTkZfRkxPV19ETkFULCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAgNzQ6XHRcbiAgNzU6XHRcdHJldHVybiBmbG93O1xuICA3NjpcdH1cbiAgNzc6XHRFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xuICA3ODpcdFxuICA3OTpcdHN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcbiAgODA6XHR7XG4gIDgxOlx0XHRpZiAoZmxvd190dXBsZS1cdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNilcbiAgODI6XHRcdFx0cmV0dXJuIHJ0Nl9nZXRfY29va2llKGRzdF9ydDZfaW5mbyhmbG93X3R1cGxlLVx1MDAzZWRzdF9jYWNoZSkpO1xuICA4MzpcdFxuICA4NDpcdFx0cmV0dXJuIDA7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpuZnRfcm91dGVfZHN0X2ZldGNoKHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiAgODg6XHRcdFx0XHRcdFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuICA4OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODExMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIFByaW9yaXR5IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBOZXRmaWx0ZXImIzM5O3MgZmxvdyBvZmZsb2FkIGhhbmRsZXMgcGFja2V0IHByaW9yaXRpZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGBwcmlvcml0eWAgZmllbGQgZ2V0cyBwb3B1bGF0ZWQgYW5kIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBgZmxvd19vZmZsb2FkX2FsbG9jYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIGFsbG9jYXRpbmcgYSBuZXcgZmxvdyBlbnRyeSwgbGV2ZXJhZ2VzIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBiZWNhdXNlIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZW50aXJlIGBmbG93YCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhlcmVmb3JlLCB0aGUgYHByaW9yaXR5YCBmaWVsZCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBgZmxvd2Agc3RydWN0dXJlIHN0YXJ0cyBhdCB6ZXJvLgoKTm93LCBsb29raW5nIGF0IGBuZnRfZmxvd19vZmZsb2FkLmNgLCBJIHNlZSBgZmxvdy0mZ3Q7cHJpb3JpdHkgPSBwa3QtJmd0O3NrYi0mZ3Q7cHJpb3JpdHk7YC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgKmludGVuZGVkKiBwcmlvcml0eSBnZXRzIGFzc2lnbmVkLiBBbmQgYHNrYi0mZ3Q7cHJpb3JpdHlgIGlzIG9uZSBvZiB0aGUgc3RhbmRhcmQgZmllbGRzIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlLgoKSG93ZXZlciwgdGhlIHBsb3QgdGhpY2tlbnMuIFdoZW4gYW5hbHl6aW5nIHRoZSBgYWN0X2N0LmNgIG1vZHVsZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgd2hlbiBgZW50cnlgIGlzIGFsbG9jYXRlZCB2aWEgYGZsb3dfb2ZmbG9hZF9hbGxvYyhjdClgLCBpdHMgYHByaW9yaXR5YCBpcyBzdGFydGluZyBhdCB6ZXJvLCBieSBkZXNpZ24uCgpHaXZlbiB0aGUgaW5pdGlhbCB6ZXJvLWFsbG9jYXRpb24sIEkmIzM5O20gbm93IGN1cmlvdXMgYWJvdXQgd2hhdCBhY3R1YWxseSBoYXBwZW5zIGlmIGBmbG93LSZndDtwcmlvcml0eWAgcmVtYWlucyB6ZXJvLiBJbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBJIHNlZSBgaWYgKGZsb3ctJmd0O3ByaW9yaXR5KSBza2ItJmd0O3ByaW9yaXR5ID0gZmxvdy0mZ3Q7cHJpb3JpdHk7YC4gTmF0dXJhbGx5LCBpZiB0aGUgcHJpb3JpdHkgaXMgemVybywgdGhhdCBlbnRpcmUgYGlmYCBzdGF0ZW1lbnQgaXMgc2tpcHBlZCwgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGhvdyBmbG93IGFjdGlvbnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIG9mIGZsb3cgZW50cmllcyBhbmQgdGhlIGFzc29jaWF0ZWQgYWN0aW9ucyBpbXBhY3QgdGhlIGBwcmlvcml0eWAgdmFsdWUuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBib3RoIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9hbGxvY2AgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBmbG93IGFjdGlvbnMgYXJlIGNvdW50ZWQgYW5kIGFsbG9jYXRlZC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHByaW9yaXR5IGlzIG1hbmFnZWQgd2l0aCBvdGhlciBwaWVjZXMgb2YgdGhlIG9mZmxvYWQgZnJhbWV3b3JrLiBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IGFsbCBpbnRlZ3JhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFxuIDY5MTpcdFx0aWYgKGZsb3dfb2ZmbG9hZF9kZWNhcF90dW5uZWwoZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwIHx8XG4gNjkyOlx0XHQgICAgZmxvd19vZmZsb2FkX2VuY2FwX3R1bm5lbChmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG4gNjkzOlx0XHRcdHJldHVybiAtMTtcbiA2OTQ6XHRcbiA2OTU6XHRcdGlmIChmbG93X29mZmxvYWRfZXRoX3NyYyhuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMCB8fFxuIDY5NjpcdFx0ICAgIGZsb3dfb2ZmbG9hZF9ldGhfZHN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxuIDY5NzpcdFx0XHRyZXR1cm4gLTE7XG4gNjk4Olx0XG4gNjk5Olx0XHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSkge1xuIDcwMDpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuIDcwMTpcdFxuIDcwMjpcdFx0XHRlbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcbiA3MDM6XHRcdFx0aWYgKCFlbnRyeSlcbiA3MDQ6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNzA1Olx0XG4gNzA2Olx0XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG4gNzA3Olx0XHRcdGVudHJ5LVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbiA3MDg6XHRcdH1cbiA3MDk6XHRcbiA3MTA6XHRcdHR1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbiA3MTE6XHRcbiA3MTI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1cGxlLVx1MDAzZWVuY2FwX251bTsgaSYjNDM7JiM0MzspIHtcbiA3MTM6XHRcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbiA3MTQ6XHRcbiA3MTU6XHRcdFx0aWYgKHR1cGxlLVx1MDAzZWluX3ZsYW5faW5ncmVzcyBcdTAwMjYgQklUKGkpKVxuIDcxNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDcxNzpcdFxuIDcxODpcdFx0XHRpZiAodHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7XG4gNzE5Olx0XHRcdFx0ZW50cnkgPSBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSk7XG4gNzIwOlx0XHRcdFx0aWYgKCFlbnRyeSlcbiA3MjE6XHRcdFx0XHRcdHJldHVybiAtMTtcbiA3MjI6XHRcdFx0XHRlbnRyeS1cdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1ZMQU5fUE9QO1xuIDcyMzpcdFx0XHR9XG4gNzI0Olx0XHR9XG4gNzI1Olx0XG4gNzI2Olx0XHRvdGhlcl90dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xuIDcyNzpcdFxuIDcyODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb3RoZXJfdHVwbGUtXHUwMDNlZW5jYXBfbnVtOyBpJiM0MzsmIzQzOykge1xuIDcyOTpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBGbG93IFJ1bGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgZmxvd19ydWxlYCBpbnN0YW5jZXMgYXJlIGJlaW5nIGFsbG9jYXRlZC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gY2FsbHMuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3Igd2hlcmUgYG5mX2Zsb3dfb2ZmbG9hZF9hbGxvY2Ag4oCTIG9yIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiDigJMgaXMgYmVpbmcgdXNlZC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5LCBvciBhdCBsZWFzdCBhIG1ham9yIGNvbnRyaWJ1dG9yLiBXaGVyZSBhcmUgd2UgZ2V0dGluZyB0aGVzZSBgZmxvd19ydWxlYCBzdHJ1Y3R1cmVzIGZyb20/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VlIHdoYXQgdGhlIGFsbG9jYXRpb24gbGFuZHNjYXBlIGxvb2tzIGxpa2UgZm9yIHRoZXNlIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjgyPXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NjgzOm5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODQtXHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NzU0PWludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3NTg6XHRpZiAobmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzU5LVx0XHRyZXR1cm4gLTE7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03ODM9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4Ni17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4NzpcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODgtXHRcdHJldHVybiAtMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmxvdyBydWxlIGFjdGlvbiBlbnRyaWVzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGNvdW50aW5nIGFuZCBhbGxvY2F0aW9uIHByb2Nlc3MuIFRoZSBgbmZfZmxvd19vZmZsb2FkX2FsbG9jYCBmdW5jdGlvbiBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCBhbmQgZm9jdXMgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGltZSB0byBzZWUgaG93IHRoaXMgY3J1Y2lhbCBhbGxvY2F0aW9uIGhhcHBlbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODc1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBGTE9XX09GRkxPQURfRElSX01BWDsgaSYjNDM7JiM0MzspXG4gODc2Olx0XHRcdF9fbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koZmxvd19ydWxlW2ldKTtcbiA4Nzc6XHR9XG4gODc4Olx0XG4gODc5Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuIDg4MDpcdFx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxuIDg4MTpcdHtcbiA4ODI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VuZXQpO1xuIDg4MzpcdFxuIDg4NDpcdFx0Zmxvd19ydWxlWzBdID0gbmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2MobmV0LCBvZmZsb2FkLFxuIDg4NTpcdFx0XHRcdFx0XHRcdCAgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4gODg2Olx0XHRpZiAoIWZsb3dfcnVsZVswXSlcbiA4ODc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODg4Olx0XG4gODg5Olx0XHRmbG93X3J1bGVbMV0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXG4gODkwOlx0XHRcdFx0XHRcdFx0ICBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbiA4OTE6XHRcdGlmICghZmxvd19ydWxlWzFdKSB7XG4gODkyOlx0XHRcdF9fbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koZmxvd19ydWxlWzBdKTtcbiA4OTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODk0Olx0XHR9XG4gODk1Olx0XG4gODk2Olx0XHRyZXR1cm4gMDtcbiA4OTc6XHR9XG4gODk4Olx0XG4gODk5Olx0c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2luaXQoc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNsc19mbG93LFxuIDkwMDpcdFx0XHRcdFx0IF9fYmUxNiBwcm90bywgaW50IHByaW9yaXR5LFxuIDkwMTpcdFx0XHRcdFx0IGVudW0gZmxvd19jbHNfY29tbWFuZCBjbWQsXG4gOTAyOlx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4gOTAzOlx0XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDkwNDpcdHtcbiA5MDU6XHRcdGNsc19mbG93LVx1MDAzZWNvbW1vbi5wcm90b2NvbCA9IHByb3RvO1xuIDkwNjpcdFx0Y2xzX2Zsb3ctXHUwMDNlY29tbW9uLnByaW8gPSBwcmlvcml0eTtcbiA5MDc6XHRcdGNsc19mbG93LVx1MDAzZWNvbW1vbi5leHRhY2sgPSBleHRhY2s7XG4gOTA4Olx0XHRjbHNfZmxvdy1cdTAwM2Vjb21tYW5kID0gY21kO1xuIDkwOTpcdFx0Y2xzX2Zsb3ctXHUwMDNlY29va2llID0gKHVuc2lnbmVkIGxvbmcpdHVwbGU7XG4gOTEwOlx0fVxuIDkxMTpcdFxuIDkxMjpcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX3R1cGxlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiA5MTM6XHRcdFx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIDkxNDpcdFx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSxcbiA5MTU6XHRcdFx0XHRcdCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuIDkxNjpcdFx0XHRcdFx0IGludCBwcmlvcml0eSwgaW50IGNtZCxcbiA5MTc6XHRcdFx0XHRcdCBzdHJ1Y3QgZmxvd19zdGF0cyAqc3RhdHMsXG4gOTE4Olx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tfY2JfbGlzdClcbiA5MTk6XHR7XG4gOTIwOlx0XHRzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCBjbHNfZmxvdyA9IHt9O1xuIDkyMTpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiA5MjI6XHRcdHN0cnVjdCBmbG93X2Jsb2NrX2NiICpibG9ja19jYjtcbiA5MjM6XHRcdF9fYmUxNiBwcm90byA9IEVUSF9QX0FMTDtcbiA5MjQ6XHRcdGludCBlcnIsIGkgPSAwO1xuIDkyNTpcdFxuIDkyNjpcdFx0bmZfZmxvd19vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX2Zsb3csIHByb3RvLCBwcmlvcml0eSwgY21kLFxuIDkyNzpcdFx0XHRcdCAgICAgXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZSwgXHUwMDI2ZXh0YWNrKTtcbiA5Mjg6XHRcdGlmIChjbWQgPT0gRkxPV19DTFNfUkVQTEFDRSlcbiA5Mjk6XHRcdFx0Y2xzX2Zsb3cucnVsZSA9IGZsb3dfcnVsZS1cdTAwM2VydWxlO1xuIDkzMDpcdFxuIDkzMTpcdFx0ZG93bl9yZWFkKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuIDkzMjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19jYiwgYmxvY2tfY2JfbGlzdCwgbGlzdCkge1xuIDkzMzpcdFx0XHRlcnIgPSBibG9ja19jYi1cdTAwM2VjYihUQ19TRVRVUF9DTFNGTE9XRVIsIFx1MDAyNmNsc19mbG93LFxuIDkzNDpcdFx0XHRcdFx0ICAgYmxvY2tfY2ItXHUwMDNlY2JfcHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjU1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgYm91bmNlciwgaWYgeW91IHdpbGwsIGZvciBuZXcgb2ZmbG9hZCBydWxlcyBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBzdWJzeXN0ZW0uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW4gYXV0b21hdGljYWxseTogd2hhdCBkb2VzIGl0ICpkbyosIHdoYXQgYXJlIHRoZSAqaW5wdXRzKiwgd2hhdCBhcmUgdGhlICpvdXRwdXRzKiwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsICpmYWlsdXJlIHBvaW50cyogYW5kIHJlc291cmNlIGNvbnRlbnRpb24gaXNzdWVzPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBudWFuY2VzIGFyb3VuZCBhbGxvY2F0aW9uLiBNZW1vcnkgYWxsb2NhdGlvbiwgb2J2aW91c2x5LCBidXQgYWxzbyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIHJ1bGUgZGF0YWJhc2UgYW5kIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIElzIGl0IHByb3Blcmx5IGxvY2tlZD8gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGR1cmluZyBoaWdoLXJhdGUgcnVsZSBpbnNlcnRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBlbnN1cmluZyB0aGF0IGEgbmV3IGZsb3cgb2ZmbG9hZCBydWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBoYW5kbGluZyBhIHJ1bGUgc3RydWN0dXJlLCBwb3B1bGF0aW5nIGZpZWxkcyBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzLCBtYW5hZ2luZyByZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFzaCB0YWJsZSBvciBvdGhlciBpbmRleGluZyBtZWNoYW5pc21zIHVzZWQgdG8gb3B0aW1pemUgcnVsZSBsb29rdXAuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgZXJyb3JzLCB0b28uIEhvdyBhcmUgYWxsb2NhdGlvbiBmYWlsdXJlcyBkZWFsdCB3aXRoPyBXaGF0IGFib3V0IGludmFsaWQgaW5wdXRzIG9yIGNvbmZsaWN0aW5nIHJ1bGUgcGFyYW1ldGVycz8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgY29ybmVyIGNhc2VzIGluIHRoZSBlcnJvciBoYW5kbGluZyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMgc28gSSBjYW4gZGV0ZXJtaW5lIGhvdyB3ZWxsIHRoaXMgZnVuY3Rpb24gaXMgcGVyZm9ybWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTgwOD1zdGF0aWMgc3RydWN0IG5mX2Zsb3dfcnVsZSAqXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgwOTpuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgxMC1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04Nzk9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODgzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4ODQ6XHRmbG93X3J1bGVbMF0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg4NS1cdFx0XHRcdFx0XHQgIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODg4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4ODk6XHRmbG93X3J1bGVbMV0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg5MC1cdFx0XHRcdFx0XHQgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAwMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIFRoZSBuYW1lIGl0c2VsZiwgYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCwgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIG9mIGEgc3RydWN0dXJlIHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkaW5nLCBsaWtlbHkgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGEgZGF0YSBzdHJ1Y3R1cmUg4oCTIHByb2JhYmx5IHNvbWUgc29ydCBvZiBydWxlIG9yIGRlc2NyaXB0b3Ig4oCTIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlcHJlc2VudCBhIHBhcnRpY3VsYXIgZmxvdyBmb3IgaGFyZHdhcmUgb2ZmbG9hZC4gV2XigJlyZSBub3QgdGFsa2luZyBhYm91dCBqdXN0IGFueSBkYXRhIHN0cnVjdHVyZSwgYnV0IG9uZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIHB1c2hpbmcgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGRvd24gdG8gdGhlIE5JQy4gVGhhdCYjMzk7cyB0aGUga2V5LiBXaGF0IGlzIGl0cyBkZXNpZ24/IFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHMgaXQgbmVlZHMgdG8gaG9sZD8KSSB3YW50IHRvIGtub3cgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIE5ldGZpbHRlciBvZmZsb2FkIGZyYW1ld29yay4gSG93IGRvZXMgdGhpcyBhbGxvY2F0aW9uIGhhcHBlbiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlPyBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdyYjMzk7cyBpdCBtYW5hZ2VkIGZvciBjb25jdXJyZW5jeT8gV2hhdCBtZW1vcnkgcG9vbCBvciBhbGxvY2F0b3IgaXMgYmVpbmcgdXNlZD8gQW5kIHdoYXQmIzM5O3MgZ29pbmcgdG8gYmUgdGhlIGV2ZW50dWFsIHJlbGVhc2UgZnVuY3Rpb24sIGl0JiMzOTtzIHR3aW4sIGFuZCB3aGF0IGFyZSB0aGUgaW1wb3J0YW50IGVsZW1lbnRzIG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGNhbGxlZD8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGFsc28gaW1wb3J0YW50LiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHRoaXMgYWxsb2NhdGlvbiB0byBmYWlsLCBhbmQgaG93IGFyZSB0aG9zZSBmYWlsdXJlcyBoYW5kbGVkPyBUaGUgdXN1YWwgc3R1ZmYuClRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGVzaWduIGlzc3VlcyBlbWVyZ2Ug4oCTIGhvdyBlZmZpY2llbnQgaXMgdGhpcyBwcm9jZXNzLCBhbmQgaG93IG11Y2ggb3ZlcmhlYWQgZG9lcyB0aGUgYWxsb2NhdGlvbiBhZGQgdG8gdGhlIG92ZXJhbGwgb2ZmbG9hZCBwYXRoPyBJcyB0aGlzIGRvbmUgYXQgZmxvdyBjcmVhdGlvbiBvciBkdXJpbmcgdGhlIGRhdGEgcGF0aD8gTGV0JiMzOTtzIGdldCBpbnRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwODpcdHN0YXRpYyBzdHJ1Y3QgbmZfZmxvd19ydWxlICpcbiA4MDk6XHRuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4gODEwOlx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxuIDgxMTpcdFx0XHRcdCAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4gODEyOlx0e1xuIDgxMzpcdFx0Y29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlID0gb2ZmbG9hZC1cdTAwM2VmbG93dGFibGU7XG4gODE0Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwgKm90aGVyX3R1cGxlO1xuIDgxNTpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyA9IG9mZmxvYWQtXHUwMDNlZmxvdztcbiA4MTY6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdCA9IE5VTEw7XG4gODE3Olx0XHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGU7XG4gODE4Olx0XHRpbnQgZXJyID0gLUVOT01FTTtcbiA4MTk6XHRcbiA4MjA6XHRcdGZsb3dfcnVsZSA9IGt6YWxsb2Nfb2JqKCpmbG93X3J1bGUpO1xuIDgyMTpcdFx0aWYgKCFmbG93X3J1bGUpXG4gODIyOlx0XHRcdGdvdG8gZXJyX2Zsb3c7XG4gODIzOlx0XG4gODI0Olx0XHRmbG93X3J1bGUtXHUwMDNlcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhORl9GTE9XX1JVTEVfQUNUSU9OX01BWCk7XG4gODI1Olx0XHRpZiAoIWZsb3dfcnVsZS1cdTAwM2VydWxlKVxuIDgyNjpcdFx0XHRnb3RvIGVycl9mbG93X3J1bGU7XG4gODI3Olx0XG4gODI4Olx0XHRmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VtYXRjaC5kaXNzZWN0b3IgPSBcdTAwMjZmbG93X3J1bGUtXHUwMDNlbWF0Y2guZGlzc2VjdG9yO1xuIDgyOTpcdFx0Zmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlbWF0Y2gubWFzayA9IFx1MDAyNmZsb3dfcnVsZS1cdTAwM2VtYXRjaC5tYXNrO1xuIDgzMDpcdFx0Zmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlbWF0Y2gua2V5ID0gXHUwMDI2Zmxvd19ydWxlLVx1MDAzZW1hdGNoLmtleTtcbiA4MzE6XHRcbiA4MzI6XHRcdHR1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbiA4MzM6XHRcdG90aGVyX3R1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XG4gODM0Olx0XHRpZiAob3RoZXJfdHVwbGUtXHUwMDNleG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIKVxuIDgzNTpcdFx0XHRvdGhlcl9kc3QgPSBvdGhlcl90dXBsZS1cdTAwM2Vkc3RfY2FjaGU7XG4gODM2Olx0XG4gODM3Olx0XHRlcnIgPSBuZl9mbG93X3J1bGVfbWF0Y2goXHUwMDI2Zmxvd19ydWxlLVx1MDAzZW1hdGNoLCB0dXBsZSwgb3RoZXJfZHN0KTtcbiA4Mzg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gODM5Olx0XHRcdGdvdG8gZXJyX2Zsb3dfbWF0Y2g7XG4gODQwOlx0XG4gODQxOlx0XHRmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VhY3Rpb24ubnVtX2VudHJpZXMgPSAwO1xuIDg0MjpcdFx0aWYgKGZsb3d0YWJsZS1cdTAwM2V0eXBlLVx1MDAzZWFjdGlvbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbiA4NDM6XHRcdFx0Z290byBlcnJfZmxvd19tYXRjaDtcbiA4NDQ6XHRcbiA4NDU6XHRcdHJldHVybiBmbG93X3J1bGU7XG4gODQ2Olx0XG4gODQ3Olx0ZXJyX2Zsb3dfbWF0Y2g6XG4gODQ4Olx0XHRrZnJlZShmbG93X3J1bGUtXHUwMDNlcnVsZSk7XG4gODQ5Olx0ZXJyX2Zsb3dfcnVsZTpcbiA4NTA6XHRcdGtmcmVlKGZsb3dfcnVsZSk7XG4gODUxOlx0ZXJyX2Zsb3c6XG4gODUyOlx0XHRyZXR1cm4gTlVMTDtcbiA4NTM6XHR9XG4gODU0Olx0XG4gODU1Olx0c3RhdGljIHZvaWQgX19uZl9mbG93X29mZmxvYWRfZGVzdHJveShzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4gODU2Olx0e1xuIDg1NzpcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbiA4NTg6XHRcdGludCBpO1xuIDg1OTpcdFxuIDg2MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDg2MTpcdFx0XHRlbnRyeSA9IFx1MDAyNmZsb3dfcnVsZS1cdTAwM2VydWxlLVx1MDAzZWFjdGlvbi5lbnRyaWVzW2ldO1xuIDg2MjpcdFx0XHRpZiAoZW50cnktXHUwMDNlaWQgIT0gRkxPV19BQ1RJT05fUkVESVJFQ1QpXG4gODYzOlx0XHRcdFx0Y29udGludWU7XG4gODY0Olx0XG4gODY1Olx0XHRcdGRldl9wdXQoZW50cnktXHUwMDNlZGV2KTtcbiA4NjY6XHRcdH1cbiA4Njc6XHRcdGtmcmVlKGZsb3dfcnVsZS1cdTAwM2VydWxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBGbG93IFRhYmxlIEFsbG9jYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZsb3cgcnVsZSBhbGxvY2F0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZsb3dfcnVsZV9hbGxvY2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBsaW5jaHBpbiBmb3IgYWxsb2NhdGluZyBuZXcgZmxvdyBydWxlcywgc28gdW5kZXJzdGFuZGluZyBpdHMgbnVhbmNlcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2NhbGFiaWxpdHkuIEkgYWxzbyB3YW50IHRvIHZlcmlmeSB0aGUgdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBhY3Rpb25zIHdlIHN1cHBvcnQgcGVyIGZsb3cgcnVsZS4gTGV0IG1lIGxvb2sgdXAgYE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFjdGlvbiBsaW1pdC4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhlIHBsYWNlbWVudCBvZiBgZmxvd19hY3Rpb25fZW50cnlfbmV4dGAgd2l0aGluIHRoZSBzdHJ1Y3R1cmUsIGhvdyBkb2VzIHRoZSBsaW5rZWQgbGlzdCBvZiBhY3Rpb25zIGJlaGF2ZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRkxPV19SVUxFX0FDVElPTl9NQVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xNy1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTg6I2RlZmluZSBORl9GTE9XX1JVTEVfQUNUSU9OX01BWFx0MjRcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0yMjA9Zmxvd19hY3Rpb25fZW50cnlfbmV4dChzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMjMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIyNDpcdGlmICh1bmxpa2VseShmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VhY3Rpb24ubnVtX2VudHJpZXMgXHUwMDNlPSBORl9GTE9XX1JVTEVfQUNUSU9OX01BWCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTIyNS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDk9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODIzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4MjQ6XHRmbG93X3J1bGUtXHUwMDNlcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhORl9GTE9XX1JVTEVfQUNUSU9OX01BWCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgyNS1cdGlmICghZmxvd19ydWxlLVx1MDAzZXJ1bGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTU4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBvZiBGbG93IFJ1bGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmbG93IHJ1bGVzIGFyZSBiZWluZyBicm91Z2h0IHRvIGxpZmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBmbG93X3J1bGVfYWxsb2NgLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgYmlydGhwbGFjZSBvZiB0aGVzZSBlbnRyaWVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCByaWdodCBvZmYgdGhlIGJhdC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhbmQgb3B0aW1pemF0aW9uIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgc28gbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zmxvd19ydWxlX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jPTcwOT1zdGF0aWMgaW50IG5mcF9mbF9tZXJnZV9hY3Rpb25zX29mZmxvYWQoc3RydWN0IGZsb3dfcnVsZSAqKnJ1bGVzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jLTcyNi1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6NzI3Olx0YV9ydWxlID0gZmxvd19ydWxlX2FsbG9jKG51bV9hY3Rpb25zICYjNDM7IChudW1fcnVsZXMgLyAyKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy03MjgtXHRpZiAoIWFfcnVsZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYz0xNDc5PW5mcF9mbF9jdF9mbG93X2VudHJ5ICpuZnBfZmxfY3RfYWRkX2Zsb3coc3RydWN0IG5mcF9mbF9jdF96b25lX2VudHJ5ICp6dCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6MTQ5NDpcdGVudHJ5LVx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoZmxvdy1cdTAwM2VydWxlLVx1MDAzZWFjdGlvbi5udW1fZW50cmllcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDk1LVx0aWYgKCFlbnRyeS1cdTAwM2VydWxlKSB7XG4tLVxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9NDQxPXN0cnVjdCBmbG93X3J1bGUge1xuLS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTQ0NS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjQ0NjpzdHJ1Y3QgZmxvd19ydWxlICpmbG93X3J1bGVfYWxsb2ModW5zaWduZWQgaW50IG51bV9hY3Rpb25zKTtcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTQ0Ny1cbi0tXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYy05LVxubmV0L2NvcmUvZmxvd19vZmZsb2FkLmM6MTA6c3RydWN0IGZsb3dfcnVsZSAqZmxvd19ydWxlX2FsbG9jKHVuc2lnbmVkIGludCBudW1fYWN0aW9ucylcbm5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jLTExLXtcbi0tXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYy0yNy19XG5uZXQvY29yZS9mbG93X29mZmxvYWQuYzoyODpFWFBPUlRfU1lNQk9MKGZsb3dfcnVsZV9hbGxvYyk7XG5uZXQvY29yZS9mbG93X29mZmxvYWQuYy0yOS1cbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM3MTc9ZXRodG9vbF9yeF9mbG93X3J1bGVfY3JlYXRlKGNvbnN0IHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlY19pbnB1dCAqaW5wdXQpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNzI5LVx0LyogZXRodG9vbF9yeCBzdXBwb3J0cyBvbmx5IG9uZSBzaW5nbGUgYWN0aW9uIHBlciBydWxlLiAqL1xubmV0L2V0aHRvb2wvaW9jdGwuYzozNzMwOlx0Zmxvdy1cdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKDEpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0zNzMxLVx0aWYgKCFmbG93LVx1MDAzZXJ1bGUpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTgwOT1uZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MjMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgyNDpcdGZsb3dfcnVsZS1cdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODI1LVx0aWYgKCFmbG93X3J1bGUtXHUwMDNlcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoxMDpzdGF0aWMgc3RydWN0IG5mdF9mbG93X3J1bGUgKm5mdF9mbG93X3J1bGVfYWxsb2MoaW50IG51bV9hY3Rpb25zKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTExLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MTg6XHRmbG93LVx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MobnVtX2FjdGlvbnMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTE5LVx0aWYgKCFmbG93LVx1MDAzZXJ1bGUpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9ODg9c3RydWN0IG5mdF9mbG93X3J1bGUgKm5mdF9mbG93X3J1bGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTA3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjEwODpcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2FsbG9jKG51bV9hY3Rpb25zKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xMDktXHRpZiAoIWZsb3cpXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz00NTk9c3RhdGljIGludCBmbF9od19yZXBsYWNlX2ZpbHRlcihzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTQ2Ny1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6NDY4Olx0Y2xzX2Zsb3dlci5ydWxlID0gZmxvd19ydWxlX2FsbG9jKHRjZl9leHRzX251bV9hY3Rpb25zKFx1MDAyNmYtXHUwMDNlZXh0cykpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy00NjktXHRpZiAoIWNsc19mbG93ZXIucnVsZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI2Nzc9c3RhdGljIGludCBmbF9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjY5Mi1cdFx0Y2xzX2Zsb3dlci5ydWxlID1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjY5MzpcdFx0XHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXHUwMDI2Zi1cdTAwM2VleHRzKSk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI2OTQtXHRcdGlmICghY2xzX2Zsb3dlci5ydWxlKSB7XG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yNzYzPXN0YXRpYyBpbnQgZmxfaHdfY3JlYXRlX3RtcGx0KHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjc2OC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mjc2OTpcdGNsc19mbG93ZXIucnVsZSA9IGZsb3dfcnVsZV9hbGxvYygwKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjc3MC1cdGlmICghY2xzX2Zsb3dlci5ydWxlKVxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9Mjg1Nz1zdGF0aWMgdm9pZCBmbF90bXBsdF9yZW9mZmxvYWQoc3RydWN0IHRjZl9jaGFpbiAqY2hhaW4sIGJvb2wgYWRkLFxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjg2Mi1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mjg2MzpcdGNsc19mbG93ZXIucnVsZSA9IGZsb3dfcnVsZV9hbGxvYygwKTtcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjg2NC1cdGlmICghY2xzX2Zsb3dlci5ydWxlKVxuLS1cbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYz04ND1zdGF0aWMgaW50IG1hbGxfcmVwbGFjZV9od19maWx0ZXIoc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTkzLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjk0Olx0Y2xzX21hbGwucnVsZSA9XHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXHUwMDI2aGVhZC1cdTAwM2VleHRzKSk7XG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtOTUtXHRpZiAoIWNsc19tYWxsLnJ1bGUpXG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTI3NT1zdGF0aWMgaW50IG1hbGxfcmVvZmZsb2FkKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBib29sIGFkZCwgZmxvd19zZXR1cF9jYl90ICpjYixcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjg1LVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjI4NjpcdGNsc19tYWxsLnJ1bGUgPVx0Zmxvd19ydWxlX2FsbG9jKHRjZl9leHRzX251bV9hY3Rpb25zKFx1MDAyNmhlYWQtXHUwMDNlZXh0cykpO1xubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTI4Ny1cdGlmICghY2xzX21hbGwucnVsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRmxvdyBPZmZsb2FkKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGZsb3cgb2ZmbG9hZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jYC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgd2hlcmUgdGhlIHByaW1hcnkgbG9naWMgZm9yIG9mZmxvYWRpbmcgbmV0d29yayBmbG93cyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgYWN0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb25jZSBhIGZsb3cgZW50cnkgbWF0Y2hlcywgc28gSSBzaG91bGQgbG9vayBhdCBgZmxvd19hY3Rpb25fZW50cnlfbmV4dGAuIFRoYXQgZnVuY3Rpb24gbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdHJhY2luZyB0aGUgb2ZmbG9hZCBwcm9jZXNzLiBUaGVzZSB0d28gcG9pbnRzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmxvd19vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2FjdF9hcGkuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY25ldC9mbG93X29mZmxvYWQuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdHN0cnVjdCBmbG93X3J1bGUgKmZsb3dfcnVsZV9hbGxvYyh1bnNpZ25lZCBpbnQgbnVtX2FjdGlvbnMpXG4gIDExOlx0e1xuICAxMjpcdFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZTtcbiAgMTM6XHRcdGludCBpO1xuICAxNDpcdFxuICAxNTpcdFx0cnVsZSA9IGt6YWxsb2NfZmxleCgqcnVsZSwgYWN0aW9uLmVudHJpZXMsIG51bV9hY3Rpb25zKTtcbiAgMTY6XHRcdGlmICghcnVsZSlcbiAgMTc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDE4Olx0XG4gIDE5Olx0XHRydWxlLVx1MDAzZWFjdGlvbi5udW1fZW50cmllcyA9IG51bV9hY3Rpb25zO1xuICAyMDpcdFx0LyogUHJlLWZpbGwgZWFjaCBhY3Rpb24gaHdfc3RhdHMgd2l0aCBET05UX0NBUkUuXG4gIDIxOlx0XHQgKiBDYWxsZXIgY2FuIG92ZXJyaWRlIHRoaXMgaWYgaXQgd2FudHMgc3RhdHMgZm9yIGEgZ2l2ZW4gYWN0aW9uLlxuICAyMjpcdFx0ICovXG4gIDIzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYWN0aW9uczsgaSYjNDM7JiM0MzspXG4gIDI0Olx0XHRcdHJ1bGUtXHUwMDNlYWN0aW9uLmVudHJpZXNbaV0uaHdfc3RhdHMgPSBGTE9XX0FDVElPTl9IV19TVEFUU19ET05UX0NBUkU7XG4gIDI1Olx0XG4gIDI2Olx0XHRyZXR1cm4gcnVsZTtcbiAgMjc6XHR9XG4gIDI4Olx0RVhQT1JUX1NZTUJPTChmbG93X3J1bGVfYWxsb2MpO1xuICAyOTpcdFxuICAzMDpcdHN0cnVjdCBmbG93X29mZmxvYWRfYWN0aW9uICpvZmZsb2FkX2FjdGlvbl9hbGxvYyh1bnNpZ25lZCBpbnQgbnVtX2FjdGlvbnMpXG4gIDMxOlx0e1xuICAzMjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF9hY3Rpb24gKmZsX2FjdGlvbjtcbiAgMzM6XHRcdGludCBpO1xuICAzNDpcdFxuICAzNTpcdFx0ZmxfYWN0aW9uID0ga3phbGxvY19mbGV4KCpmbF9hY3Rpb24sIGFjdGlvbi5lbnRyaWVzLCBudW1fYWN0aW9ucyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfZmxvd190YWJsZV9vZmZsb2FkLmMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHdpdGhpbiBgZmxvd19hY3Rpb25fZW50cnlfbmV4dGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGhvdyB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IG9mZmxvYWRlZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSAmIzM0O25leHQmIzM0OyBzdGF0ZSBvciBhY3Rpb24gZm9yIGEgZ2l2ZW4gZmxvdyBlbnRyeS4gSXMgaXQgYSBzdGF0ZSBtYWNoaW5lPyBEb2VzIGl0IGRldGVybWluZSB3aGVyZSB0aGUgcGFja2V0IHNob3VsZCBiZSBzZW50IG5leHQsIHBlcmhhcHMgYmFzZWQgb24gb2ZmbG9hZCBjYXBhYmlsaXRpZXMgb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSBncmVwcGluZyBmb3IgY2FsbHMgdG8gYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgIHRvIGdldCBhbiBpZGVhIG9mIHdoZXJlIGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBzdXJyb3VuZHMgaXQuIFRoZW4sIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGZsb3cgY29udHJvbCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgZmxvdyBzdGF0ZSBpcyBhY3R1YWxseSBtYW5hZ2VkIHdpdGhpbiB0aGUgb2ZmbG9hZCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgb2ZmbG9hZCBtZWNoYW5pc20sIGVzcGVjaWFsbHkgaW4gdGVybXMgb2YgaGFyZHdhcmUgb2ZmbG9hZCB2ZXJzdXMgc29mdHdhcmUgZmFsbGJhY2sgc2NlbmFyaW9zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgJiMzNDtuZXh0JiMzNDsgYWN0aW9uIGlzIGNvbW11bmljYXRlZCB0byB0aGUgaGFyZHdhcmUgYW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBpcyB1bmFibGUgdG8gcGVyZm9ybSB0aGF0IGFjdGlvbiBmb3Igc29tZSByZWFzb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZWl0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFx0bWVtY3B5KFx1MDAyNmVudHJ5LVx1MDAzZW1hbmdsZS5tYXNrLCBtYXNrLCBzaXplb2YodTMyKSk7XG4gMjE2Olx0XHRtZW1jcHkoXHUwMDI2ZW50cnktXHUwMDNlbWFuZ2xlLnZhbCwgdmFsdWUsIHNpemVvZih1MzIpKTtcbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKlxuIDIyMDpcdGZsb3dfYWN0aW9uX2VudHJ5X25leHQoc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuIDIyMTpcdHtcbiAyMjI6XHRcdGludCBpO1xuIDIyMzpcdFxuIDIyNDpcdFx0aWYgKHVubGlrZWx5KGZsb3dfcnVsZS1cdTAwM2VydWxlLVx1MDAzZWFjdGlvbi5udW1fZW50cmllcyBcdTAwM2U9IE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYKSlcbiAyMjU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjI2Olx0XG4gMjI3Olx0XHRpID0gZmxvd19ydWxlLVx1MDAzZXJ1bGUtXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzJiM0MzsmIzQzOztcbiAyMjg6XHRcbiAyMjk6XHRcdHJldHVybiBcdTAwMjZmbG93X3J1bGUtXHUwMDNlcnVsZS1cdTAwM2VhY3Rpb24uZW50cmllc1tpXTtcbiAyMzA6XHR9XG4gMjMxOlx0XG4gMjMyOlx0c3RhdGljIGludCBmbG93X29mZmxvYWRfZXRoX3NyYyhzdHJ1Y3QgbmV0ICpuZXQsXG4gMjMzOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuIDIzNDpcdFx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbiAyMzU6XHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbiAyMzY6XHR7XG4gMjM3Olx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5MCA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcbiAyMzg6XHRcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xuIDIzOTpcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGUsICp0aGlzX3R1cGxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIEZsb3cgQWN0aW9uIEVudHJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCByaWdodCB0byBpdC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBvbiB0aGUgc2FtZSBwYWdlIHJlZ2FyZGluZyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBoZXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5YC4gSSBuZWVkIHRvIHJldmlldyBhbGwgb2YgaXRzIG1lbWJlcnMsIGVuc3VyZSB0aGF0IEkgaGF2ZSB0aGUgY29ycmVjdCB1bmRlcnN0YW5kaW5nIG9mIGVhY2ggZmllbGQgYW5kIHRoYXQgSSBoYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBkYXRhIHN0cnVjdHVyZSBjb3JyZWN0bHkgdW5kZXJzdG9vZC4gVGhpcyBzdHJ1Y3QgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB0aGUgd2F5IHRoaXMgd2hvbGUgc3lzdGVtIG9wZXJhdGVzLCBzbyB1bmRlcnN0YW5kaW5nIGl0IGNvbXBsZXRlbHkgaXMgbm90IG9wdGlvbmFsLiBJdCBtaWdodCBzZWVtIGxpa2UgYSBzaW1wbGUgc3RlcCwgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgdGhhdCBhIHNvbGlkIGZvdW5kYXRpb24gaGVyZSBzYXZlcyBob3VycyBvZiBkZWJ1Z2dpbmcgbGF0ZXIgb24uIFNvLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGVmaW5pdGlvbiBhbmQgZ2V0IHN0YXJ0ZWQgZnJvbSBhIHNvbGlkIHBvc2l0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oPTIzND1zdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlIHtcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yNDgtXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaDoyNDk6c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5IHtcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTI1MC1cdGVudW0gZmxvd19hY3Rpb25faWRcdFx0aWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBGbG93IE9mZmxvYWQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBvZmZsb2FkIHNpdHVhdGlvbiBiZXR0ZXIsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBpbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaGAsIGFuZCBJIGZpZ3VyZSBsaW5lIDI0OSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGxpZSB0aGVyZS4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaG9sZHMgc29tZSBrZXkgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhpcyBtb2R1bGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgYXdhaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0XHR1MzIgZXh0dmFsO1xuIDI0NjpcdFx0fSBleGNlZWQsIG5vdGV4Y2VlZDtcbiAyNDc6XHR9O1xuIDI0ODpcdFxuIDI0OTpcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSB7XG4gMjUwOlx0XHRlbnVtIGZsb3dfYWN0aW9uX2lkXHRcdGlkO1xuIDI1MTpcdFx0dTMyXHRcdFx0XHRod19pbmRleDtcbiAyNTI6XHRcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb29raWU7XG4gMjUzOlx0XHR1NjRcdFx0XHRcdG1pc3NfY29va2llO1xuIDI1NDpcdFx0ZW51bSBmbG93X2FjdGlvbl9od19zdGF0c1x0aHdfc3RhdHM7XG4gMjU1Olx0XHRhY3Rpb25fZGVzdHJcdFx0XHRkZXN0cnVjdG9yO1xuIDI1NjpcdFx0dm9pZFx0XHRcdFx0KmRlc3RydWN0b3JfcHJpdjtcbiAyNTc6XHRcdHVuaW9uIHtcbiAyNTg6XHRcdFx0dTMyXHRcdFx0Y2hhaW5faW5kZXg7XHQvKiBGTE9XX0FDVElPTl9HT1RPICovXG4gMjU5Olx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlXHQqZGV2O1x0XHQvKiBGTE9XX0FDVElPTl9SRURJUkVDVCAqL1xuIDI2MDpcdFx0XHRzdHJ1Y3Qge1x0XHRcdFx0LyogRkxPV19BQ1RJT05fVkxBTiAqL1xuIDI2MTpcdFx0XHRcdHUxNlx0XHR2aWQ7XG4gMjYyOlx0XHRcdFx0X19iZTE2XHRcdHByb3RvO1xuIDI2MzpcdFx0XHRcdHU4XHRcdHByaW87XG4gMjY0Olx0XHRcdH0gdmxhbjtcbiAyNjU6XHRcdFx0c3RydWN0IHtcdFx0XHRcdC8qIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSF9FVEggKi9cbiAyNjY6XHRcdFx0XHR1bnNpZ25lZCBjaGFyIGRzdFtFVEhfQUxFTl07XG4gMjY3Olx0XHRcdFx0dW5zaWduZWQgY2hhciBzcmNbRVRIX0FMRU5dO1xuIDI2ODpcdFx0XHR9IHZsYW5fcHVzaF9ldGg7XG4gMjY5Olx0XHRcdHN0cnVjdCB7XHRcdFx0XHQvKiBGTE9XX0FDVElPTl9NQU5HTEUgKi9cbiAyNzA6XHRcdFx0XHRcdFx0XHRcdC8qIEZMT1dfQUNUSU9OX0FERCAqL1xuIDI3MTpcdFx0XHRcdGVudW0gZmxvd19hY3Rpb25fbWFuZ2xlX2Jhc2UgaHR5cGU7XG4gMjcyOlx0XHRcdFx0dTMyXHRcdG9mZnNldDtcbiAyNzM6XHRcdFx0XHR1MzJcdFx0bWFzaztcbiAyNzQ6XHRcdFx0XHR1MzJcdFx0dmFsO1xuIDI3NTpcdFx0XHR9IG1hbmdsZTtcbiAyNzY6XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvXHQqdHVubmVsO1x0LyogRkxPV19BQ1RJT05fVFVOTkVMX0VOQ0FQICovXG4gMjc3Olx0XHRcdHUzMlx0XHRcdGNzdW1fZmxhZ3M7XHQvKiBGTE9XX0FDVElPTl9DU1VNICovXG4gMjc4Olx0XHRcdHUzMlx0XHRcdG1hcms7XHRcdC8qIEZMT1dfQUNUSU9OX01BUksgKi9cbiAyNzk6XHRcdFx0dTE2ICAgICAgICAgICAgICAgICAgICAgcHR5cGU7ICAgICAgICAgIC8qIEZMT1dfQUNUSU9OX1BUWVBFICovXG4gMjgwOlx0XHRcdHUxNlx0XHRcdHJ4X3F1ZXVlO1x0LyogRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyAqL1xuIDI4MTpcdFx0XHR1MzJcdFx0XHRwcmlvcml0eTtcdC8qIEZMT1dfQUNUSU9OX1BSSU9SSVRZICovXG4gMjgyOlx0XHRcdHN0cnVjdCB7XHRcdFx0XHQvKiBGTE9XX0FDVElPTl9RVUVVRSAqL1xuIDI4MzpcdFx0XHRcdHUzMlx0XHRjdHg7XG4gMjg0Olx0XHRcdFx0dTMyXHRcdGluZGV4O1xuIDI4NTpcdFx0XHRcdHU4XHRcdHZmO1xuIDI4NjpcdFx0XHR9IHF1ZXVlO1xuIDI4NzpcdFx0XHRzdHJ1Y3Qge1x0XHRcdFx0LyogRkxPV19BQ1RJT05fU0FNUExFICovXG4gMjg4Olx0XHRcdFx0c3RydWN0IHBzYW1wbGVfZ3JvdXBcdCpwc2FtcGxlX2dyb3VwO1xuIDI4OTpcdFx0XHRcdHUzMlx0XHRcdHJhdGU7XG4gMjkwOlx0XHRcdFx0dTMyXHRcdFx0dHJ1bmNfc2l6ZTtcbiAyOTE6XHRcdFx0XHRib29sXHRcdFx0dHJ1bmNhdGU7XG4gMjkyOlx0XHRcdH0gc2FtcGxlO1xuIDI5MzpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlIHBvbGljZTtcdC8qIEZMT1dfQUNUSU9OX1BPTElDRSAqL1xuIDI5NDpcdFx0XHRzdHJ1Y3Qge1x0XHRcdFx0LyogRkxPV19BQ1RJT05fQ1QgKi9cbiAyOTU6XHRcdFx0XHRpbnQgYWN0aW9uO1xuIDI5NjpcdFx0XHRcdHUxNiB6b25lO1xuIDI5NzpcdFx0XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGU7XG4gMjk4Olx0XHRcdH0gY3Q7XG4gMjk5Olx0XHRcdHN0cnVjdCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGTE9XX0FDVElPTl9QUklPUklUWSBVc2FnZSBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIHNpdHVhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZSBhY3Jvc3MgZGlmZmVyZW50IGRyaXZlcnMgYW5kIHN1YnN5c3RlbXMsIHNvIEkgc3RhcnRlZCBieSBsb29raW5nIGF0IHRoZSBwYXRjaCBub3Rlcy4gSSBzZWUgdGhhdCB0aGUgYGFpcm9oYV9wcGVgIGFuZCBgbXRrX3BwZV9vZmZsb2FkYCBkcml2ZXJzIGFyZSBoYW5kbGluZyB0aGlzIHdpdGggYSBzaW1wbGUgYGNhc2VgIHN0YXRlbWVudCBhbmQgYGJyZWFrYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMuCgpOb3csIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCBJIHNlZSB0aGF0IGlmIGBmbG93LSZndDtwcmlvcml0eWAgaGFzIGEgdmFsdWUsIHRoZXkgYXJlIHNldHRpbmcgdGhlIGBza2ItJmd0O3ByaW9yaXR5YC4gT2theSwgaW50ZXJlc3RpbmcuIEFuZCwgdGhlIHJldmVyc2UgaXMgaGFwcGVuaW5nIGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCB3aGVyZSB0aGV5JiMzOTtyZSB0YWtpbmcgYHBrdC0mZ3Q7c2tiLSZndDtwcmlvcml0eWAgYW5kIHNldHRpbmcgaXQgb24gdGhlIGBmbG93LSZndDtwcmlvcml0eWAuIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIHBhc3NpbmcgaXQgYm90aCB3YXlzLgoKVGhlbiwgdGhlcmUmIzM5O3MgYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gSGVyZSwgaWYgYGZsb3ctJmd0O3ByaW9yaXR5YCBpcyBzZXQsIGEgYGZsb3dfYWN0aW9uX2VudHJ5YCBpcyBwb3B1bGF0ZWQgd2l0aCBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGFuZCB0aGUgYGZsb3ctJmd0O3ByaW9yaXR5YCB2YWx1ZS4gVGhpcyBpcyBsaWtlbHkgaG93IHRoZSBwcmlvcml0eSBpcyBiZWluZyAqcGVyc2lzdGVkKiBvciAqYWN0ZWQgdXBvbiogaW4gdGhlIGZsb3cgdGFibGUgb2ZmbG9hZC4gTWFrZXMgc2Vuc2UuCgpUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8ga25vdyAqZXZlcnl3aGVyZSogdGhpcyBpcyB1c2VkLiBJdCYjMzk7cyB0aW1lIHRvIGxldmVyYWdlIG15IGdyZXAgc2tpbGxzLiBMZXQmIzM5O3MgZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGTE9XX0FDVElPTl9QUklPUklUWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM9MTU3PXN0YXRpYyBpbnQga3N6OTQ3N19mbG93ZXJfcGFyc2VfYWN0aW9uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N190Y19mbG93ZXIuYy0xNzYtXHRcdHN3aXRjaCAoYWN0LVx1MDAzZWlkKSB7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM6MTc3Olx0XHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X3RjX2Zsb3dlci5jLTE3OC1cdFx0XHRpZiAoYWN0LVx1MDAzZXByaW9yaXR5IFx1MDAzZSBLU1o5NDc3X01BWF9UQykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz0yMDIxPXl0OTIxeF9hY2xfcnVsZV9leHRfcGFyc2VfZmxvd19hY3Rpb24oc3RydWN0IHl0OTIxeF9hY2xfcnVsZV9leHQgKnJ1bGVleHQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTIwNzYtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6MjA3NzpcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy0yMDc4LVx0XHRcdGlmIChzZWVuX3ByaW9yaXR5KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDg4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE2My1cdFx0XHRicmVhaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE2NDpcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE2NS1cdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTI3Nj1tdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMzgwLVx0XHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM6MzgxOlx0XHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMzgyLVx0XHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZmxvd2VyLmM9NTg9c3RhdGljIGludCBtbHhzd19zcF9mbG93ZXJfcGFyc2VfYWN0aW9ucyhzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2Zsb3dlci5jLTIxOC1cdFx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYzoyMTk6XHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYy0yMjAtXHRcdFx0ZXJyID0gbWx4c3dfc3BfYWNsX3J1bGVpX2FjdF9wcmlvcml0eShtbHhzd19zcCwgcnVsZWksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmxvd2VyLmM9MjU3PXN0YXRpYyBpbnQgb2NlbG90X2Zsb3dlcl9wYXJzZV9hY3Rpb24oc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYy00NjUtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYzo0NjY6XHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYy00NjctXHRcdFx0aWYgKGZpbHRlci1cdTAwM2VibG9ja19pZCAhPSBWQ0FQX0lTMSkge1xuLS1cbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oPTE1MD1lbnVtIGZsb3dfYWN0aW9uX2lkIHtcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0xNjgtXHRGTE9XX0FDVElPTl9QVFlQRSxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjE2OTpcdEZMT1dfQUNUSU9OX1BSSU9SSVRZLFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMTcwLVx0RkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyxcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaD0yNDk9c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5IHtcbi0tXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yODAtXHRcdHUxNlx0XHRcdHJ4X3F1ZXVlO1x0LyogRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyAqL1xuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg6MjgxOlx0XHR1MzJcdFx0XHRwcmlvcml0eTtcdC8qIEZMT1dfQUNUSU9OX1BSSU9SSVRZICovXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yODItXHRcdHN0cnVjdCB7XHRcdFx0XHQvKiBGTE9XX0FDVElPTl9RVUVVRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjgzPW5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzA1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3MDY6XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTcwNy1cdFx0ZW50cnktXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jPTM3MD1zdGF0aWMgaW50IHRjZl9za2JlZGl0X29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zODMtXHRcdH0gZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KSkge1xubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM6Mzg0Olx0XHRcdGVudHJ5LVx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zODUtXHRcdFx0ZW50cnktXHUwMDNlcHJpb3JpdHkgPSB0Y2Zfc2tiZWRpdF9wcmlvcml0eShhY3QpO1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQwNy1cdFx0ZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KSlcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjQwODpcdFx0XHRmbF9hY3Rpb24tXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTtcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQwOS1cdFx0ZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcnhfcXVldWVfbWFwcGluZyhhY3QpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEwMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEZsb3cgT2ZmbG9hZCBTdHJ1Y3R1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgaXRzIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLCBzcGVjaWZpY2FsbHk6CgpgYGBjCnN0cnVjdCBmbG93X29mZmxvYWQgewoJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaAkJdHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfTUFYXTsKCXN0cnVjdCBuZl9jb25uCQkJCSpjdDsKCXVuc2lnbmVkIGxvbmcJCQkJZmxhZ3M7Cgl1MTYJCQkJCXR5cGU7Cgl1MzIJCQkJCXRpbWVvdXQ7Cgl1MzIJCQkJCXByaW9yaXR5OwoJc3RydWN0IHJjdV9oZWFkCQkJCXJjdV9oZWFkOwp9OwpgYGAKClJpZ2h0LCB0aGF0IGdpdmVzIG1lIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3M6IHRoZSB0dXBsZSBoYXNoLCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBwb2ludGVyLCBzb21lIGZsYWdzLCBhIHR5cGUsIHRpbWVvdXQsIHByaW9yaXR5IGFuZCB0aGUgUkNVIGhlYWQuIE5vdyB0aGUgaW1wb3J0YW50IHBhcnQsIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoaXMgc3RydWN0dXJlIGlzIGNyZWF0ZWQsIGNvcGllZCwgdHJhbnNtaXR0ZWQgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCBmcm9tLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSB0aG9zZSBjcnVjaWFsIGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHVzYWdlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19vZmZsb2FkICYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTUyPXN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC01NS1cdGludFx0XHRcdFx0KCppbml0KShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjU2Olx0Ym9vbFx0XHRcdFx0KCpnYykoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTU3LVx0aW50XHRcdFx0XHQoKnNldHVwKShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTYwLVx0aW50XHRcdFx0XHQoKmFjdGlvbikoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo2MTpcdFx0XHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTYyLVx0XHRcdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTE5ND1lbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTE5OC1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MTk5OnN0cnVjdCBmbG93X29mZmxvYWQge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yMDAtXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoXHRcdHR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yMTEtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjIxMjp1bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjEzLVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjE5PXN0cnVjdCBuZl9mbG93X3JvdXRlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTI0My1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDoyNDU6dm9pZCBmbG93X29mZmxvYWRfZnJlZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ2LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9Mjg3PW5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9kZWxfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMwNi1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzA3OnZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzA4LVx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzA5LVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMTA6aW50IGZsb3dfb2ZmbG9hZF9hZGQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMxMS12b2lkIGZsb3dfb2ZmbG9hZF9yZWZyZXNoKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMxMjpcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGJvb2wgZm9yY2UpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMTMtXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMzA9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMzMS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzMyOnZvaWQgZmxvd19vZmZsb2FkX3RlYXJkb3duKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzMtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMzNDp2b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMzNS1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzM2LVx0XHQgICAgICAgdTggcHJvdG9jb2wsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMzc6dm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzgtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zNjg9dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzY5Olx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzcwLXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNzE6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzcyLXZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM3MzpcdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM3NC12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM3NTpcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzc2LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzgwPWludCBuZl9mbG93X3RhYmxlX29mZmxvYWRfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzgyLVx0XHRcdFx0ZW51bSBmbG93X2Jsb2NrX2NvbW1hbmQgY21kKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzgzOmludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM4NC1cdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzg1LVx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozODY6aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzg3LVx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0zNj1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTQwLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqbmZfZmxvd190YWJsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo0MTpcdHN0cnVjdCBmbG93X29mZmxvYWQgKm5mX2Zsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDItXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yMT1zdGF0aWMgdm9pZFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMjpmbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjMtXHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NTM6c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTQte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1NTpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU2LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODc9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjk3OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTgtXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNTctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE1ODpzdGF0aWMgdm9pZCBuZnRfZmxvd19kc3RfcmVsZWFzZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNTktXHRcdFx0XHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE2My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTY0OnZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX2luaXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTY1LVx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MTcxPUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTcyLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNzM6c3RhdGljIGlubGluZSBib29sIG5mX2Zsb3dfaGFzX2V4cGlyZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTc0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE3OD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZml4dXBfdGNwKHN0cnVjdCBuZl9jb25uICpjdCwgdTggdGNwX3N0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjAwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2ZpeHVwX2N0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTIwMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNTQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI1NTpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcm91dGVfcmVsZWFzZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjYwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNjE6dm9pZCBmbG93X29mZmxvYWRfZnJlZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNjIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMwOC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzA5OnVuc2lnbmVkIGxvbmcgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMxMC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMjctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjMyODppbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzYwPXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzYxOlx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgYm9vbCBmb3JjZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzYyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTM4MD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM4MTpcdFx0XHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM4Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zOTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM5Mjp2b2lkIGZsb3dfb2ZmbG9hZF90ZWFyZG93bihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zOTMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDAxPWZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwNC1cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDA1Olx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA2LVx0aW50IGRpcjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNj1uZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI3LVx0XHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0Mjg6XHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI5LVx0XHQgICAgICB2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDMyLVx0c3RydWN0IHJoYXNodGFibGVfaXRlciBodGk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQzMzpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQzNC1cdGludCBlcnIgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDYwPXN0YXRpYyBib29sIG5mX2Zsb3dfY3VzdG9tX2djKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQ2MTpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00NjIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTY4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU2OTpcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NzAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjM5PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjUxLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2NTI6dm9pZCBuZl9mbG93X3NuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NTMtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02NzY9RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19zbmF0X3BvcnQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY3ODp2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3OS1cdFx0ICAgICAgIHVuc2lnbmVkIGludCB0aG9mZiwgdTggcHJvdG9jb2wsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03Mjg9c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjcyOTpcdFx0XHRcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzMwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTQ1PXN0YXRpYyBpbnQgbmZfZmxvd19ydWxlX3JvdXRlX2luZXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo0NjpcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ3LVx0XHRcdFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yNC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjI1OnN0YXRpYyBpbnQgbmZfZmxvd19zdGF0ZV9jaGVjayhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgcHJvdG8sXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yNi1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTY5PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwX2w0cHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODItXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MzpzdGF0aWMgdm9pZCBuZl9mbG93X3NuYXRfaXAoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDY6c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEyOTpzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTMwLVx0XHRcdCAgdW5zaWduZWQgaW50IHRob2ZmLCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ2OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDczLVx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3NDpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzUtXHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04MDE9c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODA3LVx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MDg6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODA5LVx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9OTI0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfbDRwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MzctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5Mzg6c3RhdGljIHZvaWQgbmZfZmxvd19zbmF0X2lwdjYoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkzOS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5NjE6c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwdjYoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk2Mi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05ODMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5ODQ6c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTg1LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDY3PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNzItXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA3MzpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDc0LVx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTEzMj1zdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTM5LVx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTQwOlx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExNDEtXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIzMj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfc3JjKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjMzOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM0LVx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTI4Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfZHN0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjgzOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjg0LVx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM0Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNDM6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM0NC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM3Mz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNzQ6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3NS1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQyMz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0MjQ6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNS1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ0OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0NDk6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ1MC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDczOnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2w0cHJvdG8oY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDc0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ5Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9wb3J0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0OTM6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ5NC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTUyNj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9wb3J0X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1Mjc6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTUyOC1cdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTU2MD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X2NoZWNrc3VtKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTYxOlx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTYyLVx0XHRcdFx0ICAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NTg1PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3JlZGlyZWN0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTg2Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU4Ny1cdFx0XHRcdCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjI0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2MjU6c3RhdGljIGludCBmbG93X29mZmxvYWRfZW5jYXBfdHVubmVsKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNi1cdFx0XHRcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NjU0OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2RlY2FwX3R1bm5lbChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTUtXHRcdFx0XHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz02ODI9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4NC1cdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc1NDppbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTUtXHRcdFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03ODE9RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19ydWxlX3JvdXRlX2lwdjQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODItXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4MzppbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODQtXHRcdFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDk9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODE0LVx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODE1Olx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyA9IG9mZmxvYWQtXHUwMDNlZmxvdztcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODE2LVx0c3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0ID0gTlVMTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTkxMj1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF90dXBsZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjkxMzpcdFx0XHRcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MTQtXHRcdFx0XHQgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA5Mz1uZl9mbG93X29mZmxvYWRfd29ya19hbGxvYyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwOTQ6XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdW5zaWduZWQgaW50IGNtZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA5NS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTE0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTE1OnN0YXRpYyBib29sIG5mX2Zsb3dfb2ZmbG9hZF91bnN1cHBvcnRlZChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTE2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMjQ9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExMjU6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTI2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMzY9dm9pZCBuZl9mbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTEzNzpcdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzOC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTQ2PXZvaWQgbmZfZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNDc6XHRcdFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1OT12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNjA6XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE2MS17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01OC1cdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NTk6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNjAtXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0yNDQ9c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9maWxsX2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjaGVkL2FjdF9jdC5jOjI0NTpcdFx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L3NjaGVkL2FjdF9jdC5jLTI0Ni1cdFx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgdGRpcixcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg3LVxubmV0L3NjaGVkL2FjdF9jdC5jOjI4ODpzdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd19pc19vdXRkYXRlZChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxubmV0L3NjaGVkL2FjdF9jdC5jLTI4OS17XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTM5Nz1zdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190YWJsZV9wdXQoc3RydWN0IHRjZl9jdF9mbG93X3RhYmxlICpjdF9mdClcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA1LVxubmV0L3NjaGVkL2FjdF9jdC5jOjQwNjpzdGF0aWMgdm9pZCB0Y2ZfY3RfZmxvd190Y19pZmlkeChzdHJ1Y3QgZmxvd19vZmZsb2FkICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfY3QuYy00MDctXHRcdFx0XHQgc3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dCwgdTggZGlyKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MTItXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEzOnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDE0LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy00MjgtXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xubmV0L3NjaGVkL2FjdF9jdC5jOjQyOTpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmVudHJ5O1xubmV0L3NjaGVkL2FjdF9jdC5jLTQzMC1cdGludCBlcnI7XG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jPTY1OD1zdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTY2Ny1cdGJvb2wgZm9yY2VfcmVmcmVzaCA9IGZhbHNlO1xubmV0L3NjaGVkL2FjdF9jdC5jOjY2ODpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG5uZXQvc2NoZWQvYWN0X2N0LmMtNjY5LVx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQxNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2AgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLCBidXQgSSB3YW50IHRvIGdldCBhIGNvbmNyZXRlIGdyYXNwIG9mIGhvdyB0aGUgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZXZhbHVhdGVkIGFuZCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBvZmZsb2FkIGhvb2tzLCB0aGUgcnVsZSBtYXRjaGluZywgYW5kIHRoZSBhY3R1YWwgcGFja2V0IGhhbmRsaW5nIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSBwYXJzZSB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgdGhhdCBnb3Zlcm4gdGhpcyBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCBtZSBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDEwNjpcdFx0XHRnb3RvIG91dDtcbiAxMDc6XHRcbiAxMDg6XHRcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbiAxMDk6XHRcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG4gMTEwOlx0XHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4gMTExOlx0XG4gMTEyOlx0XHRmbG93ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcbiAxMTM6XHRcdGlmICghZmxvdylcbiAxMTQ6XHRcdFx0Z290byBlcnJfZmxvd19hbGxvYztcbiAxMTU6XHRcbiAxMTY6XHRcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFx1MDAyNnJvdXRlKTtcbiAxMTc6XHRcdGlmICh0Y3BoKVxuIDExODpcdFx0XHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcbiAxMTk6XHRcbiAxMjA6XHRcdC8qIFRoZSBwYWNrZXRzIHRoZSBmbG93IGZvcndhcmRzIGluIGl0cyBwbGFjZSBieXBhc3MgdGhlIHJ1bGVzIHRoYXRcbiAxMjE6XHRcdCAqIGNsYXNzaWZpZWQgdGhpcyBvbmU7IGNhcnJ5IHRoZSByZXN1bHQgd2l0aCB0aGUgZmxvdy5cbiAxMjI6XHRcdCAqL1xuIDEyMzpcdFx0Zmxvdy1cdTAwM2Vwcmlvcml0eSA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJpb3JpdHk7XG4gMTI0Olx0XG4gMTI1Olx0XHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAxMjY6XHRcdHJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTtcbiAxMjc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTI4Olx0XHRcdGdvdG8gZXJyX2Zsb3dfYWRkO1xuIDEyOTpcdFxuIDEzMDpcdFx0cmV0dXJuO1xuIDEzMTpcdFxuIDEzMjpcdGVycl9mbG93X2FkZDpcbiAxMzM6XHRcdGZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpO1xuIDEzNDpcdGVycl9mbG93X2FsbG9jOlxuIDEzNTpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xuIDEzNjpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcbiAxMzc6XHRlcnJfZmxvd19yb3V0ZTpcbiAxMzg6XHRcdGNsZWFyX2JpdChJUFNfT0ZGTE9BRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gMTM5Olx0b3V0OlxuIDE0MDpcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4gMTQxOlx0fVxuIDE0MjpcdFxuIDE0MzpcdHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDE0NDpcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjUwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0OgoKKipBbmFseXppbmcgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIG9mIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGxpZXMgaW4gdGhlIGZ1bmN0aW9ucyBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIGFjdHVhbGx5IGZvcndhcmRpbmcgdGhlIG9mZmxvYWRlZCBmbG93cy4gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgZm9yd2FyZGluZyBkZWNpc2lvbiBhbmQgYWN0aW9ucyBhcmUgbWFkZS4gSSYjMzk7bSBob3BpbmcgdG8gZGlzY292ZXIgdGhlIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcbiA1MDE6XHRcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcbiA1MDI6XHRcbiA1MDM6XHRcdG5mX2Zsb3dfZW5jYXBfcG9wKGN0eCwgc2tiLCB0dXBsZWhhc2gpO1xuIDUwNDpcdFx0dGhvZmYgLT0gY3R4LVx1MDAzZW9mZnNldDtcbiA1MDU6XHRcbiA1MDY6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuIDUwNzpcdFx0bmZfZmxvd19uYXRfaXAoZmxvdywgc2tiLCB0aG9mZiwgZGlyLCBpcGgpO1xuIDUwODpcdFxuIDUwOTpcdFx0aXBfZGVjcmVhc2VfdHRsKGlwaCk7XG4gNTEwOlx0XHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gNTExOlx0XG4gNTEyOlx0XHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbiA1MTM6XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbiA1MTQ6XHRcbiA1MTU6XHRcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiA1MTY6XHRcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gNTE3Olx0XG4gNTE4Olx0XHRyZXR1cm4gMTtcbiA1MTk6XHR9XG4gNTIwOlx0XG4gNTIxOlx0LyogU2ltaWxhciB0byBza2Jfdmxhbl9wdXNoLiAqL1xuIDUyMjpcdHN0YXRpYyBpbnQgbmZfZmxvd192bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHByb3RvLCB1MTYgaWQsXG4gNTIzOlx0XHRcdFx0ICAgICB1MzIgbmVlZGVkX2hlYWRyb29tKVxuIDUyNDpcdHtcbiA1MjU6XHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gNTI2Olx0XHRcdHN0cnVjdCB2bGFuX2hkciAqdmhkcjtcbiA1Mjc6XHRcbiA1Mjg6XHRcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSAmIzQzOyBWTEFOX0hMRU4pKVxuIDUyOTpcdFx0XHRcdHJldHVybiAtMTtcbiA1MzA6XHRcbiA1MzE6XHRcdFx0X19za2JfcHVzaChza2IsIFZMQU5fSExFTik7XG4gNTMyOlx0XHRcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4gNTMzOlx0XHRcdFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgLT0gVkxBTl9ITEVOO1xuIDUzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA2OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gSVB2NiBGbG93IE9mZmxvYWQqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBtb2R1bGUuIEkgcmVtZW1iZXIgd2Ugd2VyZSBoYXZpbmcgc29tZSBpc3N1ZXMgYXJvdW5kIGxpbmUgMTEwMCwgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgdGhlcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHNvbWV0aGluZyBtaWdodCBiZSBhbWlzcywgcGFydGljdWxhcmx5IHdpdGggdGhlIElQdjYgZm9yd2FyZGluZyBwYXRoLiBXZSBrbm93IHRoZSBjb21wbGV4aXRpZXMgaGVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTU6XHRcdH1cbjEwOTY6XHRcbjEwOTc6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgJiM0MzsgY3R4LVx1MDAzZWhkcnNpemUpKVxuMTA5ODpcdFx0XHRyZXR1cm4gLTE7XG4xMDk5Olx0XG4xMTAwOlx0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XG4xMTAxOlx0XG4xMTAyOlx0XHRuZl9mbG93X2VuY2FwX3BvcChjdHgsIHNrYiwgdHVwbGVoYXNoKTtcbjExMDM6XHRcbjExMDQ6XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuMTEwNTpcdFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XG4xMTA2Olx0XG4xMTA3Olx0XHRpcDZoLVx1MDAzZWhvcF9saW1pdC0tO1xuMTEwODpcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuMTEwOTpcdFxuMTExMDpcdFx0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpXG4xMTExOlx0XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4xMTEyOlx0XG4xMTEzOlx0XHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXG4xMTE0Olx0XHRcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXHUwMDNlY3QsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXIsIHNrYi1cdTAwM2VsZW4pO1xuMTExNTpcdFxuMTExNjpcdFx0cmV0dXJuIDE7XG4xMTE3Olx0fVxuMTExODpcdFxuMTExOTpcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbjExMjA6XHRuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbjExMjE6XHRcdFx0XHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbjExMjI6XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjExMjM6XHR7XG4xMTI0Olx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4xMTI1Olx0XG4xMTI2Olx0XHRpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApXG4xMTI3Olx0XHRcdHJldHVybiBOVUxMO1xuMTEyODpcdFxuMTEyOTpcdFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRkxPV19BQ1RJT05fUFJJT1JJVFkgaW4gRXRoZXJuZXQgT2ZmbG9hZCBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbmNsdXNpb24gb2YgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGVzZSBzcGVjaWZpYyBldGhlcm5ldCBvZmZsb2FkIGRyaXZlcnMsIGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgLiBMb29raW5nIGF0IHRoZSBkaWZmcywgaXQmIzM5O3MgY2xlYXIgdGhleSBib3RoIG5vdyBpbmNsdWRlIGEgYGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFlgIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGBfcmVwbGFjZWAgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gc3VwcG9ydCBvciBhY2tub3dsZWRnZSBhIHByaW9yaXR5LXJlbGF0ZWQgZmxvdyBhY3Rpb24gZHVyaW5nIG9mZmxvYWQgcmVwbGFjZW1lbnQuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhpcyBpbnRyb2R1Y3Rpb24gcHJlc2VudHMgYW55IG9idmlvdXMgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBpbiB0aGUgY29kZS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoYXQgYSBuZXcgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBjYXNlIG1pZ2h0IG5vdCBiZSBpbXBsZW1lbnRlZCBmdWxseSBldmVyeXdoZXJlIGl0IG5lZWRzIHRvIGJlLCBvciB0aGF0IHRoZSBjdXJyZW50IGhhbmRsaW5nIG9mIHRoZSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGNhc2UgbWlnaHQgYmUgaW5jb21wbGV0ZS4KCk5leHQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNoYW5nZSByaXBwbGVzIG91dC4gRG9lcyB0aGUgY2hhbmdlIHRvIHRoZXNlIHR3byBkcml2ZXJzIGhhdmUgaW1wbGljYXRpb25zIGluIG90aGVyIHJlbGF0ZWQgZXRoZXJuZXQgb2ZmbG9hZCBkcml2ZXJzPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgb3IgYW55IHBvdGVudGlhbCByZWxhdGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZW0uCgpGaW5hbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlIGhhbmRsZSB1bmtub3duIGFjdGlvbiBJRHMgY29ycmVjdGx5LiBIb3cgZG8gb3RoZXIgZmxvd2VyL29mZmxvYWQgZHJpdmVycyBkZWFsIHdpdGggZmxvdyBhY3Rpb25zIHRoZXkgZG9uJiMzOTt0IGV4cGxpY2l0bHkgcmVjb2duaXplPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJiMzOTtyZSBncmFjZWZ1bGx5IGhhbmRsaW5nIGFueSBmbG93IGFjdGlvbnMgd2UgZG9uJiMzOTt0IGZ1bGx5IHN1cHBvcnQgc28gdGhhdCB3ZSBkb24mIzM5O3QgaW50cm9kdWNlIGluc3RhYmlsaXR5LiBUaGlzIGlzIGFib3V0IHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmF1bHQ6XFxzKnJldHVybiAtRU9QTk9UU1VQUDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuYz0xNjIwPWludCBtdnBwMl9ldGh0b29sX3J4Zmhfc2V0KHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfY2xzLmMtMTY1Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jOjE2NTM6XHRkZWZhdWx0OiByZXR1cm4gLUVPUE5PVFNVUFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jLTE2NTQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjcyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBmbG93IG9mZmxvYWQgcGF0Y2guIE15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggdGhlc2UgdHlwZXMgb2YgY2hhbmdlcywgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcGF0Y2ggaW5hZHZlcnRlbnRseSBjcmVhdGVzIGEgc2NlbmFyaW8gd2hlcmUga2VybmVsIGRhdGEsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZmxvdyBvZmZsb2FkLCBtaWdodCBiZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBiZWZvcmUgaXQmIzM5O3MgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4KCk15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGZsb3dfYWN0aW9uX2Jhc2ljX2h3X3N0YXRzX3R5cGVzX2NoZWNrYCBvciBhbnkgc2ltaWxhciByb3V0aW5lcyB0aGF0IHBsYXkgYSByb2xlIGluIGZsb3cgb2ZmbG9hZC4gVGhlc2UgYXJlIGxpa2VseSB0byBiZSBrZXkgYXJlYXMuIFRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgd2hldGhlciB0aGlzIHBhdGNoLCBpbiBhbnkgd2F5LCBpbXBhY3RzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXhwb3N1cmUgb2YgcmVsZXZhbnQga2VybmVsIGRhdGEuCgpOb3csIGxldCYjMzk7cyBzeXN0ZW1hdGljYWxseSBhcHBseSB0aGUgS01TQU4gY3JpdGVyaWEuIEZpcnN0IHVwLCB3ZSYjMzk7cmUgbG9va2luZyBmb3Iga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBnZXQgc2VudCB0byB1c2Vyc3BhY2UgdmlhIHRoZSB1c3VhbCBzdXNwZWN0czogYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgc2tiIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gQXJlIHRoZXJlIGFueSBuZXcgY2FuZGlkYXRlcyBpbiB0aGlzIHBhdGNoPwoKSSYjMzk7bSBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiB0aGUgYGZsb3ctJmd0O3ByaW9yaXR5YCBmaWVsZC4gV2hpbGUgYHNrYi0mZ3Q7cHJpb3JpdHlgIGlzIHN0YW5kYXJkIGtlcm5lbCBtZXRhZGF0YSBhbmQgc2hvdWxkIGJlIGZpbmUsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGZsb3ctJmd0O3ByaW9yaXR5YCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBpbiBhbnkgd2F5LiBNeSBuZXh0IHN0ZXAgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIG5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZXMuIERvZXMgYGN0bmV0bGlua2AsIGBuZnRhYmxlc2AsIG9yIGFueSBvdGhlciByZWxldmFudCBuZXRsaW5rIGNvZGUgZXhwb3NlIGBmbG93LSZndDtwcmlvcml0eWAgb3IgYW55IHBhcnRzIG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgc3RydWN0dXJlPyBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBuZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBgbmZfZmxvd190YWJsZV9uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IGRhdGEgZHVtcHMuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJiMzOTtyZSBub3QgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdGhyb3VnaCBhIG5ldGxpbmsgYXR0cmlidXRlIG9yIHNpbWlsYXIgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19vZmZsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXHRcdCYjNDM7PSBuZnRfbGltaXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz0xNzE9dm9pZCBuZnRfb2ZmbG9hZF91cGRhdGVfZGVwZW5kZW5jeShzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTE4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoxODk6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9jb21tb25faW5pdChzdHJ1Y3QgZmxvd19jbHNfY29tbW9uX29mZmxvYWQgKmNvbW1vbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xOTAtXHRcdFx0XHRcdCBfX2JlMTYgcHJvdG8sIGludCBwcmlvcml0eSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MjQ2PXN0YXRpYyB2b2lkIG5mdF9mbG93X2Nsc19vZmZsb2FkX3NldHVwKHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjI2MDpcdG5mdF9mbG93X29mZmxvYWRfY29tbW9uX2luaXQoXHUwMDI2Y2xzX2Zsb3ctXHUwMDNlY29tbW9uLCBwcm90byxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0yNjEtXHRcdFx0XHQgICAgIGJhc2VjaGFpbi1cdTAwM2VvcHMucHJpb3JpdHksIGV4dGFjayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyNjg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2NtZChjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0yNjktXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyODg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3J1bGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjg5LVx0XHRcdFx0IHN0cnVjdCBuZnRfcnVsZSAqcnVsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjk0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjI5NTpcdHJldHVybiBuZnRfZmxvd19vZmZsb2FkX2NtZChjaGFpbiwgcnVsZSwgZmxvdywgY29tbWFuZCwgXHUwMDI2Y2xzX2Zsb3cpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI5Ni19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTI5OD1pbnQgbmZ0X2Zsb3dfcnVsZV9zdGF0cyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzA0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjMwNTpcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY21kKGNoYWluLCBydWxlLCBOVUxMLCBGTE9XX0NMU19TVEFUUyxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMDYtXHRcdFx0XHQgICBcdTAwMjZjbHNfZmxvdyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTMxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzozMTg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2JpbmQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzE5LVx0XHRcdFx0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMjQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzI1OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF91bmJpbmQoc3RydWN0IGZsb3dfYmxvY2tfb2ZmbG9hZCAqYm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzI2LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTM1MD1zdGF0aWMgaW50IG5mdF9ibG9ja19zZXR1cChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzU3LVx0Y2FzZSBGTE9XX0JMT0NLX0JJTkQ6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzU4Olx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2JpbmQoYm8sIGJhc2VjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzU5LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zNjAtXHRjYXNlIEZMT1dfQkxPQ0tfVU5CSU5EOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjM2MTpcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF91bmJpbmQoYm8sIGJhc2VjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzYyLVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDA0PXN0YXRpYyB2b2lkIG5mdF9pbmRyX2Jsb2NrX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy00MTgtXHRsaXN0X21vdmUoXHUwMDI2YmxvY2tfY2ItXHUwMDNlbGlzdCwgXHUwMDI2Ym8uY2JfbGlzdCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NDE5Olx0bmZ0X2Zsb3dfb2ZmbG9hZF91bmJpbmQoXHUwMDI2Ym8sIGJhc2VjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNDIwLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mdF9uZXQtXHUwMDNlY29tbWl0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDU4PXN0YXRpYyBpbnQgbmZ0X2Zsb3dfYmxvY2tfY2hhaW4oc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTQ5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo0OTc6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2NoYWluKHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLCB1OCAqcHBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy00OTgtXHRcdFx0XHQgIGVudW0gZmxvd19ibG9ja19jb21tYW5kIGNtZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NTE2PXN0YXRpYyB2b2lkIG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzMS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1MzI6XHRcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9jaGFpbihuZnRfdHJhbnNfY2hhaW4odHJhbnMpLCBOVUxMLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzMy1cdFx0XHRcdFx0XHQgICAgIEZMT1dfQkxPQ0tfVU5CSU5EKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUzOTpcdFx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2NoYWluKG5mdF90cmFuc19jaGFpbih0cmFucyksIE5VTEwsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQwLVx0XHRcdFx0XHRcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQ1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0NjpcdFx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX3J1bGUobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0Ny1cdFx0XHRcdFx0XHQgICAgbmZ0X3RyYW5zX3J1bGUodHJhbnMpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTU0Olx0XHRcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfcnVsZShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyksXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTU1LVx0XHRcdFx0XHRcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTU2Nj1pbnQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4My1cdFx0XHRwb2xpY3kgPSBuZnRfdHJhbnNfY2hhaW5fcG9saWN5KHRyYW5zKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1ODQ6XHRcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9jaGFpbihuZnRfdHJhbnNfY2hhaW4odHJhbnMpLCBcdTAwMjZwb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg1LVx0XHRcdFx0XHRcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTkxLVx0XHRcdHBvbGljeSA9IG5mdF90cmFuc19jaGFpbl9wb2xpY3kodHJhbnMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU5MjpcdFx0XHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2NoYWluKG5mdF90cmFuc19jaGFpbih0cmFucyksIFx1MDAyNnBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTMtXHRcdFx0XHRcdFx0ICAgICBGTE9XX0JMT0NLX1VOQklORCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwMy1cdFx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjA0Olx0XHRcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfcnVsZShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyksXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjA1LVx0XHRcdFx0XHRcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MTM6XHRcdFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9ydWxlKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MTQtXHRcdFx0XHRcdFx0ICAgIG5mdF90cmFuc19ydWxlKHRyYW5zKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIwOnN0cnVjdCBuZnRfZmxvd19vZmZsb2FkIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIxLVx0c3RydWN0IG5mdF9mbG93dGFibGVcdCpmbG93dGFibGU7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyNDpzdGF0aWMgYm9vbCBuZnRfZmxvd19vZmZsb2FkX3NraXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZhbWlseSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz00MT1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfY3RfdGNwKHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy00OS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjUwOnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01MS1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTUzLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjU0Olx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTUtXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcdTAwMjZwcml2LVx1MDAzZWZsb3d0YWJsZS1cdTAwM2VkYXRhO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTYzLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NjQ6XHRpZiAobmZ0X2Zsb3dfb2ZmbG9hZF9za2lwKHBrdC1cdTAwM2Vza2IsIG5mdF9wZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTY1LVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNDItXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxNDM6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNDQtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9mbG93X29mZmxvYWRfcG9saWN5W05GVEFfRkxPV19NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNTctXHRbTkZUQV9GTE9XX1RBQkxFX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE2MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE2MTpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTYyLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNjQte1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTY1Olx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTY2LVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQoY3R4LVx1MDAzZW5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTg0LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTg1OnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTg2LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTg4LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE4OTpcdHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE5MC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxOTQ6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk1LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE5NzpcdHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE5OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDEtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMDI6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDMtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDctXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMDg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIwOS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMTAte1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjExOlx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjEyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyMjpzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9mbG93X29mZmxvYWRfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI0Olx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjU6XHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjY6XHQuZXZhbFx0XHQ9IG5mdF9mbG93X29mZmxvYWRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyNzpcdC5pbml0XHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI4Olx0LmFjdGl2YXRlXHQ9IG5mdF9mbG93X29mZmxvYWRfYWN0aXZhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjk6XHQuZGVhY3RpdmF0ZVx0PSBuZnRfZmxvd19vZmZsb2FkX2RlYWN0aXZhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzA6XHQuZGVzdHJveVx0PSBuZnRfZmxvd19vZmZsb2FkX2Rlc3Ryb3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzE6XHQudmFsaWRhdGVcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMjpcdC5kdW1wXHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLX07XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzQtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzU6c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjM2LVx0Lm5hbWVcdFx0PSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzc6XHQub3BzXHRcdD0gXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzg6XHQucG9saWN5XHRcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzktXHQubWF4YXR0clx0PSBORlRBX0ZMT1dfTUFYLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTI1Nj1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZsb3dfb2ZmbG9hZF9uZXRkZXZfbm90aWZpZXIgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjYwOnN0YXRpYyBpbnQgX19pbml0IG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI2MS17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjY3LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjY4Olx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI2OS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjc5LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjgwOnN0YXRpYyB2b2lkIF9fZXhpdCBuZnRfZmxvd19vZmZsb2FkX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yODEte1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjgyOlx0bmZ0X3VucmVnaXN0ZXJfZXhwcihcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjgzLVx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2Zmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllcik7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjg1LVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6Mjg2Om1vZHVsZV9pbml0KG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2luaXQpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6Mjg3Om1vZHVsZV9leGl0KG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2V4aXQpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA3NwoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQWxsIENsZWFyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byB0aGUgYHByaW9yaXR5YCBmaWVsZCB3aXRoaW4gdGhlIGZsb3cgb2ZmbG9hZCBzeXN0ZW0gYW5kIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucy4gVGhlIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGBmbG93X29mZmxvYWRgIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgZ3VhcmFudGVlcyB0aGF0IHRoZSBgcHJpb3JpdHlgIGZpZWxkIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhlbiwgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgZXhwbGljaXRseSBzZXRzIGBmbG93LSZndDtwcmlvcml0eWAgYmFzZWQgb24gdGhlIHBhY2tldCYjMzk7cyBTS0IgcHJpb3JpdHkuIFRoaXMgaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdGhlbiByZWFkIGFuZCB1c2VkIHRvIHNldCB0aGUgU0tCIHByaW9yaXR5IGluIHRoZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucywgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLgoKRnVydGhlcm1vcmUsIHRoZSBjb2RlIHBhdGggdGhhdCB1c2VzIGBmbG93X2FjdGlvbl9lbnRyeWAgb2J0YWluZWQgZnJvbSBgZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpYCBhbHNvIGFwcGVhcnMgc2FmZS4gVGhlIGBmbG93X3J1bGVgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jX2ZsZXhgIGR1cmluZyBgZmxvd19ydWxlX2FsbG9jYC4KCkkgc2VlIHRoYXQgZHJpdmVyIGhhbmRsZXJzIGxpa2UgdGhvc2UgaW4gYGFpcm9oYV9wcGUuY2AgYW5kIGBtdGtfcHBlX29mZmxvYWQuY2AgZXhwbGljaXRseSBhY2NvdW50IGZvciBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGJ5IGFkZGluZyB0aGUgY2FzZSBmb3IgdGhhdCBhY3Rpb24sIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBpc3N1ZXMgb2YgZmFsbGluZyBpbnRvIHRoZSBkZWZhdWx0IGNhc2UuCgpJbiBlc3NlbmNlLCB0aGVyZSBhcmUgbm8gaWRlbnRpZmllZCBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCwgbm8gdW5jaGVja2VkIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBtYW5pcHVsYXRlIGxlbmd0aCBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhpcyB0aG9yb3VnaCBhbmFseXNpcywgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBjb25jbHVzaW9uIHRoYXQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MsIGFuZCBJIGFtIHJlYWR5IHRvIHByZXBhcmUgdGhlIGFwcHJvcHJpYXRlIHRvb2wgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGZsb3cgcHJpb3JpdHkgdHJhY2tpbmcgdG8gdGhlIE5ldGZpbHRlciBmbG93dGFibGUgZmFzdHBhdGggYW5kIG9mZmxvYWQgc3Vic3lzdGVtLiBcbi0gU3RydWN0IGBmbG93X29mZmxvYWRgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGBmbG93X29mZmxvYWRfYWxsb2NgKSwgemVyb2luZyBhbGwgZmllbGRzIGluY2x1ZGluZyB0aGUgbmV3IGBwcmlvcml0eWAgZmllbGQuXG4tIFRoZSBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgZmllbGQgaXMgYXNzaWduZWQgZnJvbSBgcGt0LVx1MDAzZXNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgYW5kIGxhdGVyIHJlYWQgdG8gc2V0IGBza2ItXHUwMDNlcHJpb3JpdHlgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggb3IgYWRkZWQgYXMgYSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGZsb3cgYWN0aW9uIGVudHJ5IGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC5cbi0gRmxvdyBydWxlcyBhcmUgYWxsb2NhdGVkIHZpYSBgZmxvd19ydWxlX2FsbG9jYCB1c2luZyBga3phbGxvY19mbGV4YCwgZW5zdXJpbmcgYWxsIGFjdGlvbiBlbnRyaWVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxuLSBObyB1bmluaXRpYWxpemVkIGRhdGEsIHN0YWNrL2hlYXAgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cbi0gVGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjoxOC41MDk2MzgxMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5NDIyNDI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICAgIFwibmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vblwiLFxuICAgIFwibmZfZmxvd19ydWxlX3JvdXRlX2lwdjRcIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGZsb3cgcHJpb3JpdHkgdHJhY2tpbmcgdG8gdGhlIE5ldGZpbHRlciBmbG93dGFibGUgZmFzdHBhdGggYW5kIG9mZmxvYWQgc3Vic3lzdGVtLiBcXG4tIFN0cnVjdCBgZmxvd19vZmZsb2FkYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIChgZmxvd19vZmZsb2FkX2FsbG9jYCksIHplcm9pbmcgYWxsIGZpZWxkcyBpbmNsdWRpbmcgdGhlIG5ldyBgcHJpb3JpdHlgIGZpZWxkLlxcbi0gVGhlIGBmbG93LVxcdTAwM2Vwcmlvcml0eWAgZmllbGQgaXMgYXNzaWduZWQgZnJvbSBgcGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cXHUwMDNlcHJpb3JpdHlgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggb3IgYWRkZWQgYXMgYSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGZsb3cgYWN0aW9uIGVudHJ5IGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC5cXG4tIEZsb3cgcnVsZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGZsb3dfcnVsZV9hbGxvY2AgdXNpbmcgYGt6YWxsb2NfZmxleGAsIGVuc3VyaW5nIGFsbCBhY3Rpb24gZW50cmllcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MTguNTA5NjQ1MTkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMDg0MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzEzNDI5YzE3YzllZGFhNmZkNTcxZTc3YmE2YTJiMDI5MGU5MGYwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDEyOjM2OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcXG5pbmRleCBkNzU3YzIxYzEwZjJkLi41ODQ0YWIxOWFlYzY2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcXG5AQCAtNzEsNyArNzEsOSBAQCBmb3J3YXJkaW5nIHBhdGggaW5jbHVkaW5nIHRoZSBOZXRmaWx0ZXIgaG9va3MgYW5kIHRoZSBmbG93dGFibGUgZmFzdHBhdGggYnlwYXNzLlxcbiBcXG4gVGhlIGZsb3d0YWJsZSBlbnRyeSBhbHNvIHN0b3JlcyB0aGUgTkFUIGNvbmZpZ3VyYXRpb24sIHNvIGFsbCBwYWNrZXRzIGFyZVxcbiBtYW5nbGVkIGFjY29yZGluZyB0byB0aGUgTkFUIHBvbGljeSB0aGF0IGlzIHNwZWNpZmllZCBmcm9tIHRoZSBjbGFzc2ljIElQXFxuLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWRcXG4rZm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3dcXG4rYWxzbyBzdG9yZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBwYWNrZXQgdGhhdCBjcmVhdGVkIGl0LCBzbyBhIHByaW9yaXR5IHNldCBiZWZvcmVcXG4rYGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkXFxuIHRyYWZmaWMgaXMgcGFzc2VkIHVwIHRvIGZvbGxvdyB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggZ2l2ZW4gdGhhdCB0aGVcXG4gdHJhbnNwb3J0IGhlYWRlciBpcyBtaXNzaW5nLCBpbiB0aGlzIGNhc2UsIGZsb3d0YWJsZSBsb29rdXBzIGFyZSBub3QgcG9zc2libGUuXFxuIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG5pbmRleCA5MjYxMTgwMjgwMWVhLi4yYWZjZTc2YWQxMzExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuQEAgLTExNjEsNiArMTE2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1JFRElSRUNUOlxcbiBcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xcbmluZGV4IDk5YjI4YWFhN2NjNDcuLjRlZTk5ZThlNGEzNGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xcbkBAIC0zNzgsNiArMzc4LDcgQEAgbXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1JFRElSRUNUOlxcbiBcXHRcXHRcXHRvZGV2ID0gYWN0LVxcdTAwM2VkZXY7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG5pbmRleCBmMmUyNzcxZjE4OGY0Li4yMzIxOGM4Y2JjM2RjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTIwMiw2ICsyMDIsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkIHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1MTZcXHRcXHRcXHRcXHRcXHR0eXBlO1xcbiBcXHR1MzJcXHRcXHRcXHRcXHRcXHR0aW1lb3V0O1xcbitcXHR1MzJcXHRcXHRcXHRcXHRcXHRwcmlvcml0eTtcXG4gXFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0XFx0cmN1X2hlYWQ7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuaW5kZXggYzhjMjlhOWExNjg0NC4uYzg1ZTJkNjA4YzMyOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuQEAgLTUwOSw2ICs1MDksOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdGlwX2RlY3JlYXNlX3R0bChpcGgpO1xcbiBcXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuIFxcbitcXHRpZiAoZmxvdy1cXHUwMDNlcHJpb3JpdHkpXFxuK1xcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBmbG93LVxcdTAwM2Vwcmlvcml0eTtcXG4rXFxuIFxcdGlmIChmbG93X3RhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxcbiBcXHRcXHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVxcdTAwM2VjdCwgdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXIsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFxuQEAgLTExMDQsNiArMTEwNyw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpcDZoLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gXFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbiBcXG4rXFx0aWYgKGZsb3ctXFx1MDAzZXByaW9yaXR5KVxcbitcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gZmxvdy1cXHUwMDNlcHJpb3JpdHk7XFxuK1xcbiBcXHRpZiAoZmxvd190YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcXG4gXFx0XFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cXHUwMDNlY3QsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyLCBza2ItXFx1MDAzZWxlbik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbmluZGV4IDgwMWEzZGQ5Y2VlYTMuLmNhYWFkZmZjMjU2M2UgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcXG5AQCAtNjk2LDYgKzY5NiwxNyBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gXFx0ICAgIGZsb3dfb2ZmbG9hZF9ldGhfZHN0KG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4rXFx0aWYgKGZsb3ctXFx1MDAzZXByaW9yaXR5KSB7XFxuK1xcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuK1xcbitcXHRcXHRlbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG4rXFx0XFx0aWYgKCFlbnRyeSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XFxuK1xcdFxcdGVudHJ5LVxcdTAwM2Vwcmlvcml0eSA9IGZsb3ctXFx1MDAzZXByaW9yaXR5O1xcbitcXHR9XFxuK1xcbiBcXHR0dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0dXBsZS1cXHUwMDNlZW5jYXBfbnVtOyBpKyspIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xcbmluZGV4IDMyYjQyODEwMzhkZDMuLmNhOTE5MjRiNGRlM2IgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xcbkBAIC0xMTcsNiArMTE3LDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdGlmICh0Y3BoKVxcbiBcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gXFxuK1xcdC8qIFRoZSBwYWNrZXRzIHRoZSBmbG93IGZvcndhcmRzIGluIGl0cyBwbGFjZSBieXBhc3MgdGhlIHJ1bGVzIHRoYXRcXG4rXFx0ICogY2xhc3NpZmllZCB0aGlzIG9uZTsgY2FycnkgdGhlIHJlc3VsdCB3aXRoIHRoZSBmbG93LlxcbitcXHQgKi9cXG4rXFx0Zmxvdy1cXHUwMDNlcHJpb3JpdHkgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJpb3JpdHk7XFxuK1xcbiBcXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG5pbmRleCA0NDljNTE4YmQ5NDdkLi5hYjc3MzIzNThlMWQ4IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbkBAIC00NTgsNiArNDU4LDEwNiBAQCBmaVxcbiBcXHRjaGVja19kc2NwIFxcXCJkc2NwX2Z3ZFxcXCIgXFxcIiRwbXR1XFxcIlxcbiB9XFxuIFxcbitjaGVja19wcmlvcml0eSgpXFxuK3tcXG4rXFx0bG9jYWwgd2hhdD0kMVxcbitcXHRsb2NhbCBwbXR1PVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgb2s9MVxcbitcXG4rXFx0bG9jYWwgY291bnRlclxcbitcXHRjb3VudGVyPSQoaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzMgfCBncmVwIHBhY2tldHMpXFxuK1xcdGxvY2FsIHBjMz0ke2NvdW50ZXIlKmJ5dGVzKn1cXG4rXFx0cGMzPSR7cGMzIypwYWNrZXRzfVxcbitcXG4rXFx0Y291bnRlcj0kKGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8wIHwgZ3JlcCBwYWNrZXRzKVxcbitcXHRsb2NhbCBwYzA9JHtjb3VudGVyJSpieXRlcyp9XFxuK1xcdHBjMD0ke3BjMCMqcGFja2V0c31cXG4rXFxuK1xcdGxvY2FsIGZhaWxtc2c9XFxcIkZBSUw6IHBtdHUgJHBtdHU6ICR3aGF0IGNvdW50ZXJzIGRvIG5vdCBtYXRjaCwgZXhwZWN0ZWRcXFwiXFxuK1xcbitcXHRjYXNlIFxcXCIkd2hhdFxcXCIgaW5cXG4rXFx0XFxcInByaW9fbm9uZVxcXCIpXFxuK1xcdFxcdGlmIFsgXFxcIiRwYzNcXFwiIC1ndCAwIF0gfHwgWyBcXFwiJHBjMFxcXCIgLWVxIDAgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCIkZmFpbG1zZyBwcmlvMyA9PSAwLCBwcmlvMCBcXHUwMDNlIDAsIGJ1dCBnb3QgJHBjMywkcGMwXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdG9rPTBcXG4rXFx0XFx0ZmlcXG4rXFx0XFx0OztcXG4rXFx0XFxcInByaW9fZndkXFxcIilcXG4rXFx0XFx0aWYgWyBcXFwiJHBjM1xcXCIgLWVxIDAgXSB8fCBbIFxcXCIkcGMwXFxcIiAtZ3QgMCBdOyB0aGVuXFxuK1xcdFxcdFxcdGVjaG8gXFxcIiRmYWlsbXNnIHByaW8zIFxcdTAwM2UgMCwgcHJpbzAgPT0gMCwgYnV0IGdvdCAkcGMzLCRwYzBcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0XFx0cmV0PTFcXG4rXFx0XFx0XFx0b2s9MFxcbitcXHRcXHRmaVxcbitcXHRcXHQ7O1xcbitcXHQqKVxcbitcXHRcXHRlY2hvIFxcXCIkZmFpbG1zZzogVW5rbm93biBwcmlvcml0eSBjaGVja1xcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRvaz0wXFxuK1xcdGVzYWNcXG4rXFxuK1xcdGlmIFsgXFxcIiRva1xcXCIgLWVxIDEgXSA7dGhlblxcbitcXHRcXHRlY2hvIFxcXCJQQVNTOiAkd2hhdDogcHJpb3JpdHkgcGFja2V0IGNvdW50ZXJzIG1hdGNoXFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbit0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSgpXFxuK3tcXG4rXFx0bG9jYWwgcG10dT1cXFwiJDNcXFwiXFxuK1xcdGxvY2FsIHByb3RvPVxcXCIkNFxcXCJcXG4rXFx0bG9jYWwgZHN0aXA9XFxcIiQ1XFxcIlxcbitcXHRsb2NhbCBkc3Rwb3J0PVxcXCIkNlxcXCJcXG4rXFx0bG9jYWwgbHJldD0wXFxuK1xcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1mIC0gXFx1MDAzY1xcdTAwM2NFT0ZcXG4rdGFibGUgbmV0ZGV2IHByaW9jaGVjayB7XFxuKyAgIGNvdW50ZXIgcHJpbzAgeyB9XFxuKyAgIGNvdW50ZXIgcHJpbzMgeyB9XFxuK1xcbisgICBjaGFpbiBlZ3Jlc3MwIHtcXG4rICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlIFxcXCJ2ZXRoMFxcXCIgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxcbisgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSBcXFwicHJpbzNcXFwiXFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcXFwicHJpbzBcXFwiXFxuKyAgIH1cXG4rXFxuKyAgIGNoYWluIGVncmVzczEge1xcbisgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgXFxcInZldGgxXFxcIiBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0XFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFxcXCJwcmlvM1xcXCJcXG4rICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lIFxcXCJwcmlvMFxcXCJcXG4rICAgfVxcbit9XFxuK0VPRlxcbitcXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogQ291bGQgbm90IGxvYWQgbmV0ZGV2OmVncmVzcyBmb3IgdmV0aDAgYW5kIHZldGgxXFxcIlxcbitcXHRcXHRyZXR1cm4gMFxcbitcXHRmaVxcbitcXG4rXFx0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFxcXCIkMVxcXCIgXFxcIiQyXFxcIiBcXFwiJHBtdHVcXFwiIFxcXCIkcHJvdG9cXFwiIFxcXCIkZHN0aXBcXFwiIFxcXCIkZHN0cG9ydFxcXCI7IHRoZW5cXG4rXFx0XFx0bHJldD0xXFxuK1xcdGZpXFxuK1xcdGNoZWNrX3ByaW9yaXR5IFxcXCJwcmlvX25vbmVcXFwiIFxcXCIkcG10dVxcXCJcXG4rXFxuK1xcdCMgVGhlIGZsb3cgc3RvcmVzIHRoZSBwcmlvcml0eSBzZXQgYmVmb3JlIGl0IGlzIGFkZGVkLCBzbyB0aGUgcGFja2V0c1xcbitcXHQjIHRoZSBmbG93dGFibGUgZm9yd2FyZHMgbGVhdmUgd2l0aCBpdCB0b28sIGluIGJvdGggZGlyZWN0aW9ucy5cXG4raXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtZiAtIFxcdTAwM2NcXHUwMDNjRU9GXFxuK3RhYmxlIGluZXQgcHJpb3NldCB7XFxuKyAgIGNoYWluIGZvcndhcmQge1xcbisgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHRcXG4rICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozXFxuKyAgIH1cXG4rfVxcbitFT0ZcXG4rXFx0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFxcXCIkMVxcXCIgXFxcIiQyXFxcIiBcXFwiJHBtdHVcXFwiIFxcXCIkcHJvdG9cXFwiIFxcXCIkZHN0aXBcXFwiIFxcXCIkZHN0cG9ydFxcXCI7IHRoZW5cXG4rXFx0XFx0bHJldD0xXFxuK1xcdGZpXFxuK1xcdGNoZWNrX3ByaW9yaXR5IFxcXCJwcmlvX2Z3ZFxcXCIgXFxcIiRwbXR1XFxcIlxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgZGVsZXRlIHRhYmxlIG5ldGRldiBwcmlvY2hlY2tcXG4rXFxuK1xcdHJldHVybiAkbHJldFxcbit9XFxuK1xcbiB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCgpXFxuIHtcXG4gXFx0bG9jYWwgbnNhPVxcXCIkMVxcXCJcXG5AQCAtNTE2LDYgKzYxNiwxMSBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbitpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfc2V0X3ByaW9yaXR5IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMCA2IFxcXCJbZGVhZDoyOjo5OV1cXFwiIDEyMzQ1OyB0aGVuXFxuK1xcdGVjaG8gXFxcIkZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdHJldD0xXFxuK2ZpXFxuK1xcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIG5zMSBhbmRcXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cXG4gIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuXFxuQEAgLTU3Miw2ICs2NzcsMTEgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9kc2NwIFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlblxcbiBcXHRleGl0IDBcXG4gZmlcXG4gXFxuK2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXFxcIiRuczFcXFwiIFxcXCIkbnMyXFxcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXFxuK1xcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSBhbmQgcG10dSBkaXNjb3ZlcnlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0cmV0PTFcXG4rZmlcXG4rXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXFx1MDAzZS9kZXYvbnVsbFxcbiBcXG4gaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgXFxcIlxcXCI7IHRoZW5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MTkuODczMzk3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI3MTczMDI2NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25cIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0XCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMTM0MjljMTdjOWVkYWE2ZmQ1NzFlNzdiYTZhMmIwMjkwZTkwZjA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozNjoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcbmluZGV4IGQ3NTdjMjFjMTBmMmQuLjU4NDRhYjE5YWVjNjYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3RcbkBAIC03MSw3ICs3MSw5IEBAIGZvcndhcmRpbmcgcGF0aCBpbmNsdWRpbmcgdGhlIE5ldGZpbHRlciBob29rcyBhbmQgdGhlIGZsb3d0YWJsZSBmYXN0cGF0aCBieXBhc3MuXG4gXG4gVGhlIGZsb3d0YWJsZSBlbnRyeSBhbHNvIHN0b3JlcyB0aGUgTkFUIGNvbmZpZ3VyYXRpb24sIHNvIGFsbCBwYWNrZXRzIGFyZVxuIG1hbmdsZWQgYWNjb3JkaW5nIHRvIHRoZSBOQVQgcG9saWN5IHRoYXQgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGNsYXNzaWMgSVBcbi1mb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBGcmFnbWVudGVkXG4rZm9yd2FyZGluZyBwYXRoLiBUaGUgVFRMIGlzIGRlY3JlbWVudGVkIGJlZm9yZSBjYWxsaW5nIG5laWdoX3htaXQoKS4gVGhlIGZsb3dcbithbHNvIHN0b3JlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIHBhY2tldCB0aGF0IGNyZWF0ZWQgaXQsIHNvIGEgcHJpb3JpdHkgc2V0IGJlZm9yZVxuK2BgZmxvdyBhZGRgYCBhcHBsaWVzIHRvIHRoZSBwYWNrZXRzIHRoYXQgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcy4gRnJhZ21lbnRlZFxuIHRyYWZmaWMgaXMgcGFzc2VkIHVwIHRvIGZvbGxvdyB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggZ2l2ZW4gdGhhdCB0aGVcbiB0cmFuc3BvcnQgaGVhZGVyIGlzIG1pc3NpbmcsIGluIHRoaXMgY2FzZSwgZmxvd3RhYmxlIGxvb2t1cHMgYXJlIG5vdCBwb3NzaWJsZS5cbiBUQ1AgUlNUIGFuZCBGSU4gcGFja2V0cyBhcmUgYWxzbyBwYXNzZWQgdXAgdG8gdGhlIGNsYXNzaWMgSVAgZm9yd2FyZGluZyBwYXRoIHRvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IDkyNjExODAyODAxZWEuLjJhZmNlNzZhZDEzMTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTE2MSw2ICsxMTYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4gXHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggOTliMjhhYWE3Y2M0Ny4uNGVlOTllOGU0YTM0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuQEAgLTM3OCw2ICszNzgsNyBAQCBtdGtfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmYsXG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fUkVESVJFQ1Q6XG4gXHRcdFx0b2RldiA9IGFjdC1cdTAwM2VkZXY7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XG4gXHRcdGNhc2UgRkxPV19BQ1RJT05fQ1NVTTpcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9WTEFOX1BVU0g6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjIzMjE4YzhjYmMzZGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMjAyLDYgKzIwMiw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWQge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdFx0ZmxhZ3M7XG4gXHR1MTZcdFx0XHRcdFx0dHlwZTtcbiBcdHUzMlx0XHRcdFx0XHR0aW1lb3V0O1xuK1x0dTMyXHRcdFx0XHRcdHByaW9yaXR5O1xuIFx0c3RydWN0IHJjdV9oZWFkXHRcdFx0XHRyY3VfaGVhZDtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IGM4YzI5YTlhMTY4NDQuLmM4NWUyZDYwOGMzMjkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbkBAIC01MDksNiArNTA5LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0aXBfZGVjcmVhc2VfdHRsKGlwaCk7XG4gXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gXG4rXHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbitcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbitcbiBcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiBcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gXG5AQCAtMTEwNCw2ICsxMTA3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcDZoLVx1MDAzZWhvcF9saW1pdC0tO1xuIFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuIFxuK1x0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpXG4rXHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4rXG4gXHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXG4gXHRcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXHUwMDNlY3QsIHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXIsIHNrYi1cdTAwM2VsZW4pO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5pbmRleCA4MDFhM2RkOWNlZWEzLi5jYWFhZGZmYzI1NjNlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1xuQEAgLTY5Niw2ICs2OTYsMTcgQEAgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4gXHQgICAgZmxvd19vZmZsb2FkX2V0aF9kc3QobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtMTtcbiBcbitcdGlmIChmbG93LVx1MDAzZXByaW9yaXR5KSB7XG4rXHRcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XG4rXG4rXHRcdGVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xuK1x0XHRpZiAoIWVudHJ5KVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTtcbitcdFx0ZW50cnktXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuK1x0fVxuK1xuIFx0dHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVwbGUtXHUwMDNlZW5jYXBfbnVtOyBpKyspIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi5jYTkxOTI0YjRkZTNiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtMTE3LDYgKzExNywxMSBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuK1x0LyogVGhlIHBhY2tldHMgdGhlIGZsb3cgZm9yd2FyZHMgaW4gaXRzIHBsYWNlIGJ5cGFzcyB0aGUgcnVsZXMgdGhhdFxuK1x0ICogY2xhc3NpZmllZCB0aGlzIG9uZTsgY2FycnkgdGhlIHJlc3VsdCB3aXRoIHRoZSBmbG93LlxuK1x0ICovXG4rXHRmbG93LVx1MDAzZXByaW9yaXR5ID0gcGt0LVx1MDAzZXNrYi1cdTAwM2Vwcmlvcml0eTtcbitcbiBcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLmFiNzczMjM1OGUxZDggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTQ1OCw2ICs0NTgsMTA2IEBAIGZpXG4gXHRjaGVja19kc2NwIFwiZHNjcF9md2RcIiBcIiRwbXR1XCJcbiB9XG4gXG4rY2hlY2tfcHJpb3JpdHkoKVxuK3tcbitcdGxvY2FsIHdoYXQ9JDFcbitcdGxvY2FsIHBtdHU9XCIkMlwiXG4rXHRsb2NhbCBvaz0xXG4rXG4rXHRsb2NhbCBjb3VudGVyXG4rXHRjb3VudGVyPSQoaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXIgbmV0ZGV2IHByaW9jaGVjayBwcmlvMyB8IGdyZXAgcGFja2V0cylcbitcdGxvY2FsIHBjMz0ke2NvdW50ZXIlKmJ5dGVzKn1cbitcdHBjMz0ke3BjMyMqcGFja2V0c31cbitcbitcdGNvdW50ZXI9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8wIHwgZ3JlcCBwYWNrZXRzKVxuK1x0bG9jYWwgcGMwPSR7Y291bnRlciUqYnl0ZXMqfVxuK1x0cGMwPSR7cGMwIypwYWNrZXRzfVxuK1xuK1x0bG9jYWwgZmFpbG1zZz1cIkZBSUw6IHBtdHUgJHBtdHU6ICR3aGF0IGNvdW50ZXJzIGRvIG5vdCBtYXRjaCwgZXhwZWN0ZWRcIlxuK1xuK1x0Y2FzZSBcIiR3aGF0XCIgaW5cbitcdFwicHJpb19ub25lXCIpXG4rXHRcdGlmIFsgXCIkcGMzXCIgLWd0IDAgXSB8fCBbIFwiJHBjMFwiIC1lcSAwIF07IHRoZW5cbitcdFx0XHRlY2hvIFwiJGZhaWxtc2cgcHJpbzMgPT0gMCwgcHJpbzAgXHUwMDNlIDAsIGJ1dCBnb3QgJHBjMywkcGMwXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0XHRyZXQ9MVxuK1x0XHRcdG9rPTBcbitcdFx0ZmlcbitcdFx0OztcbitcdFwicHJpb19md2RcIilcbitcdFx0aWYgWyBcIiRwYzNcIiAtZXEgMCBdIHx8IFsgXCIkcGMwXCIgLWd0IDAgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCIkZmFpbG1zZyBwcmlvMyBcdTAwM2UgMCwgcHJpbzAgPT0gMCwgYnV0IGdvdCAkcGMzLCRwYzBcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0b2s9MFxuK1x0XHRmaVxuK1x0XHQ7O1xuK1x0KilcbitcdFx0ZWNobyBcIiRmYWlsbXNnOiBVbmtub3duIHByaW9yaXR5IGNoZWNrXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0b2s9MFxuK1x0ZXNhY1xuK1xuK1x0aWYgWyBcIiRva1wiIC1lcSAxIF0gO3RoZW5cbitcdFx0ZWNobyBcIlBBU1M6ICR3aGF0OiBwcmlvcml0eSBwYWNrZXQgY291bnRlcnMgbWF0Y2hcIlxuK1x0Zmlcbit9XG4rXG4rdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkoKVxuK3tcbitcdGxvY2FsIHBtdHU9XCIkM1wiXG4rXHRsb2NhbCBwcm90bz1cIiQ0XCJcbitcdGxvY2FsIGRzdGlwPVwiJDVcIlxuK1x0bG9jYWwgZHN0cG9ydD1cIiQ2XCJcbitcdGxvY2FsIGxyZXQ9MFxuK1xuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtZiAtIFx1MDAzY1x1MDAzY0VPRlxuK3RhYmxlIG5ldGRldiBwcmlvY2hlY2sge1xuKyAgIGNvdW50ZXIgcHJpbzAgeyB9XG4rICAgY291bnRlciBwcmlvMyB7IH1cbitcbisgICBjaGFpbiBlZ3Jlc3MwIHtcbisgICAgICB0eXBlIGZpbHRlciBob29rIGVncmVzcyBkZXZpY2UgXCJ2ZXRoMFwiIHByaW9yaXR5IDA7IHBvbGljeSBhY2NlcHRcbisgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgMDozIGNvdW50ZXIgbmFtZSBcInByaW8zXCJcbisgICAgICBtZXRhIGw0cHJvdG8gdGNwIG1ldGEgcHJpb3JpdHkgbm9uZSBjb3VudGVyIG5hbWUgXCJwcmlvMFwiXG4rICAgfVxuK1xuKyAgIGNoYWluIGVncmVzczEge1xuKyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSBcInZldGgxXCIgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFwicHJpbzNcIlxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcInByaW8wXCJcbisgICB9XG4rfVxuK0VPRlxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBDb3VsZCBub3QgbG9hZCBuZXRkZXY6ZWdyZXNzIGZvciB2ZXRoMCBhbmQgdmV0aDFcIlxuK1x0XHRyZXR1cm4gMFxuK1x0ZmlcbitcbitcdGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19pcCBcIiQxXCIgXCIkMlwiIFwiJHBtdHVcIiBcIiRwcm90b1wiIFwiJGRzdGlwXCIgXCIkZHN0cG9ydFwiOyB0aGVuXG4rXHRcdGxyZXQ9MVxuK1x0ZmlcbitcdGNoZWNrX3ByaW9yaXR5IFwicHJpb19ub25lXCIgXCIkcG10dVwiXG4rXG4rXHQjIFRoZSBmbG93IHN0b3JlcyB0aGUgcHJpb3JpdHkgc2V0IGJlZm9yZSBpdCBpcyBhZGRlZCwgc28gdGhlIHBhY2tldHNcbitcdCMgdGhlIGZsb3d0YWJsZSBmb3J3YXJkcyBsZWF2ZSB3aXRoIGl0IHRvbywgaW4gYm90aCBkaXJlY3Rpb25zLlxuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtZiAtIFx1MDAzY1x1MDAzY0VPRlxuK3RhYmxlIGluZXQgcHJpb3NldCB7XG4rICAgY2hhaW4gZm9yd2FyZCB7XG4rICAgICAgdHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IC0xOyBwb2xpY3kgYWNjZXB0XG4rICAgICAgbWV0YSBwcmlvcml0eSBzZXQgMDozXG4rICAgfVxuK31cbitFT0ZcbitcdGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19pcCBcIiQxXCIgXCIkMlwiIFwiJHBtdHVcIiBcIiRwcm90b1wiIFwiJGRzdGlwXCIgXCIkZHN0cG9ydFwiOyB0aGVuXG4rXHRcdGxyZXQ9MVxuK1x0ZmlcbitcdGNoZWNrX3ByaW9yaXR5IFwicHJpb19md2RcIiBcIiRwbXR1XCJcbitcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBkZWxldGUgdGFibGUgaW5ldCBwcmlvc2V0XG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgZGVsZXRlIHRhYmxlIG5ldGRldiBwcmlvY2hlY2tcbitcbitcdHJldHVybiAkbHJldFxuK31cbitcbiB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCgpXG4ge1xuIFx0bG9jYWwgbnNhPVwiJDFcIlxuQEAgLTUxNiw2ICs2MTYsMTEgQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuK2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXCIkbnMxXCIgXCIkbnMyXCIgMCA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdGVjaG8gXCJGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRyZXQ9MVxuK2ZpXG4rXG4gIyBkZWxldGUgZGVmYXVsdCByb3V0ZSwgaS5lLiBuczIgd29uJ3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cbkBAIC01NzIsNiArNjc3LDExIEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfZHNjcCBcIiRuczFcIiBcIiRuczJcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXG4gXHRleGl0IDBcbiBmaVxuIFxuK2lmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19zZXRfcHJpb3JpdHkgXCIkbnMxXCIgXCIkbnMyXCIgMSA0IDEwLjAuMi45OSAxMjM0NTsgdGhlblxuK1x0ZWNobyBcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIHByaW9yaXR5IHVwZGF0ZSBhbmQgcG10dSBkaXNjb3ZlcnlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0cmV0PTFcbitmaVxuK1xuIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbiBcbiBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFwiJG5zMVwiIFwiJG5zMlwiIDEgXCJcIjsgdGhlblxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MTkuODczMzk4NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTI3Mjg0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQXNzZXNzbWVudDogTmV0ZmlsdGVyIEZsb3d0YWJsZSBQcmlvcml0eSBIYW5kbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIHNlZSBpZiBpdCdzIHdvcnRoIG91ciBmdXp6aW5nIGVmZm9ydHMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgY2hhbmdlcywgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIG5ldGZpbHRlciBmbG93dGFibGUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gcGFja2V0IHByaW9yaXR5IGhhbmRsaW5nLiBXZSd2ZSBnb3Q6XG5cbjEuICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgaW4gYG5mX2Zsb3d0YWJsZS5yc3RgLlxuMi4gIERyaXZlciBhZGRpdGlvbnMgKGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgKSB0aGF0IGltcGxlbWVudCBgRkxPV19BQ1RJT05fUFJJT1JJVFlgLiBUaGlzIHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIHNwZWNpZmljIGhhcmR3YXJlLCBwcm9iYWJseSBjb25jZXJuaW5nIHRyYWZmaWMgcHJpb3JpdGl6YXRpb24uXG4zLiAgSGVhZGVyIGNoYW5nZXMgKGBuZl9mbG93X3RhYmxlLmhgKSB3aGVyZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgbm93IGluY2x1ZGVzIGEgYHUzMiBwcmlvcml0eWAgZmllbGQuXG40LiAgQ29kZSBtb2RpZmljYXRpb25zIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCB3aGVyZSBwcmlvcml0eSBpcyBzZXQgb24gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpZiBpdCBleGlzdHMuXG41LiAgTW9kaWZpY2F0aW9ucyB0byBob3cgcHJpb3JpdHkgaXMgaGFuZGxlZCBpbiBmbG93IHJ1bGUgcm91dGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYC5cbjYuICBBbmQgZmluYWxseSwgc2V0dGluZyB0aGUgcHJpb3JpdHkgaW4gYG5mdF9mbG93X29mZmxvYWQuY2AgYmFzZWQgb24gdGhlIHBhY2tldCdzIGBza2JgIHByaW9yaXR5LlxuNy4gIEEgbmV3IHNlbGYtdGVzdCBzY3JpcHQsIHdoaWNoIGlzIGEgZ29vZCBzaWduIGJ1dCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gaXQncyBjb21wbGV0ZS5cblxuU28sIHdoZXJlIGlzIHRoaXMgY29kZSByZXNpZGluZz8gSXQgbG9va3MgbGlrZSB3ZSdyZSBzcXVhcmVseSBpbiB0aGUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBuZXRmaWx0ZXIgZmxvd3RhYmxlIGFuZCBuZnRhYmxlcyBmbG93IG9mZmxvYWQuIFRoZXNlIGFyZSBrZXkgYXJlYXMsIHdoaWNoIGFyZSBhbG1vc3QgY2VydGFpbmx5IHJ1bm5pbmcgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc2V0dXBzIOKAkyB0aGluayBRRU1VLCB2aXJ0aW8sIHRhcC92ZXRoIGludGVyZmFjZXMsIG5hbWVzcGFjZXMsIGFuZCwgb2YgY291cnNlLCBuZnRhYmxlcy5cblxuKipNeSBFeHBlcnQgT3BpbmlvbjoqKlxuXG5HaXZlbiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nLCBuZXRmaWx0ZXIgY29kZSwgcGFja2V0IGZvcndhcmRpbmcsIGZsb3d0YWJsZSBvZmZsb2FkLCBhbmQgbmZ0YWJsZXMgZXZhbHVhdGlvbiwgX2Fic29sdXRlbHlfLCB0aGlzIHdhcnJhbnRzIGEgZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3NpbmcsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBpcyBzaWduaWZpY2FudC4gVGhlIGludHJvZHVjdGlvbiBvZiBwcmlvcml0eSBoYW5kbGluZyBjb3VsZCBhbHNvIHJldmVhbCBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBkaWZmZXJlbnQgdHJhZmZpYyBmbG93cy4gTm93LCBsZXQncyBxdWlja2x5IGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlc2UgY2hhbmdlcywgSSdsbCB1c2UgYGdyZXBwZXJgIG9yIHNjYW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCByZWZpbmUgdGhlIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MjcuNDAwNjg2MDI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTgzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTUwND1jb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDU6XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDYtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwNTpcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjM6XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyNC1cXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM5PW9iai0kKENPTkZJR19ORlRfRldEX05FVERFVilcXHQrPSBuZnRfZndkX25ldGRldi5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcXHQrPSBuZl9mbG93X3RhYmxlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0My1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ2Om5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICs9IG5mX2Zsb3dfdGFibGVfcHJvY2ZzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NzppZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ4LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgKz0gbmZfZmxvd190YWJsZV9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ5OmVsc2UgaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSkseSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1MC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBuZl9mbG93X3RhYmxlX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTYyND12b2lkIG5mX2Nvbm50cmFja190Y3BfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY1Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxNjU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NTgtXFx0dG4tXFx1MDAzZW9mZmxvYWRfdGltZW91dCA9IDMwICogSFo7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz0xOTU9dm9pZCBuZl9jb25udHJhY2tfdWRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzoyMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMtMjA0LVxcdHVuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4NT1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjA5LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9VTkFDSyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjEwOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MTEtXFx0TkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQUQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjE4LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjIwLVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FELFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6Nzg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6ODM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz05MzU9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTY1LVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXS5kYXRhID0gXFx1MDAyNnRuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTAwMz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMwLVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU1dLmRhdGEgPSBcXHUwMDI2dW4tXFx1MDAzZXRpbWVvdXRzW1VEUF9DVF9SRVBMSUVEXTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMi1cXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0uZGF0YSA9IFxcdTAwMjZ1bi1cXHUwMDNlb2ZmbG9hZF90aW1lb3V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDQ4PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDU3LVxcdFxcdFxcdGZsb3dfb2ZmbG9hZF93b3JrX2FkZChvZmZsb2FkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwNTg6XFx0XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0RFQ19BVE9NSUMobmV0LCBjb3VudF93cV9hZGQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA1OS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2MS1cXHRcXHRcXHRmbG93X29mZmxvYWRfd29ya19kZWwob2ZmbG9hZCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDYyOlxcdFxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3FfZGVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwNjUtXFx0XFx0XFx0Zmxvd19vZmZsb2FkX3dvcmtfc3RhdHMob2ZmbG9hZCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDY2OlxcdFxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9ERUNfQVRPTUlDKG5ldCwgY291bnRfd3Ffc3RhdHMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA2Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTA3Nj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfcXVldWVfd29yayhzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODAtXFx0aWYgKG9mZmxvYWQtXFx1MDAzZWNtZCA9PSBGTE9XX0NMU19SRVBMQUNFKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMDgxOlxcdFxcdE5GX0ZMT1dfVEFCTEVfU1RBVF9JTkNfQVRPTUlDKG5ldCwgY291bnRfd3FfYWRkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODItXFx0XFx0cXVldWVfd29yayhuZl9mbG93X29mZmxvYWRfYWRkX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDgzLVxcdH0gZWxzZSBpZiAob2ZmbG9hZC1cXHUwMDNlY21kID09IEZMT1dfQ0xTX0RFU1RST1kpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODQ6XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9kZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA4NS1cXHRcXHRxdWV1ZV93b3JrKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2V3b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwODYtXFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwODc6XFx0XFx0TkZfRkxPV19UQUJMRV9TVEFUX0lOQ19BVE9NSUMobmV0LCBjb3VudF93cV9zdGF0cyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDg4LVxcdFxcdHF1ZXVlX3dvcmsobmZfZmxvd19vZmZsb2FkX3N0YXRzX3dxLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNld29yayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTg0PXN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODgtXFx0XFx0X19iZTE2XFx0cHJvdG87XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo4OTpcXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTkwLVxcdHU4IG51bV9lbmNhcHM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTEwND1zdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xMzktXFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjE0MDpcXHRcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbnVtX2VuY2FwcyBcXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE0MS1cXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE2Ni1cXHRcXHRcXHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTY3OlxcdFxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIFxcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMTY4LVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MjcuNDUwNjcxOTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxOTg4MjAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gTXkgcGxhbiBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHNlY3Rpb25zIG9mIHRoZSBmaWxlLiBJJ20gdGhpbmtpbmcgbGluZXMgNTAwLTUxNSBhbmQgNzAwLTcyNSBhcmUgcHJvYmFibHkga2V5IGFyZWFzIHRvIGV4YW1pbmUuIFRoZXNlIHNlY3Rpb25zIGxpa2VseSBjb250YWluIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGlvbnNoaXBzIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEJ5IHBpbnBvaW50aW5nIHRoZXNlIHJhbmdlcywgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGhpbiB0aGlzIE5ldGZpbHRlciBjb25maWd1cmF0aW9uIGNvbnRleHQuIEl0J3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhcHByb2FjaCB0aGlzIHNwZWNpZmljIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjI5LjI3MDU1NjUyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdGRlZmF1bHQgblxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDUwMzpcXHRcXG4gNTA0OlxcdGNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxuIDUwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDUwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXFxcIlxcbiA1MDc6XFx0XFx0aGVscFxcbiA1MDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiZmxvd19vZmZsb2FkXFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG4gNTA5OlxcdFxcdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cXG4gNTEwOlxcdFxcbiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuIDUyMDpcXHRjb25maWcgTkZUX0xPR1xcbiA1MjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbG9nIG1vZHVsZVxcXCJcXG4gNTIyOlxcdFxcdGhlbHBcXG4gNTIzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImxvZ1xcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvIGxvZ1xcbiA1MjQ6XFx0XFx0ICBwYWNrZXRzIG1hdGNoaW5nIHNvbWUgY3JpdGVyaWEuXFxuIDUyNTpcXHRcXG4gNTI2OlxcdGNvbmZpZyBORlRfTElNSVRcXG4gNTI3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGxpbWl0IG1vZHVsZVxcXCJcXG4gNTI4OlxcdFxcdGhlbHBcXG4gNTI5OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImxpbWl0XFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MjkuMjcwNjYyNDk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2OTc3MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJ2xsIHdhbnQgdG8gemVybyBpbiBvbiBib3RoIGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAuIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbnRlcm5ldC1zcGVjaWZpYyBvcHRpb25zLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgaXMga2V5IHRvIGRpYWdub3NpbmcsIHR3ZWFraW5nLCBvciBpbnRlZ3JhdGluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdGllcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdGFibGVzIGFyZSBlbmFibGVkLCBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGRlZmF1bHQgc2V0dGluZ3MuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcy4gR290dGEgZ2V0IHRoZSBsb3ctZG93biBvbiB0aGUgYmFzaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzEuNjQwNDM3NTIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHRcXG4gNzAxOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG4gNzA0OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbiA3MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzEwOlxcdFxcbiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcyMDpcXHRcXG4gNzIxOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbiA3MjI6XFx0XFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuIDcyMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzI0OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiA3MjU6XFx0XFx0aGVscFxcbiA3MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG4gNzI3OlxcdFxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbiA3Mjg6XFx0XFxuIDcyOTpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcXG4gNzMwOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgWHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgaXBfdGFibGVzKVxcXCJcXG4gNzMxOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiA3MzI6XFx0XFx0aGVscFxcbiA3MzM6XFx0XFx0ICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgdG8gdXNlIGFueSBvZiBpcF90YWJsZXMsXFxuIDczNDpcXHRcXHQgIGlwNl90YWJsZXMgb3IgYXJwX3RhYmxlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzEuNjQwNTM3NjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAwNDQyMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgTmV0ZmlsdGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCdzIGJlZW4gdG91Y2hlZCByZWNlbnRseSBpbiB0aGUgTmV0ZmlsdGVyIHJlYWxtLiBBaGEsIEkgc2VlIHR3byBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEludGVyZXN0aW5nLiBOb3csIHRoZSBzeW1ib2xzIGludm9sdmVkIGFyZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zPyBBcmUgdGhleSBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXM/IEFyZSB0aGV5IHN0YXRpYyBhbmQgaW50ZXJuYWwgdG8gdGhhdCBmaWxlPyBPciwgZXZlbiBtb3JlIGNyaXRpY2FsbHksIHdoZXJlIGFuZCBob3cgYXJlIHRoZXkgKmNhbGxlZCo/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aHMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgZmxvdyB0YWJsZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjMzLjk0MDk4NjA1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5OTU3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmR8bmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04Njc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4ODc6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4OC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMDE9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNjYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA2NzpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIxOTpcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjIwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjozMy45OTA5OTAxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NDAyMjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3b3Jrcywgc28gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBiZWdpbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHJvdXRpbmcgZGVjaXNpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgb2ZmbG9hZCBwcm9jZXNzLlxuXG5Ob3csIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gIGlzIHV0aWxpemVkLCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxzLiBXaGVyZSBleGFjdGx5IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgYnJvYWRlciBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGFyY2hpdGVjdHVyZT8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIHdoeSBpdCdzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzYuMDc1MDE1NTY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY1ODg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjgyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY4MzpuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4NC1cXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc1ND1pbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzU4OlxcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1OS1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc4Mz1pbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Nzg3OlxcdGlmIChuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKG5ldCwgZmxvdywgZGlyLCBmbG93X3J1bGUpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4OC1cXHRcXHRyZXR1cm4gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjM2LjEyNjY3NjczOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODUzMDIwODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GVGFibGVzIEZsb3cgT2ZmbG9hZCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGxpdmVzLiBUaGUga2V5IGZ1bmN0aW9uIEkgd2FudCB0byB1bmRlcnN0YW5kIGlzIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaW1lIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBzdGFydCBieSBzZWVpbmcgcHJlY2lzZWx5IHdoZXJlIHRoZSBldmFsdWF0aW9uIGlzIGludm9rZWQuIExldCdzIHRyYWNlIGl0IGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBOZXRmaWx0ZXIgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgcmVhbGx5IGhlbHAgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjM3Ljk3OTY5OTQzOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2OTkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTQxPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9jdF90Y3Aoc3RydWN0IG5mX2Nvbm4gKmN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNDktXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NTA6c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01MS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZmxvd19vZmZsb2FkX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIyNS1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9mbG93X29mZmxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjY6XFx0LmV2YWxcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMjctXFx0LmluaXRcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6MzguMDMxNDAwNTM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5NDAyOTA4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FudGVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29udGV4dCwgc28gSSBjaGVja2VkIGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgIOKAkyBqdXN0IGNvbmZpcm1pbmcgdGhleSdyZSBldGhlcm5ldCBkcml2ZXJzIGZvciBBaXJvaGEgYW5kIE1lZGlhVGVrIFNvQ3MsIHJlc3BlY3RpdmVseS4gVGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIGJlIHdpdGhpbiBgbmV0L25ldGZpbHRlcmAsIHNwZWNpZmljYWxseSBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLlxuXG5JJ2xsIGxpc3Qgb3V0IHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0YCwgYW5kIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NmAuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRob3NlIGZpbGVzLiBJbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFyZSBzdGF0aWMgYW5kIGFyZSBjYWxsZWQgYnkgdGhlIHJlc3BlY3RpdmUgaG9vayBmdW5jdGlvbnMuIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGlzIGFsc28gc3RhdGljLCBpbnZva2VkIHRocm91Z2ggYG5mdF9mbG93X29mZmxvYWRfb3BzLmV2YWxgLiAgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gIGlzIHN0YXRpYyBhbmQgdXNlZCBieSBib3RoIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NGAgYW5kIGBuZl9mbG93X3J1bGVfcm91dGVfaXB2NmAuXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UncmUgbG9va2luZyBhdCBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfSU5HUkVTU2AuIExldCdzIGNvbmZpcm0gdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBjb3JyZWN0bHkgZGVwZW5kZW50LiBDaGVja2luZyB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYE5GX0ZMT1dfVEFCTEVgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gYE5GVF9GTE9XX09GRkxPQURgIGRlcGVuZHMgb24gYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgZGVwZW5kcyBvbiBgTkZfRkxPV19UQUJMRWAuIFdlIGtub3cgYE5FVEZJTFRFUl9JTkdSRVNTYCBkZXBlbmRzIG9uIGBORVRGSUxURVJgIHdoaWNoIGlzIHN0YW5kYXJkLCBzbyB3ZSdyZSBjb3ZlcmVkIHdpdGggYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLCBgTkZfVEFCTEVTYCwgYW5kIGBORl9DT05OVFJBQ0tgLlxuXG5UbyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBsZXQncyBkbyBhIHF1aWNrIGRpZmYuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiwgdGhlIGRyaXZlciBmaWxlcyBJIGFscmVhZHkgc2F3LCBhIG5ldyBgcHJpb3JpdHlgIGZpZWxkIGluIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBpbiBgbmZfZmxvd190YWJsZS5oYCwgYW5kLCBpbXBvcnRhbnRseSwgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBgbmV0L25ldGZpbHRlcmAgZmlsZXMgd2hpY2ggc2V0L3BvcHVsYXRlIHRoZSBgc2tiLVx1MDAzZXByaW9yaXR5YCBkdXJpbmcgSVB2NCBhbmQgSVB2NiBmb3J3YXJkaW5nLCBvciByZWNvcmQgYW5kIHNldCBwcmlvcml0eSB2YWx1ZXMgaW50byB0aGUgZmxvdyBkYXRhLCBhbmQgYWRkcyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgLiBQbHVzLCB0aGVyZSdzIGEgbmV3IHNlbGZ0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hgLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgaG93IHBhY2tldCBwcmlvcml0eSBpcyBoYW5kbGVkIHdpdGhpbiBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMsIGVuY29tcGFzc2luZyBib3RoIHNvZnR3YXJlIGZhc3RwYXRoIGFuZCBmbG93IG9mZmxvYWRpbmcuIFRoYXQgbWVhbnMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhcmUgYWZmZWN0ZWQuXG5cbioqVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuKipcblxuSGVyZSdzIHRoZSBkYXRhIGZvciBgc2V0LXJlc3VsdHNgOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYFxuKiAgIGBSZWFzb25pbmdgOiBNb2RpZmllcyBuZXRmaWx0ZXIgZmxvd3RhYmxlIGFuZCBuZnRhYmxlcyBmbG93IG9mZmxvYWQgdG8gcmVjb3JkIGFuZCByZXN0b3JlIGBza2JgIHByaW9yaXR5IGFjcm9zcyBmYXN0cGF0aCBhbmQgaGFyZHdhcmUgb2ZmbG9hZCBydWxlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0YCwgYG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2YFxuKiAgIGBFbmFibGVDb25maWdzYDogYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLCBgTkZfVEFCTEVTYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJfSU5HUkVTU2BcblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjAwLCJPdXRwdXRUb2tlbnMiOjIzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6NDYuOTcxNjk0MzU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3MjczODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25cIixcbiAgICBcIm5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0XCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBhbmQgbmZ0YWJsZXMgZmxvdyBvZmZsb2FkIGxvZ2ljIHRvIGNhcHR1cmUgcGFja2V0IHByaW9yaXR5IGFuZCBwcm9wYWdhdGUgaXQgZHVyaW5nIHNvZnR3YXJlIGZsb3cgdGFibGUgZm9yd2FyZGluZyAoSVB2NC9JUHY2KSBhcyB3ZWxsIGFzIG9mZmxvYWQgcnVsZSBjb25zdHJ1Y3Rpb24uIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgZmFzdHBhdGhzIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfZXZhbFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uXCIsXG4gICAgXCJuZl9mbG93X3J1bGVfcm91dGVfaXB2NFwiLFxuICAgIFwibmZfZmxvd19ydWxlX3JvdXRlX2lwdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBmbG93dGFibGUgYW5kIG5mdGFibGVzIGZsb3cgb2ZmbG9hZCBsb2dpYyB0byBjYXB0dXJlIHBhY2tldCBwcmlvcml0eSBhbmQgcHJvcGFnYXRlIGl0IGR1cmluZyBzb2Z0d2FyZSBmbG93IHRhYmxlIGZvcndhcmRpbmcgKElQdjQvSVB2NikgYXMgd2VsbCBhcyBvZmZsb2FkIHJ1bGUgY29uc3RydWN0aW9uLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIGZhc3RwYXRocyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGluIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM2OjQ3LjA0NjQyNzgzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDA1NDQzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzY6NDcuMDQ2ODczNzYzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3NDA0OTkzMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGZsb3cgcHJpb3JpdHkgdHJhY2tpbmcgdG8gdGhlIE5ldGZpbHRlciBmbG93dGFibGUgZmFzdHBhdGggYW5kIG9mZmxvYWQgc3Vic3lzdGVtLiBcXG4tIFN0cnVjdCBgZmxvd19vZmZsb2FkYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIChgZmxvd19vZmZsb2FkX2FsbG9jYCksIHplcm9pbmcgYWxsIGZpZWxkcyBpbmNsdWRpbmcgdGhlIG5ldyBgcHJpb3JpdHlgIGZpZWxkLlxcbi0gVGhlIGBmbG93LVxcdTAwM2Vwcmlvcml0eWAgZmllbGQgaXMgYXNzaWduZWQgZnJvbSBgcGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByaW9yaXR5YCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBhbmQgbGF0ZXIgcmVhZCB0byBzZXQgYHNrYi1cXHUwMDNlcHJpb3JpdHlgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggb3IgYWRkZWQgYXMgYSBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGZsb3cgYWN0aW9uIGVudHJ5IGluIGBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uYC5cXG4tIEZsb3cgcnVsZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGZsb3dfcnVsZV9hbGxvY2AgdXNpbmcgYGt6YWxsb2NfZmxleGAsIGVuc3VyaW5nIGFsbCBhY3Rpb24gZW50cmllcyBhcmUgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSwgc3RhY2svaGVhcCBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMxMzQyOWMxN2M5ZWRhYTZmZDU3MWU3N2JhNmEyYjAyOTBlOTBmMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEyOjM2OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Zsb3d0YWJsZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdFxuaW5kZXggZDc1N2MyMWMxMGYyZC4uNTg0NGFiMTlhZWM2NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9mbG93dGFibGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfZmxvd3RhYmxlLnJzdFxuQEAgLTcxLDcgKzcxLDkgQEAgZm9yd2FyZGluZyBwYXRoIGluY2x1ZGluZyB0aGUgTmV0ZmlsdGVyIGhvb2tzIGFuZCB0aGUgZmxvd3RhYmxlIGZhc3RwYXRoIGJ5cGFzcy5cbiBcbiBUaGUgZmxvd3RhYmxlIGVudHJ5IGFsc28gc3RvcmVzIHRoZSBOQVQgY29uZmlndXJhdGlvbiwgc28gYWxsIHBhY2tldHMgYXJlXG4gbWFuZ2xlZCBhY2NvcmRpbmcgdG8gdGhlIE5BVCBwb2xpY3kgdGhhdCBpcyBzcGVjaWZpZWQgZnJvbSB0aGUgY2xhc3NpYyBJUFxuLWZvcndhcmRpbmcgcGF0aC4gVGhlIFRUTCBpcyBkZWNyZW1lbnRlZCBiZWZvcmUgY2FsbGluZyBuZWlnaF94bWl0KCkuIEZyYWdtZW50ZWRcbitmb3J3YXJkaW5nIHBhdGguIFRoZSBUVEwgaXMgZGVjcmVtZW50ZWQgYmVmb3JlIGNhbGxpbmcgbmVpZ2hfeG1pdCgpLiBUaGUgZmxvd1xuK2Fsc28gc3RvcmVzIHRoZSBwcmlvcml0eSBvZiB0aGUgcGFja2V0IHRoYXQgY3JlYXRlZCBpdCwgc28gYSBwcmlvcml0eSBzZXQgYmVmb3JlXG4rYGBmbG93IGFkZGBgIGFwcGxpZXMgdG8gdGhlIHBhY2tldHMgdGhhdCB0aGUgZmxvd3RhYmxlIGZvcndhcmRzLiBGcmFnbWVudGVkXG4gdHJhZmZpYyBpcyBwYXNzZWQgdXAgdG8gZm9sbG93IHRoZSBjbGFzc2ljIElQIGZvcndhcmRpbmcgcGF0aCBnaXZlbiB0aGF0IHRoZVxuIHRyYW5zcG9ydCBoZWFkZXIgaXMgbWlzc2luZywgaW4gdGhpcyBjYXNlLCBmbG93dGFibGUgbG9va3VwcyBhcmUgbm90IHBvc3NpYmxlLlxuIFRDUCBSU1QgYW5kIEZJTiBwYWNrZXRzIGFyZSBhbHNvIHBhc3NlZCB1cCB0byB0aGUgY2xhc3NpYyBJUCBmb3J3YXJkaW5nIHBhdGggdG9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggOTI2MTE4MDI4MDFlYS4uMmFmY2U3NmFkMTMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0xMTYxLDYgKzExNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZmxvd19vZmZsb2FkX3JlcGxhY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbiBcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5pbmRleCA5OWIyOGFhYTdjYzQ3Li40ZWU5OWU4ZTRhMzRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG5AQCAtMzc4LDYgKzM3OCw3IEBAIG10a19mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqZixcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9SRURJUkVDVDpcbiBcdFx0XHRvZGV2ID0gYWN0LVx1MDAzZWRldjtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcbiBcdFx0Y2FzZSBGTE9XX0FDVElPTl9DU1VNOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEZMT1dfQUNUSU9OX1ZMQU5fUFVTSDpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggZjJlMjc3MWYxODhmNC4uMjMyMThjOGNiYzNkYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbkBAIC0yMDIsNiArMjAyLDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0XHRmbGFncztcbiBcdHUxNlx0XHRcdFx0XHR0eXBlO1xuIFx0dTMyXHRcdFx0XHRcdHRpbWVvdXQ7XG4rXHR1MzJcdFx0XHRcdFx0cHJpb3JpdHk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRcdHJjdV9oZWFkO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uYzg1ZTJkNjA4YzMyOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTUwOSw2ICs1MDksOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbitcdGlmIChmbG93LVx1MDAzZXByaW9yaXR5KVxuK1x0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBmbG93LVx1MDAzZXByaW9yaXR5O1xuK1xuIFx0aWYgKGZsb3dfdGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxuIFx0XHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVx1MDAzZWN0LCB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyLCBza2ItXHUwMDNlbGVuKTtcbiBcbkBAIC0xMTA0LDYgKzExMDcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdGlwNmgtXHUwMDNlaG9wX2xpbWl0LS07XG4gXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gXG4rXHRpZiAoZmxvdy1cdTAwM2Vwcmlvcml0eSlcbitcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gZmxvdy1cdTAwM2Vwcmlvcml0eTtcbitcbiBcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbiBcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcbmluZGV4IDgwMWEzZGQ5Y2VlYTMuLmNhYWFkZmZjMjU2M2UgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXG5AQCAtNjk2LDYgKzY5NiwxNyBAQCBuZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiBcdCAgICBmbG93X29mZmxvYWRfZXRoX2RzdChuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC0xO1xuIFxuK1x0aWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpIHtcbitcdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbitcbitcdFx0ZW50cnkgPSBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSk7XG4rXHRcdGlmICghZW50cnkpXG4rXHRcdFx0cmV0dXJuIC0xO1xuK1xuK1x0XHRlbnRyeS1cdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1BSSU9SSVRZO1xuK1x0XHRlbnRyeS1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7XG4rXHR9XG4rXG4gXHR0dXBsZSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0dXBsZS1cdTAwM2VlbmNhcF9udW07IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDMuLmNhOTE5MjRiNGRlM2IgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbkBAIC0xMTcsNiArMTE3LDExIEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRpZiAodGNwaClcbiBcdFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XG4gXG4rXHQvKiBUaGUgcGFja2V0cyB0aGUgZmxvdyBmb3J3YXJkcyBpbiBpdHMgcGxhY2UgYnlwYXNzIHRoZSBydWxlcyB0aGF0XG4rXHQgKiBjbGFzc2lmaWVkIHRoaXMgb25lOyBjYXJyeSB0aGUgcmVzdWx0IHdpdGggdGhlIGZsb3cuXG4rXHQgKi9cbitcdGZsb3ctXHUwMDNlcHJpb3JpdHkgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5O1xuK1xuIFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuaW5kZXggNDQ5YzUxOGJkOTQ3ZC4uYWI3NzMyMzU4ZTFkOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5AQCAtNDU4LDYgKzQ1OCwxMDYgQEAgZmlcbiBcdGNoZWNrX2RzY3AgXCJkc2NwX2Z3ZFwiIFwiJHBtdHVcIlxuIH1cbiBcbitjaGVja19wcmlvcml0eSgpXG4re1xuK1x0bG9jYWwgd2hhdD0kMVxuK1x0bG9jYWwgcG10dT1cIiQyXCJcbitcdGxvY2FsIG9rPTFcbitcbitcdGxvY2FsIGNvdW50ZXJcbitcdGNvdW50ZXI9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBuZXRkZXYgcHJpb2NoZWNrIHByaW8zIHwgZ3JlcCBwYWNrZXRzKVxuK1x0bG9jYWwgcGMzPSR7Y291bnRlciUqYnl0ZXMqfVxuK1x0cGMzPSR7cGMzIypwYWNrZXRzfVxuK1xuK1x0Y291bnRlcj0kKGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVyIG5ldGRldiBwcmlvY2hlY2sgcHJpbzAgfCBncmVwIHBhY2tldHMpXG4rXHRsb2NhbCBwYzA9JHtjb3VudGVyJSpieXRlcyp9XG4rXHRwYzA9JHtwYzAjKnBhY2tldHN9XG4rXG4rXHRsb2NhbCBmYWlsbXNnPVwiRkFJTDogcG10dSAkcG10dTogJHdoYXQgY291bnRlcnMgZG8gbm90IG1hdGNoLCBleHBlY3RlZFwiXG4rXG4rXHRjYXNlIFwiJHdoYXRcIiBpblxuK1x0XCJwcmlvX25vbmVcIilcbitcdFx0aWYgWyBcIiRwYzNcIiAtZ3QgMCBdIHx8IFsgXCIkcGMwXCIgLWVxIDAgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCIkZmFpbG1zZyBwcmlvMyA9PSAwLCBwcmlvMCBcdTAwM2UgMCwgYnV0IGdvdCAkcGMzLCRwYzBcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0b2s9MFxuK1x0XHRmaVxuK1x0XHQ7O1xuK1x0XCJwcmlvX2Z3ZFwiKVxuK1x0XHRpZiBbIFwiJHBjM1wiIC1lcSAwIF0gfHwgWyBcIiRwYzBcIiAtZ3QgMCBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIiRmYWlsbXNnIHByaW8zIFx1MDAzZSAwLCBwcmlvMCA9PSAwLCBidXQgZ290ICRwYzMsJHBjMFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRvaz0wXG4rXHRcdGZpXG4rXHRcdDs7XG4rXHQqKVxuK1x0XHRlY2hvIFwiJGZhaWxtc2c6IFVua25vd24gcHJpb3JpdHkgY2hlY2tcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRvaz0wXG4rXHRlc2FjXG4rXG4rXHRpZiBbIFwiJG9rXCIgLWVxIDEgXSA7dGhlblxuK1x0XHRlY2hvIFwiUEFTUzogJHdoYXQ6IHByaW9yaXR5IHBhY2tldCBjb3VudGVycyBtYXRjaFwiXG4rXHRmaVxuK31cbitcbit0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSgpXG4re1xuK1x0bG9jYWwgcG10dT1cIiQzXCJcbitcdGxvY2FsIHByb3RvPVwiJDRcIlxuK1x0bG9jYWwgZHN0aXA9XCIkNVwiXG4rXHRsb2NhbCBkc3Rwb3J0PVwiJDZcIlxuK1x0bG9jYWwgbHJldD0wXG4rXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjRU9GXG4rdGFibGUgbmV0ZGV2IHByaW9jaGVjayB7XG4rICAgY291bnRlciBwcmlvMCB7IH1cbisgICBjb3VudGVyIHByaW8zIHsgfVxuK1xuKyAgIGNoYWluIGVncmVzczAge1xuKyAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZWdyZXNzIGRldmljZSBcInZldGgwXCIgcHJpb3JpdHkgMDsgcG9saWN5IGFjY2VwdFxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSAwOjMgY291bnRlciBuYW1lIFwicHJpbzNcIlxuKyAgICAgIG1ldGEgbDRwcm90byB0Y3AgbWV0YSBwcmlvcml0eSBub25lIGNvdW50ZXIgbmFtZSBcInByaW8wXCJcbisgICB9XG4rXG4rICAgY2hhaW4gZWdyZXNzMSB7XG4rICAgICAgdHlwZSBmaWx0ZXIgaG9vayBlZ3Jlc3MgZGV2aWNlIFwidmV0aDFcIiBwcmlvcml0eSAwOyBwb2xpY3kgYWNjZXB0XG4rICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IDA6MyBjb3VudGVyIG5hbWUgXCJwcmlvM1wiXG4rICAgICAgbWV0YSBsNHByb3RvIHRjcCBtZXRhIHByaW9yaXR5IG5vbmUgY291bnRlciBuYW1lIFwicHJpbzBcIlxuKyAgIH1cbit9XG4rRU9GXG4rXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IENvdWxkIG5vdCBsb2FkIG5ldGRldjplZ3Jlc3MgZm9yIHZldGgwIGFuZCB2ZXRoMVwiXG4rXHRcdHJldHVybiAwXG4rXHRmaVxuK1xuK1x0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFwiJDFcIiBcIiQyXCIgXCIkcG10dVwiIFwiJHByb3RvXCIgXCIkZHN0aXBcIiBcIiRkc3Rwb3J0XCI7IHRoZW5cbitcdFx0bHJldD0xXG4rXHRmaVxuK1x0Y2hlY2tfcHJpb3JpdHkgXCJwcmlvX25vbmVcIiBcIiRwbXR1XCJcbitcbitcdCMgVGhlIGZsb3cgc3RvcmVzIHRoZSBwcmlvcml0eSBzZXQgYmVmb3JlIGl0IGlzIGFkZGVkLCBzbyB0aGUgcGFja2V0c1xuK1x0IyB0aGUgZmxvd3RhYmxlIGZvcndhcmRzIGxlYXZlIHdpdGggaXQgdG9vLCBpbiBib3RoIGRpcmVjdGlvbnMuXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjRU9GXG4rdGFibGUgaW5ldCBwcmlvc2V0IHtcbisgICBjaGFpbiBmb3J3YXJkIHtcbisgICAgICB0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgLTE7IHBvbGljeSBhY2NlcHRcbisgICAgICBtZXRhIHByaW9yaXR5IHNldCAwOjNcbisgICB9XG4rfVxuK0VPRlxuK1x0aWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX2lwIFwiJDFcIiBcIiQyXCIgXCIkcG10dVwiIFwiJHByb3RvXCIgXCIkZHN0aXBcIiBcIiRkc3Rwb3J0XCI7IHRoZW5cbitcdFx0bHJldD0xXG4rXHRmaVxuK1x0Y2hlY2tfcHJpb3JpdHkgXCJwcmlvX2Z3ZFwiIFwiJHBtdHVcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGRlbGV0ZSB0YWJsZSBpbmV0IHByaW9zZXRcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBkZWxldGUgdGFibGUgbmV0ZGV2IHByaW9jaGVja1xuK1xuK1x0cmV0dXJuICRscmV0XG4rfVxuK1xuIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0KClcbiB7XG4gXHRsb2NhbCBuc2E9XCIkMVwiXG5AQCAtNTE2LDYgKzYxNiwxMSBAQCBlbHNlXG4gXHRyZXQ9MVxuIGZpXG4gXG4raWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSBcIiRuczFcIiBcIiRuczJcIiAwIDYgXCJbZGVhZDoyOjo5OV1cIiAxMjM0NTsgdGhlblxuK1x0ZWNobyBcIkZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlXCIgMVx1MDAzZVx1MDAyNjJcbitcdHJldD0xXG4rZmlcbitcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIG5zMSBhbmRcbiAjIHdpbGwgZGVwZW5kIG9uIG5zMSBiZWluZyBtYXNxdWVyYWRlZCBpbiBuc3IxLlxuICMgZXhwZWN0IG5zMSBoYXMgbnNyMSBhZGRyZXNzLlxuQEAgLTU3Miw2ICs2NzcsMTEgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9kc2NwIFwiJG5zMVwiIFwiJG5zMlwiIDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbiBcdGV4aXQgMFxuIGZpXG4gXG4raWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX3NldF9wcmlvcml0eSBcIiRuczFcIiBcIiRuczJcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXG4rXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggcHJpb3JpdHkgdXBkYXRlIGFuZCBwbXR1IGRpc2NvdmVyeVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRyZXQ9MVxuK2ZpXG4rXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuIFxuIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCIkbnMxXCIgXCIkbnMyXCIgMSBcIlwiOyB0aGVuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjo0Ny4wNDY4NzQ3MzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2ODQ4MDQ3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiB0aGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBMb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciBmbG93IHByaW9yaXR5IGZvcndhcmRpbmcsIHNvbWUgZHJpdmVyIGNvZGUgdGhhdCBzZWVtcyB0byAqaGFuZGxlKiBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGJ5IGVmZmVjdGl2ZWx5IGRvaW5nIG5vdGhpbmcgKHRoYXQncyBvZGQsIHdpbGwga2VlcCBhbiBleWUgb24gdGhhdCksIGFuZCB0aGVuLCBpbXBvcnRhbnRseSwgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgYW5kIGhvdyB0aGUgcHJpb3JpdHkgZmllbGQgaXMgaGFuZGxlZC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIG5ldyBgdTMyIHByaW9yaXR5O2AgZmllbGQgYWRkZWQgdG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBpbiBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaGAuIE9rYXksIHNvIHdlJ3JlIGFkZGluZyBwcmlvcml0eSB0byB0aGUgZmxvdyBvZmZsb2FkIHN0cnVjdHVyZSwgbWFrZXMgc2Vuc2UuIFRoZW4sIEkgc2VlIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCB1c2luZyBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgdG8gc2V0IHRoZSBgc2tiLVx1MDAzZXByaW9yaXR5YCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZyBpbiBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAuIElmIGBmbG93LVx1MDAzZXByaW9yaXR5YCBpcyBzZXQsIGEgYGZsb3dfYWN0aW9uX2VudHJ5YCBpcyBhc3NpZ25lZCwgYW5kIGl0cyBJRCBpcyBzZXQgdG8gYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCwgYW5kIHRoZSBlbnRyeSdzIHByaW9yaXR5IGlzIHNldCB3aXRoIHRoZSBmbG93J3MgcHJpb3JpdHkuIE9rYXksIHNldHRpbmcgcHJpb3JpdHkgYXMgYSBmbG93IGFjdGlvbiwgdGhhdOKAmXMgdXNlZnVsLlxuXG5GaW5hbGx5LCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2UncmUgY29weWluZyB0aGUgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaW50byBgZmxvdy1cdTAwM2Vwcmlvcml0eWAuIEludGVyZXN0aW5nLCB3ZSdyZSB0YWtpbmcgdGhlIHBhY2tldCdzIHByaW9yaXR5IHRvIHBvcHVsYXRlIHRoZSBmbG93J3MgcHJpb3JpdHkuLi4gd2hpY2ggaXMgdGhlbiB1c2VkIGJ5IHRoZSBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgY29kZS5cblxuU28sIHRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRoaXMgYHN0cnVjdCBmbG93X29mZmxvYWRgIGlzICphbGxvY2F0ZWQqIGFuZCAqaW5pdGlhbGl6ZWQqLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdGhhdCB0aGVyZSBhcmUgYSBsb3Qgb2YgY29kZSBwYXRocyBoZXJlIHRoYXQgY2FuIGFzc2lnbiB0aGUgYHByaW9yaXR5YCBmaWVsZCBvZiB0aGUgYGZsb3dgIHN0cnVjdHVyZSBhbmQgdGhlbiBjb3B5IGl0IGFyb3VuZCwgYnV0IHdoYXQgYWJvdXQgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGZpZWxkIGlzICpmaXJzdCogc2V0PyBJIG5lZWQgdG8gdXNlIGdyZXBwZXIgKG9yIGVxdWl2YWxlbnQpIHRvIHNlYXJjaCBmb3IgYWxsb2NhdGlvbnMgb2YgdGhhdCBgZmxvd19vZmZsb2FkYCBzdHJ1Y3QsIG9yIHJlbGV2YW50IGFsbG9jIGFuZCBpbml0IGZ1bmN0aW9ucy4gSSdsbCBzZWFyY2ggZm9yIGBmbG93X29mZmxvYWRfYWxsb2NgIG9yIHNpbWlsYXIgbmFtZXMuIEkgbmVlZCB0byBrbm93ICpleGFjdGx5KiBob3cgYW5kIHdoZXJlIHRoYXQgYHByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBpbml0aWFsbHkuIFRoYXQgd2lsbCBiZSB0aGUgZGV0ZXJtaW5pbmcgZmFjdG9yIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIElmIHRoaXMgZmllbGQgaXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseSwgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlLCBhbmQgcG9zc2libHkgZXhwbG9pdGFibGUsIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyOTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNjo1OS43MzE2ODIxNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM1OTYxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjE5PXN0cnVjdCBuZl9mbG93X3JvdXRlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQzLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ1LXZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIyPWZsb3dfb2ZmbG9hZF9maWxsX2RpcihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjUzOnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODcxPXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NzgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4Nzk6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfYWxsb2MoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODgwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGVbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTg0PXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk4OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk4OTpcXHRlcnIgPSBuZl9mbG93X29mZmxvYWRfYWxsb2Mob2ZmbG9hZCwgZmxvd19ydWxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5MC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTEtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTEyOlxcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMy1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQzNC1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDM1OlxcdGVudHJ5ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDM2LVxcdGlmICghZW50cnkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MDEuMjM1MzAzNzE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTYyMjc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZmxvd19vZmZsb2FkX2FsbG9jYCBpbXBsZW1lbnRhdGlvbiwgY29uc2lkZXJpbmcgaXQncyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2A6XG5cbioqRGl2aW5nIGludG8gYGZsb3dfb2ZmbG9hZF9hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZsb3cgb2ZmbG9hZCBhbGxvY2F0aW9uIHByb2Nlc3MuIFNpbmNlIHdlJ3JlIGluIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhdCB0aGUgaGVhcnQgb2YgaG93IGZsb3cgZW50cmllcyBhcmUgY3JlYXRlZCBmb3Igb2ZmbG9hZGluZyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEknbSBpbWFnaW5pbmcgaXQgZGVhbHMgd2l0aCB0aGUgY29yZSBsb2dpYywgcG9zc2libHkgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG9yIHRhYmxlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5LCBob3cgdGhlIGZsb3cgZW50cnkgaXRzZWxmIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIElzIGl0IGFsbG9jYXRpbmcgZnJvbSBhIHByZS1kZWZpbmVkIHBvb2wsIG9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGVudHJpZXM/IERvZXMgaXQgY29uc2lkZXIgdGhlIHNwZWNpZmljIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChlLmcuLCBzdXBwb3J0ZWQgcHJvdG9jb2xzLCBtYXRjaCBmaWVsZHMsIGFjdGlvbnMpPyBJJ20gaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBpdCB1c2VzIOKAkyBpcyBpdCBlbXBsb3lpbmcgUkNVLCBvciBhIG1vcmUgdHJhZGl0aW9uYWwgc3BpbmxvY2sgYXBwcm9hY2g/IEFsc28sIEkgZXhwZWN0IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZsb3cgdGFibGUgc3Vic3lzdGVtLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGNvbnNpZGVyIHdoYXQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxODksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzowNC41NTE1MzQ5MDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHR9XFxuICA1MTpcXHR9XFxuICA1MjpcXHRcXG4gIDUzOlxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRpZiAodW5saWtlbHkobmZfY3RfaXNfZHlpbmcoY3QpKSlcXG4gIDU4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRmbG93ID0ga21lbV9jYWNoZV96YWxsb2MoZmxvd19vZmZsb2FkX2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxuICA2MTpcXHRcXHRpZiAoIWZsb3cpXFxuICA2MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZjdC1cXHUwMDNlY3RfZ2VuZXJhbC51c2UpO1xcbiAgNjU6XFx0XFx0Zmxvdy1cXHUwMDNlY3QgPSBjdDtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbiAgNjg6XFx0XFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19TUkNfTkFUKVxcbiAgNzE6XFx0XFx0XFx0X19zZXRfYml0KE5GX0ZMT1dfU05BVCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4gIDcyOlxcdFxcdGlmIChjdC1cXHUwMDNlc3RhdHVzIFxcdTAwMjYgSVBTX0RTVF9OQVQpXFxuICA3MzpcXHRcXHRcXHRfX3NldF9iaXQoTkZfRkxPV19ETkFULCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHRyZXR1cm4gZmxvdztcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxuICA3ODpcXHRcXG4gIDc5OlxcdHN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcXG4gIDgwOlxcdHtcXG4gIDgxOlxcdFxcdGlmIChmbG93X3R1cGxlLVxcdTAwM2VsM3Byb3RvID09IE5GUFJPVE9fSVBWNilcXG4gIDgyOlxcdFxcdFxcdHJldHVybiBydDZfZ2V0X2Nvb2tpZShkc3RfcnQ2X2luZm8oZmxvd190dXBsZS1cXHUwMDNlZHN0X2NhY2hlKSk7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdHJldHVybiAwO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqbmZ0X3JvdXRlX2RzdF9mZXRjaChzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuICA4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuICA4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjA0LjU1MTYxOTQ5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjY4NjI3MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgUHJpb3JpdHkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBOZXRmaWx0ZXIncyBmbG93IG9mZmxvYWQgaGFuZGxlcyBwYWNrZXQgcHJpb3JpdGllcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgYHByaW9yaXR5YCBmaWVsZCBnZXRzIHBvcHVsYXRlZCBhbmQgdXNlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGBmbG93X29mZmxvYWRfYWxsb2NgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgYWxsb2NhdGluZyBhIG5ldyBmbG93IGVudHJ5LCBsZXZlcmFnZXMgYGttZW1fY2FjaGVfemFsbG9jYC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsIGJlY2F1c2UgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnRpcmUgYGZsb3dgIHN0cnVjdHVyZSBpcyB6ZXJvLWluaXRpYWxpemVkIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGVyZWZvcmUsIHRoZSBgcHJpb3JpdHlgIGZpZWxkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGBmbG93YCBzdHJ1Y3R1cmUgc3RhcnRzIGF0IHplcm8uXG5cbk5vdywgbG9va2luZyBhdCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgSSBzZWUgYGZsb3ctXHUwMDNlcHJpb3JpdHkgPSBwa3QtXHUwMDNlc2tiLVx1MDAzZXByaW9yaXR5O2AuIFRoYXQncyB3aGVyZSB0aGUgKmludGVuZGVkKiBwcmlvcml0eSBnZXRzIGFzc2lnbmVkLiBBbmQgYHNrYi1cdTAwM2Vwcmlvcml0eWAgaXMgb25lIG9mIHRoZSBzdGFuZGFyZCBmaWVsZHMgaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuXG5cbkhvd2V2ZXIsIHRoZSBwbG90IHRoaWNrZW5zLiBXaGVuIGFuYWx5emluZyB0aGUgYGFjdF9jdC5jYCBtb2R1bGUsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgd2hlbiBgZW50cnlgIGlzIGFsbG9jYXRlZCB2aWEgYGZsb3dfb2ZmbG9hZF9hbGxvYyhjdClgLCBpdHMgYHByaW9yaXR5YCBpcyBzdGFydGluZyBhdCB6ZXJvLCBieSBkZXNpZ24uXG5cbkdpdmVuIHRoZSBpbml0aWFsIHplcm8tYWxsb2NhdGlvbiwgSSdtIG5vdyBjdXJpb3VzIGFib3V0IHdoYXQgYWN0dWFsbHkgaGFwcGVucyBpZiBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgcmVtYWlucyB6ZXJvLiBJbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBJIHNlZSBgaWYgKGZsb3ctXHUwMDNlcHJpb3JpdHkpIHNrYi1cdTAwM2Vwcmlvcml0eSA9IGZsb3ctXHUwMDNlcHJpb3JpdHk7YC4gTmF0dXJhbGx5LCBpZiB0aGUgcHJpb3JpdHkgaXMgemVybywgdGhhdCBlbnRpcmUgYGlmYCBzdGF0ZW1lbnQgaXMgc2tpcHBlZCwgZWZmZWN0aXZlbHkgZG9pbmcgbm90aGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGZsb3cgYWN0aW9ucyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gb2YgZmxvdyBlbnRyaWVzIGFuZCB0aGUgYXNzb2NpYXRlZCBhY3Rpb25zIGltcGFjdCB0aGUgYHByaW9yaXR5YCB2YWx1ZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYm90aCBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAgYW5kIGBuZl9mbG93X29mZmxvYWRfYWxsb2NgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgZmxvdyBhY3Rpb25zIGFyZSBjb3VudGVkIGFuZCBhbGxvY2F0ZWQuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgcHJpb3JpdHkgaXMgbWFuYWdlZCB3aXRoIG90aGVyIHBpZWNlcyBvZiB0aGUgb2ZmbG9hZCBmcmFtZXdvcmsuIEkgbmVlZCB0byBjaGVjayBob3cgaXQgYWxsIGludGVncmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzowOS4yMjAyNDk4NTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFxuIDY5MTpcXHRcXHRpZiAoZmxvd19vZmZsb2FkX2RlY2FwX3R1bm5lbChmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwIHx8XFxuIDY5MjpcXHRcXHQgICAgZmxvd19vZmZsb2FkX2VuY2FwX3R1bm5lbChmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwKVxcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHRpZiAoZmxvd19vZmZsb2FkX2V0aF9zcmMobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwIHx8XFxuIDY5NjpcXHRcXHQgICAgZmxvd19vZmZsb2FkX2V0aF9kc3QobmV0LCBmbG93LCBkaXIsIGZsb3dfcnVsZSkgXFx1MDAzYyAwKVxcbiA2OTc6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRpZiAoZmxvdy1cXHUwMDNlcHJpb3JpdHkpIHtcXG4gNzAwOlxcdFxcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuIDcwMTpcXHRcXG4gNzAyOlxcdFxcdFxcdGVudHJ5ID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xcbiA3MDM6XFx0XFx0XFx0aWYgKCFlbnRyeSlcXG4gNzA0OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNzA1OlxcdFxcbiA3MDY6XFx0XFx0XFx0ZW50cnktXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XFxuIDcwNzpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlcHJpb3JpdHkgPSBmbG93LVxcdTAwM2Vwcmlvcml0eTtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0dHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0dXBsZS1cXHUwMDNlZW5jYXBfbnVtOyBpKyspIHtcXG4gNzEzOlxcdFxcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuIDcxNDpcXHRcXG4gNzE1OlxcdFxcdFxcdGlmICh0dXBsZS1cXHUwMDNlaW5fdmxhbl9pbmdyZXNzIFxcdTAwMjYgQklUKGkpKVxcbiA3MTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDcxNzpcXHRcXG4gNzE4OlxcdFxcdFxcdGlmICh0dXBsZS1cXHUwMDNlZW5jYXBbaV0ucHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7XFxuIDcxOTpcXHRcXHRcXHRcXHRlbnRyeSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG4gNzIwOlxcdFxcdFxcdFxcdGlmICghZW50cnkpXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDcyMjpcXHRcXHRcXHRcXHRlbnRyeS1cXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9WTEFOX1BPUDtcXG4gNzIzOlxcdFxcdFxcdH1cXG4gNzI0OlxcdFxcdH1cXG4gNzI1OlxcdFxcbiA3MjY6XFx0XFx0b3RoZXJfdHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb3RoZXJfdHVwbGUtXFx1MDAzZWVuY2FwX251bTsgaSsrKSB7XFxuIDcyOTpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzowOS4yMjAzNDIyOTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUwODMzNDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEZsb3cgUnVsZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGZsb3dfcnVsZWAgaW5zdGFuY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBhbGxvY2F0aW9uIGNhbGxzLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3Igd2hlcmUgYG5mX2Zsb3dfb2ZmbG9hZF9hbGxvY2Ag4oCTIG9yIHNvbWV0aGluZyB3aXRoIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbiDigJMgaXMgYmVpbmcgdXNlZC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5LCBvciBhdCBsZWFzdCBhIG1ham9yIGNvbnRyaWJ1dG9yLiBXaGVyZSBhcmUgd2UgZ2V0dGluZyB0aGVzZSBgZmxvd19ydWxlYCBzdHJ1Y3R1cmVzIGZyb20/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VlIHdoYXQgdGhlIGFsbG9jYXRpb24gbGFuZHNjYXBlIGxvb2tzIGxpa2UgZm9yIHRoZXNlIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MTAuNzI4Njc5NzUxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIwNzMzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODQtXFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NTQ9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzU3LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc1ODpcXHRpZiAobmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTktXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03ODM9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzg2LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4NzpcXHRpZiAobmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03ODgtXFx0XFx0cmV0dXJuIC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoxMC45OTA3NjA0NDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3Mjc2MDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmbG93IHJ1bGUgYWN0aW9uIGVudHJpZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgY291bnRpbmcgYW5kIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGBuZl9mbG93X29mZmxvYWRfYWxsb2NgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJJ2xsIG5lZWQgdG8gb3BlbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY2AgYW5kIGZvY3VzIG9uIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIGhvdyB0aGlzIGNydWNpYWwgYWxsb2NhdGlvbiBoYXBwZW5zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjEyLjU2MzUyMjg0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZMT1dfT0ZGTE9BRF9ESVJfTUFYOyBpKyspXFxuIDg3NjpcXHRcXHRcXHRfX25mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KGZsb3dfcnVsZVtpXSk7XFxuIDg3NzpcXHR9XFxuIDg3ODpcXHRcXG4gODc5OlxcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG4gODgwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGVbXSlcXG4gODgxOlxcdHtcXG4gODgyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHRmbG93X3J1bGVbMF0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXFxuIDg4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbiA4ODY6XFx0XFx0aWYgKCFmbG93X3J1bGVbMF0pXFxuIDg4NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODg4OlxcdFxcbiA4ODk6XFx0XFx0Zmxvd19ydWxlWzFdID0gbmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2MobmV0LCBvZmZsb2FkLFxcbiA4OTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG4gODkxOlxcdFxcdGlmICghZmxvd19ydWxlWzFdKSB7XFxuIDg5MjpcXHRcXHRcXHRfX25mX2Zsb3dfb2ZmbG9hZF9kZXN0cm95KGZsb3dfcnVsZVswXSk7XFxuIDg5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODk0OlxcdFxcdH1cXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0cmV0dXJuIDA7XFxuIDg5NzpcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9pbml0KHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvdyxcXG4gOTAwOlxcdFxcdFxcdFxcdFxcdCBfX2JlMTYgcHJvdG8sIGludCBwcmlvcml0eSxcXG4gOTAxOlxcdFxcdFxcdFxcdFxcdCBlbnVtIGZsb3dfY2xzX2NvbW1hbmQgY21kLFxcbiA5MDI6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbiA5MDM6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gOTA0OlxcdHtcXG4gOTA1OlxcdFxcdGNsc19mbG93LVxcdTAwM2Vjb21tb24ucHJvdG9jb2wgPSBwcm90bztcXG4gOTA2OlxcdFxcdGNsc19mbG93LVxcdTAwM2Vjb21tb24ucHJpbyA9IHByaW9yaXR5O1xcbiA5MDc6XFx0XFx0Y2xzX2Zsb3ctXFx1MDAzZWNvbW1vbi5leHRhY2sgPSBleHRhY2s7XFxuIDkwODpcXHRcXHRjbHNfZmxvdy1cXHUwMDNlY29tbWFuZCA9IGNtZDtcXG4gOTA5OlxcdFxcdGNsc19mbG93LVxcdTAwM2Vjb29raWUgPSAodW5zaWduZWQgbG9uZyl0dXBsZTtcXG4gOTEwOlxcdH1cXG4gOTExOlxcdFxcbiA5MTI6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbiA5MTM6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuIDkxNDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlLFxcbiA5MTU6XFx0XFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuIDkxNjpcXHRcXHRcXHRcXHRcXHQgaW50IHByaW9yaXR5LCBpbnQgY21kLFxcbiA5MTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmbG93X3N0YXRzICpzdGF0cyxcXG4gOTE4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja19jYl9saXN0KVxcbiA5MTk6XFx0e1xcbiA5MjA6XFx0XFx0c3RydWN0IGZsb3dfY2xzX29mZmxvYWQgY2xzX2Zsb3cgPSB7fTtcXG4gOTIxOlxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgZmxvd19ibG9ja19jYiAqYmxvY2tfY2I7XFxuIDkyMzpcXHRcXHRfX2JlMTYgcHJvdG8gPSBFVEhfUF9BTEw7XFxuIDkyNDpcXHRcXHRpbnQgZXJyLCBpID0gMDtcXG4gOTI1OlxcdFxcbiA5MjY6XFx0XFx0bmZfZmxvd19vZmZsb2FkX2luaXQoXFx1MDAyNmNsc19mbG93LCBwcm90bywgcHJpb3JpdHksIGNtZCxcXG4gOTI3OlxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLCBcXHUwMDI2ZXh0YWNrKTtcXG4gOTI4OlxcdFxcdGlmIChjbWQgPT0gRkxPV19DTFNfUkVQTEFDRSlcXG4gOTI5OlxcdFxcdFxcdGNsc19mbG93LnJ1bGUgPSBmbG93X3J1bGUtXFx1MDAzZXJ1bGU7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGRvd25fcmVhZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xcbiA5MzI6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19jYiwgYmxvY2tfY2JfbGlzdCwgbGlzdCkge1xcbiA5MzM6XFx0XFx0XFx0ZXJyID0gYmxvY2tfY2ItXFx1MDAzZWNiKFRDX1NFVFVQX0NMU0ZMT1dFUiwgXFx1MDAyNmNsc19mbG93LFxcbiA5MzQ6XFx0XFx0XFx0XFx0XFx0ICAgYmxvY2tfY2ItXFx1MDAzZWNiX3ByaXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoxMi41NjM2MzgyMjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2Njk2OTIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBib3VuY2VyLCBpZiB5b3Ugd2lsbCwgZm9yIG5ldyBvZmZsb2FkIHJ1bGVzIGluIHRoZSBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHN1YnN5c3RlbS4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbiBhdXRvbWF0aWNhbGx5OiB3aGF0IGRvZXMgaXQgKmRvKiwgd2hhdCBhcmUgdGhlICppbnB1dHMqLCB3aGF0IGFyZSB0aGUgKm91dHB1dHMqLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgKmZhaWx1cmUgcG9pbnRzKiBhbmQgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXM/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBhcm91bmQgYWxsb2NhdGlvbi4gTWVtb3J5IGFsbG9jYXRpb24sIG9idmlvdXNseSwgYnV0IGFsc28gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBydWxlIGRhdGFiYXNlIGFuZCBhbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJcyBpdCBwcm9wZXJseSBsb2NrZWQ/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGR1cmluZyBoaWdoLXJhdGUgcnVsZSBpbnNlcnRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBlbnN1cmluZyB0aGF0IGEgbmV3IGZsb3cgb2ZmbG9hZCBydWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBoYW5kbGluZyBhIHJ1bGUgc3RydWN0dXJlLCBwb3B1bGF0aW5nIGZpZWxkcyBiYXNlZCBvbiBpbnB1dCBwYXJhbWV0ZXJzLCBtYW5hZ2luZyByZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFzaCB0YWJsZSBvciBvdGhlciBpbmRleGluZyBtZWNoYW5pc21zIHVzZWQgdG8gb3B0aW1pemUgcnVsZSBsb29rdXAuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyBlcnJvcnMsIHRvby4gSG93IGFyZSBhbGxvY2F0aW9uIGZhaWx1cmVzIGRlYWx0IHdpdGg/IFdoYXQgYWJvdXQgaW52YWxpZCBpbnB1dHMgb3IgY29uZmxpY3RpbmcgcnVsZSBwYXJhbWV0ZXJzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjb3JuZXIgY2FzZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gZGV0YWlscyBzbyBJIGNhbiBkZXRlcm1pbmUgaG93IHdlbGwgdGhpcyBmdW5jdGlvbiBpcyBwZXJmb3JtaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI1NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MTUuMjMwNjA5NTM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk2MTczNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDg9c3RhdGljIHN0cnVjdCBuZl9mbG93X3J1bGUgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODA5Om5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgxMC1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTg3OT1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg4NDpcXHRmbG93X3J1bGVbMF0gPSBuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhuZXQsIG9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODg4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODg5OlxcdGZsb3dfcnVsZVsxXSA9IG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jKG5ldCwgb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg5MC1cXHRcXHRcXHRcXHRcXHRcXHQgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoxNS40MDAyMzE4MjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYzMjA0MjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIFRoZSBuYW1lIGl0c2VsZiwgYG5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jYCwgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24gb2YgYSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBmbG93IG9mZmxvYWRpbmcsIGxpa2VseSB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBkYXRhIHN0cnVjdHVyZSDigJMgcHJvYmFibHkgc29tZSBzb3J0IG9mIHJ1bGUgb3IgZGVzY3JpcHRvciDigJMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgcGFydGljdWxhciBmbG93IGZvciBoYXJkd2FyZSBvZmZsb2FkLiBXZeKAmXJlIG5vdCB0YWxraW5nIGFib3V0IGp1c3QgYW55IGRhdGEgc3RydWN0dXJlLCBidXQgb25lIHRoYXQncyBmdW5kYW1lbnRhbCB0byBwdXNoaW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBkb3duIHRvIHRoZSBOSUMuIFRoYXQncyB0aGUga2V5LiBXaGF0IGlzIGl0cyBkZXNpZ24/IFdoYXQgYXJlIHRoZSBrZXkgZWxlbWVudHMgaXQgbmVlZHMgdG8gaG9sZD9cbkkgd2FudCB0byBrbm93IGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIE5ldGZpbHRlciBvZmZsb2FkIGZyYW1ld29yay4gSG93IGRvZXMgdGhpcyBhbGxvY2F0aW9uIGhhcHBlbiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlPyBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdydzIGl0IG1hbmFnZWQgZm9yIGNvbmN1cnJlbmN5PyBXaGF0IG1lbW9yeSBwb29sIG9yIGFsbG9jYXRvciBpcyBiZWluZyB1c2VkPyBBbmQgd2hhdCdzIGdvaW5nIHRvIGJlIHRoZSBldmVudHVhbCByZWxlYXNlIGZ1bmN0aW9uLCBpdCdzIHR3aW4sIGFuZCB3aGF0IGFyZSB0aGUgaW1wb3J0YW50IGVsZW1lbnRzIG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGNhbGxlZD8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGFsc28gaW1wb3J0YW50LiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHRoaXMgYWxsb2NhdGlvbiB0byBmYWlsLCBhbmQgaG93IGFyZSB0aG9zZSBmYWlsdXJlcyBoYW5kbGVkPyBUaGUgdXN1YWwgc3R1ZmYuXG5UaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlc2lnbiBpc3N1ZXMgZW1lcmdlIOKAkyBob3cgZWZmaWNpZW50IGlzIHRoaXMgcHJvY2VzcywgYW5kIGhvdyBtdWNoIG92ZXJoZWFkIGRvZXMgdGhlIGFsbG9jYXRpb24gYWRkIHRvIHRoZSBvdmVyYWxsIG9mZmxvYWQgcGF0aD8gSXMgdGhpcyBkb25lIGF0IGZsb3cgY3JlYXRpb24gb3IgZHVyaW5nIHRoZSBkYXRhIHBhdGg/IExldCdzIGdldCBpbnRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjE5LjAzMjI3NjA4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwODpcXHRzdGF0aWMgc3RydWN0IG5mX2Zsb3dfcnVsZSAqXFxuIDgwOTpcXHRuZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIDgxMDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuIDgxMTpcXHRcXHRcXHRcXHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbiA4MTI6XFx0e1xcbiA4MTM6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlID0gb2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlO1xcbiA4MTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcXG4gODE1OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cgPSBvZmZsb2FkLVxcdTAwM2VmbG93O1xcbiA4MTY6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0ID0gTlVMTDtcXG4gODE3OlxcdFxcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZTtcXG4gODE4OlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRmbG93X3J1bGUgPSBremFsbG9jX29iaigqZmxvd19ydWxlKTtcXG4gODIxOlxcdFxcdGlmICghZmxvd19ydWxlKVxcbiA4MjI6XFx0XFx0XFx0Z290byBlcnJfZmxvdztcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0Zmxvd19ydWxlLVxcdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKE5GX0ZMT1dfUlVMRV9BQ1RJT05fTUFYKTtcXG4gODI1OlxcdFxcdGlmICghZmxvd19ydWxlLVxcdTAwM2VydWxlKVxcbiA4MjY6XFx0XFx0XFx0Z290byBlcnJfZmxvd19ydWxlO1xcbiA4Mjc6XFx0XFxuIDgyODpcXHRcXHRmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZW1hdGNoLmRpc3NlY3RvciA9IFxcdTAwMjZmbG93X3J1bGUtXFx1MDAzZW1hdGNoLmRpc3NlY3RvcjtcXG4gODI5OlxcdFxcdGZsb3dfcnVsZS1cXHUwMDNlcnVsZS1cXHUwMDNlbWF0Y2gubWFzayA9IFxcdTAwMjZmbG93X3J1bGUtXFx1MDAzZW1hdGNoLm1hc2s7XFxuIDgzMDpcXHRcXHRmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZW1hdGNoLmtleSA9IFxcdTAwMjZmbG93X3J1bGUtXFx1MDAzZW1hdGNoLmtleTtcXG4gODMxOlxcdFxcbiA4MzI6XFx0XFx0dHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxuIDgzMzpcXHRcXHRvdGhlcl90dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGU7XFxuIDgzNDpcXHRcXHRpZiAob3RoZXJfdHVwbGUtXFx1MDAzZXhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSClcXG4gODM1OlxcdFxcdFxcdG90aGVyX2RzdCA9IG90aGVyX3R1cGxlLVxcdTAwM2Vkc3RfY2FjaGU7XFxuIDgzNjpcXHRcXG4gODM3OlxcdFxcdGVyciA9IG5mX2Zsb3dfcnVsZV9tYXRjaChcXHUwMDI2Zmxvd19ydWxlLVxcdTAwM2VtYXRjaCwgdHVwbGUsIG90aGVyX2RzdCk7XFxuIDgzODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gODM5OlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfbWF0Y2g7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdGZsb3dfcnVsZS1cXHUwMDNlcnVsZS1cXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzID0gMDtcXG4gODQyOlxcdFxcdGlmIChmbG93dGFibGUtXFx1MDAzZXR5cGUtXFx1MDAzZWFjdGlvbihuZXQsIGZsb3csIGRpciwgZmxvd19ydWxlKSBcXHUwMDNjIDApXFxuIDg0MzpcXHRcXHRcXHRnb3RvIGVycl9mbG93X21hdGNoO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gZmxvd19ydWxlO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRlcnJfZmxvd19tYXRjaDpcXG4gODQ4OlxcdFxcdGtmcmVlKGZsb3dfcnVsZS1cXHUwMDNlcnVsZSk7XFxuIDg0OTpcXHRlcnJfZmxvd19ydWxlOlxcbiA4NTA6XFx0XFx0a2ZyZWUoZmxvd19ydWxlKTtcXG4gODUxOlxcdGVycl9mbG93OlxcbiA4NTI6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg1MzpcXHR9XFxuIDg1NDpcXHRcXG4gODU1OlxcdHN0YXRpYyB2b2lkIF9fbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbiA4NTY6XFx0e1xcbiA4NTc6XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcXG4gODU4OlxcdFxcdGludCBpO1xcbiA4NTk6XFx0XFxuIDg2MDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZmxvd19ydWxlLVxcdTAwM2VydWxlLVxcdTAwM2VhY3Rpb24ubnVtX2VudHJpZXM7IGkrKykge1xcbiA4NjE6XFx0XFx0XFx0ZW50cnkgPSBcXHUwMDI2Zmxvd19ydWxlLVxcdTAwM2VydWxlLVxcdTAwM2VhY3Rpb24uZW50cmllc1tpXTtcXG4gODYyOlxcdFxcdFxcdGlmIChlbnRyeS1cXHUwMDNlaWQgIT0gRkxPV19BQ1RJT05fUkVESVJFQ1QpXFxuIDg2MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0XFx0ZGV2X3B1dChlbnRyeS1cXHUwMDNlZGV2KTtcXG4gODY2OlxcdFxcdH1cXG4gODY3OlxcdFxcdGtmcmVlKGZsb3dfcnVsZS1cXHUwMDNlcnVsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjE5LjAzMjM3Mjc5OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA2ODQzOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBGbG93IFRhYmxlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBmbG93IHJ1bGUgYWxsb2NhdGlvbiBtZWNoYW5pc21zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmbG93X3J1bGVfYWxsb2NgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyB0aGUgbGluY2hwaW4gZm9yIGFsbG9jYXRpbmcgbmV3IGZsb3cgcnVsZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG51YW5jZXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHNjYWxhYmlsaXR5LiBJIGFsc28gd2FudCB0byB2ZXJpZnkgdGhlIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgYWN0aW9ucyB3ZSBzdXBwb3J0IHBlciBmbG93IHJ1bGUuIExldCBtZSBsb29rIHVwIGBORl9GTE9XX1JVTEVfQUNUSU9OX01BWGAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhY3Rpb24gbGltaXQuIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoZSBwbGFjZW1lbnQgb2YgYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgIHdpdGhpbiB0aGUgc3RydWN0dXJlLCBob3cgZG9lcyB0aGUgbGlua2VkIGxpc3Qgb2YgYWN0aW9ucyBiZWhhdmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzgwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoyMi4wMzkyMTg4NzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUyNzEwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfRkxPV19SVUxFX0FDVElPTl9NQVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjE4OiNkZWZpbmUgTkZfRkxPV19SVUxFX0FDVElPTl9NQVhcXHQyNFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIyMD1mbG93X2FjdGlvbl9lbnRyeV9uZXh0KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjI0OlxcdGlmICh1bmxpa2VseShmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcyBcXHUwMDNlPSBORl9GTE9XX1JVTEVfQUNUSU9OX01BWCkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMjUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTgwOT1uZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgyMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgyNDpcXHRmbG93X3J1bGUtXFx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoTkZfRkxPV19SVUxFX0FDVElPTl9NQVgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODI1LVxcdGlmICghZmxvd19ydWxlLVxcdTAwM2VydWxlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzoyMy42MzQ0OTg0NjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExOTY5Mzk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBvZiBGbG93IFJ1bGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsb3cgcnVsZXMgYXJlIGJlaW5nIGJyb3VnaHQgdG8gbGlmZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGZsb3dfcnVsZV9hbGxvY2AuIFRoYXQgZnVuY3Rpb24gaXMgY2xlYXJseSB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBiaXJ0aHBsYWNlIG9mIHRoZXNlIGVudHJpZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGR1cmluZyB0aGF0IGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHNldCB1cCByaWdodCBvZmYgdGhlIGJhdC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhbmQgb3B0aW1pemF0aW9uIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgc28gbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjI1Ljc1NDE5NTA1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjU1Nzk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbG93X3J1bGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9NzA5PXN0YXRpYyBpbnQgbmZwX2ZsX21lcmdlX2FjdGlvbnNfb2ZmbG9hZChzdHJ1Y3QgZmxvd19ydWxlICoqcnVsZXMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy03MjYtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM6NzI3OlxcdGFfcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhudW1fYWN0aW9ucyArIChudW1fcnVsZXMgLyAyKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmMtNzI4LVxcdGlmICghYV9ydWxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvY29ubnRyYWNrLmM9MTQ3OT1uZnBfZmxfY3RfZmxvd19lbnRyeSAqbmZwX2ZsX2N0X2FkZF9mbG93KHN0cnVjdCBuZnBfZmxfY3Rfem9uZV9lbnRyeSAqenQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL2Nvbm50cmFjay5jOjE0OTQ6XFx0ZW50cnktXFx1MDAzZXJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoZmxvdy1cXHUwMDNlcnVsZS1cXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci9jb25udHJhY2suYy0xNDk1LVxcdGlmICghZW50cnktXFx1MDAzZXJ1bGUpIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oPTQ0MT1zdHJ1Y3QgZmxvd19ydWxlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTQ0NS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaDo0NDY6c3RydWN0IGZsb3dfcnVsZSAqZmxvd19ydWxlX2FsbG9jKHVuc2lnbmVkIGludCBudW1fYWN0aW9ucyk7XFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtNDQ3LVxcbi0tXFxubmV0L2NvcmUvZmxvd19vZmZsb2FkLmMtOS1cXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYzoxMDpzdHJ1Y3QgZmxvd19ydWxlICpmbG93X3J1bGVfYWxsb2ModW5zaWduZWQgaW50IG51bV9hY3Rpb25zKVxcbm5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jLTExLXtcXG4tLVxcbm5ldC9jb3JlL2Zsb3dfb2ZmbG9hZC5jLTI3LX1cXG5uZXQvY29yZS9mbG93X29mZmxvYWQuYzoyODpFWFBPUlRfU1lNQk9MKGZsb3dfcnVsZV9hbGxvYyk7XFxubmV0L2NvcmUvZmxvd19vZmZsb2FkLmMtMjktXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM3MTc9ZXRodG9vbF9yeF9mbG93X3J1bGVfY3JlYXRlKGNvbnN0IHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlY19pbnB1dCAqaW5wdXQpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM3MjktXFx0LyogZXRodG9vbF9yeCBzdXBwb3J0cyBvbmx5IG9uZSBzaW5nbGUgYWN0aW9uIHBlciBydWxlLiAqL1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzczMDpcXHRmbG93LVxcdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKDEpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzczMS1cXHRpZiAoIWZsb3ctXFx1MDAzZXJ1bGUpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODA5PW5mX2Zsb3dfb2ZmbG9hZF9ydWxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODI0OlxcdGZsb3dfcnVsZS1cXHUwMDNlcnVsZSA9IGZsb3dfcnVsZV9hbGxvYyhORl9GTE9XX1JVTEVfQUNUSU9OX01BWCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MjUtXFx0aWYgKCFmbG93X3J1bGUtXFx1MDAzZXJ1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtOS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MTA6c3RhdGljIHN0cnVjdCBuZnRfZmxvd19ydWxlICpuZnRfZmxvd19ydWxlX2FsbG9jKGludCBudW1fYWN0aW9ucylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTE3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoxODpcXHRmbG93LVxcdTAwM2VydWxlID0gZmxvd19ydWxlX2FsbG9jKG51bV9hY3Rpb25zKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMTktXFx0aWYgKCFmbG93LVxcdTAwM2VydWxlKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9ODg9c3RydWN0IG5mdF9mbG93X3J1bGUgKm5mdF9mbG93X3J1bGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xMDctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjEwODpcXHRmbG93ID0gbmZ0X2Zsb3dfcnVsZV9hbGxvYyhudW1fYWN0aW9ucyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTEwOS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTQ1OT1zdGF0aWMgaW50IGZsX2h3X3JlcGxhY2VfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy00NjctXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo0Njg6XFx0Y2xzX2Zsb3dlci5ydWxlID0gZmxvd19ydWxlX2FsbG9jKHRjZl9leHRzX251bV9hY3Rpb25zKFxcdTAwMjZmLVxcdTAwM2VleHRzKSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy00NjktXFx0aWYgKCFjbHNfZmxvd2VyLnJ1bGUpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTI2Nzc9c3RhdGljIGludCBmbF9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNjkyLVxcdFxcdGNsc19mbG93ZXIucnVsZSA9XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyNjkzOlxcdFxcdFxcdGZsb3dfcnVsZV9hbGxvYyh0Y2ZfZXh0c19udW1fYWN0aW9ucyhcXHUwMDI2Zi1cXHUwMDNlZXh0cykpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjY5NC1cXHRcXHRpZiAoIWNsc19mbG93ZXIucnVsZSkge1xcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yNzYzPXN0YXRpYyBpbnQgZmxfaHdfY3JlYXRlX3RtcGx0KHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNzY4LVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mjc2OTpcXHRjbHNfZmxvd2VyLnJ1bGUgPSBmbG93X3J1bGVfYWxsb2MoMCk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNzcwLVxcdGlmICghY2xzX2Zsb3dlci5ydWxlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yODU3PXN0YXRpYyB2b2lkIGZsX3RtcGx0X3Jlb2ZmbG9hZChzdHJ1Y3QgdGNmX2NoYWluICpjaGFpbiwgYm9vbCBhZGQsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4NjItXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyODYzOlxcdGNsc19mbG93ZXIucnVsZSA9IGZsb3dfcnVsZV9hbGxvYygwKTtcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI4NjQtXFx0aWYgKCFjbHNfZmxvd2VyLnJ1bGUpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9ODQ9c3RhdGljIGludCBtYWxsX3JlcGxhY2VfaHdfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTkzLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYzo5NDpcXHRjbHNfbWFsbC5ydWxlID1cXHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXFx1MDAyNmhlYWQtXFx1MDAzZWV4dHMpKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtOTUtXFx0aWYgKCFjbHNfbWFsbC5ydWxlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTI3NT1zdGF0aWMgaW50IG1hbGxfcmVvZmZsb2FkKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBib29sIGFkZCwgZmxvd19zZXR1cF9jYl90ICpjYixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0yODUtXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjI4NjpcXHRjbHNfbWFsbC5ydWxlID1cXHRmbG93X3J1bGVfYWxsb2ModGNmX2V4dHNfbnVtX2FjdGlvbnMoXFx1MDAyNmhlYWQtXFx1MDAzZWV4dHMpKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjg3LVxcdGlmICghY2xzX21hbGwucnVsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MjcuMjE2NzU3Mzk2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQ1OTU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBGbG93IE9mZmxvYWQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGZsb3cgb2ZmbG9hZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L2NvcmUvZmxvd19vZmZsb2FkLmNgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB3aGVyZSB0aGUgcHJpbWFyeSBsb2dpYyBmb3Igb2ZmbG9hZGluZyBuZXR3b3JrIGZsb3dzIHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB0aGVyZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZGlmZmVyZW50IGFjdGlvbnMgdGhhdCBhcmUgcGVyZm9ybWVkIG9uY2UgYSBmbG93IGVudHJ5IG1hdGNoZXMsIHNvIEkgc2hvdWxkIGxvb2sgYXQgYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHRyYWNpbmcgdGhlIG9mZmxvYWQgcHJvY2Vzcy4gVGhlc2UgdHdvIHBvaW50cyB3aWxsIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSBhbmQgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjI5LjI1MTM1NjQwM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9mbG93X29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2Zsb3dfb2ZmbG9hZC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRzdHJ1Y3QgZmxvd19ydWxlICpmbG93X3J1bGVfYWxsb2ModW5zaWduZWQgaW50IG51bV9hY3Rpb25zKVxcbiAgMTE6XFx0e1xcbiAgMTI6XFx0XFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZTtcXG4gIDEzOlxcdFxcdGludCBpO1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHRydWxlID0ga3phbGxvY19mbGV4KCpydWxlLCBhY3Rpb24uZW50cmllcywgbnVtX2FjdGlvbnMpO1xcbiAgMTY6XFx0XFx0aWYgKCFydWxlKVxcbiAgMTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdHJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcyA9IG51bV9hY3Rpb25zO1xcbiAgMjA6XFx0XFx0LyogUHJlLWZpbGwgZWFjaCBhY3Rpb24gaHdfc3RhdHMgd2l0aCBET05UX0NBUkUuXFxuICAyMTpcXHRcXHQgKiBDYWxsZXIgY2FuIG92ZXJyaWRlIHRoaXMgaWYgaXQgd2FudHMgc3RhdHMgZm9yIGEgZ2l2ZW4gYWN0aW9uLlxcbiAgMjI6XFx0XFx0ICovXFxuICAyMzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2FjdGlvbnM7IGkrKylcXG4gIDI0OlxcdFxcdFxcdHJ1bGUtXFx1MDAzZWFjdGlvbi5lbnRyaWVzW2ldLmh3X3N0YXRzID0gRkxPV19BQ1RJT05fSFdfU1RBVFNfRE9OVF9DQVJFO1xcbiAgMjU6XFx0XFxuICAyNjpcXHRcXHRyZXR1cm4gcnVsZTtcXG4gIDI3OlxcdH1cXG4gIDI4OlxcdEVYUE9SVF9TWU1CT0woZmxvd19ydWxlX2FsbG9jKTtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF9hY3Rpb24gKm9mZmxvYWRfYWN0aW9uX2FsbG9jKHVuc2lnbmVkIGludCBudW1fYWN0aW9ucylcXG4gIDMxOlxcdHtcXG4gIDMyOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfYWN0aW9uICpmbF9hY3Rpb247XFxuICAzMzpcXHRcXHRpbnQgaTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ZmxfYWN0aW9uID0ga3phbGxvY19mbGV4KCpmbF9hY3Rpb24sIGFjdGlvbi5lbnRyaWVzLCBudW1fYWN0aW9ucyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjI5LjI1MTQzMTYzM1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjM5MTc1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZl9mbG93X3RhYmxlX29mZmxvYWQuYyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyB3aXRoaW4gYGZsb3dfYWN0aW9uX2VudHJ5X25leHRgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGhvdyB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IG9mZmxvYWRlZC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IGl0IGhhbmRsZXMgdGhlIFwibmV4dFwiIHN0YXRlIG9yIGFjdGlvbiBmb3IgYSBnaXZlbiBmbG93IGVudHJ5LiBJcyBpdCBhIHN0YXRlIG1hY2hpbmU/IERvZXMgaXQgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYWNrZXQgc2hvdWxkIGJlIHNlbnQgbmV4dCwgcGVyaGFwcyBiYXNlZCBvbiBvZmZsb2FkIGNhcGFiaWxpdGllcyBvciB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXRlPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgZ3JlcHBpbmcgZm9yIGNhbGxzIHRvIGBmbG93X2FjdGlvbl9lbnRyeV9uZXh0YCB0byBnZXQgYW4gaWRlYSBvZiB3aGVyZSBpdCdzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBzdXJyb3VuZHMgaXQuIFRoZW4sIEknbGwgZXhhbWluZSB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBmbG93IGNvbnRyb2wgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBzZWUgaG93IGZsb3cgc3RhdGUgaXMgYWN0dWFsbHkgbWFuYWdlZCB3aXRoaW4gdGhlIG9mZmxvYWQgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBvdmVyYWxsIG9mZmxvYWQgbWVjaGFuaXNtLCBlc3BlY2lhbGx5IGluIHRlcm1zIG9mIGhhcmR3YXJlIG9mZmxvYWQgdmVyc3VzIHNvZnR3YXJlIGZhbGxiYWNrIHNjZW5hcmlvcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIFwibmV4dFwiIGFjdGlvbiBpcyBjb21tdW5pY2F0ZWQgdG8gdGhlIGhhcmR3YXJlIGFuZCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgaXMgdW5hYmxlIHRvIHBlcmZvcm0gdGhhdCBhY3Rpb24gZm9yIHNvbWUgcmVhc29uLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZWl0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MzEuODkwNjEwMjgxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdFxcdG1lbWNweShcXHUwMDI2ZW50cnktXFx1MDAzZW1hbmdsZS5tYXNrLCBtYXNrLCBzaXplb2YodTMyKSk7XFxuIDIxNjpcXHRcXHRtZW1jcHkoXFx1MDAyNmVudHJ5LVxcdTAwM2VtYW5nbGUudmFsLCB2YWx1ZSwgc2l6ZW9mKHUzMikpO1xcbiAyMTc6XFx0fVxcbiAyMTg6XFx0XFxuIDIxOTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqXFxuIDIyMDpcXHRmbG93X2FjdGlvbl9lbnRyeV9uZXh0KHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG4gMjIxOlxcdHtcXG4gMjIyOlxcdFxcdGludCBpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAodW5saWtlbHkoZmxvd19ydWxlLVxcdTAwM2VydWxlLVxcdTAwM2VhY3Rpb24ubnVtX2VudHJpZXMgXFx1MDAzZT0gTkZfRkxPV19SVUxFX0FDVElPTl9NQVgpKVxcbiAyMjU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdGkgPSBmbG93X3J1bGUtXFx1MDAzZXJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcysrO1xcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRyZXR1cm4gXFx1MDAyNmZsb3dfcnVsZS1cXHUwMDNlcnVsZS1cXHUwMDNlYWN0aW9uLmVudHJpZXNbaV07XFxuIDIzMDpcXHR9XFxuIDIzMTpcXHRcXG4gMjMyOlxcdHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2V0aF9zcmMoc3RydWN0IG5ldCAqbmV0LFxcbiAyMzM6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gMjM0OlxcdFxcdFxcdFxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuIDIzNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxuIDIzNjpcXHR7XFxuIDIzNzpcXHRcXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5MCA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG4gMjM4OlxcdFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xcbiAyMzk6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGUsICp0aGlzX3R1cGxlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzozMS44OTA3MDgwNjFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4MzI5NzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gRmxvdyBBY3Rpb24gRW50cmllcyoqXG5cbk9rYXksIGxldCdzIGdldCByaWdodCB0byBpdC4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG9uIHRoZSBzYW1lIHBhZ2UgcmVnYXJkaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIGhlcmUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnlgLiBJIG5lZWQgdG8gcmV2aWV3IGFsbCBvZiBpdHMgbWVtYmVycywgZW5zdXJlIHRoYXQgSSBoYXZlIHRoZSBjb3JyZWN0IHVuZGVyc3RhbmRpbmcgb2YgZWFjaCBmaWVsZCBhbmQgdGhhdCBJIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgc3RydWN0dXJlIGNvcnJlY3RseSB1bmRlcnN0b29kLiBUaGlzIHN0cnVjdCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIHRoZSB3YXkgdGhpcyB3aG9sZSBzeXN0ZW0gb3BlcmF0ZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXQgY29tcGxldGVseSBpcyBub3Qgb3B0aW9uYWwuIEl0IG1pZ2h0IHNlZW0gbGlrZSBhIHNpbXBsZSBzdGVwLCBidXQgSSd2ZSBsZWFybmVkIHRoYXQgYSBzb2xpZCBmb3VuZGF0aW9uIGhlcmUgc2F2ZXMgaG91cnMgb2YgZGVidWdnaW5nIGxhdGVyIG9uLiBTbywgbGV0J3MgY29uZmlybSB0aGUgZGVmaW5pdGlvbiBhbmQgZ2V0IHN0YXJ0ZWQgZnJvbSBhIHNvbGlkIHBvc2l0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MzQuMDc0MDA3OTE2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA2NzAzNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaD0yMzQ9c3RydWN0IGZsb3dfYWN0aW9uX3BvbGljZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yNDgtXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg6MjQ5OnN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSB7XFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgtMjUwLVxcdGVudW0gZmxvd19hY3Rpb25faWRcXHRcXHRpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6MzYuMTgwNzE4MjEyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzIxMzA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gRmxvdyBPZmZsb2FkKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBvZmZsb2FkIHNpdHVhdGlvbiBiZXR0ZXIsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgb3ZlciB0byBgaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmhgLCBhbmQgSSBmaWd1cmUgbGluZSAyNDkgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGllIHRoZXJlLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBob2xkcyBzb21lIGtleSBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyBhd2FpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozNzozOC4xMTI4NTE0MzFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdFxcdHUzMiBleHR2YWw7XFxuIDI0NjpcXHRcXHR9IGV4Y2VlZCwgbm90ZXhjZWVkO1xcbiAyNDc6XFx0fTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5IHtcXG4gMjUwOlxcdFxcdGVudW0gZmxvd19hY3Rpb25faWRcXHRcXHRpZDtcXG4gMjUxOlxcdFxcdHUzMlxcdFxcdFxcdFxcdGh3X2luZGV4O1xcbiAyNTI6XFx0XFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGNvb2tpZTtcXG4gMjUzOlxcdFxcdHU2NFxcdFxcdFxcdFxcdG1pc3NfY29va2llO1xcbiAyNTQ6XFx0XFx0ZW51bSBmbG93X2FjdGlvbl9od19zdGF0c1xcdGh3X3N0YXRzO1xcbiAyNTU6XFx0XFx0YWN0aW9uX2Rlc3RyXFx0XFx0XFx0ZGVzdHJ1Y3RvcjtcXG4gMjU2OlxcdFxcdHZvaWRcXHRcXHRcXHRcXHQqZGVzdHJ1Y3Rvcl9wcml2O1xcbiAyNTc6XFx0XFx0dW5pb24ge1xcbiAyNTg6XFx0XFx0XFx0dTMyXFx0XFx0XFx0Y2hhaW5faW5kZXg7XFx0LyogRkxPV19BQ1RJT05fR09UTyAqL1xcbiAyNTk6XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqZGV2O1xcdFxcdC8qIEZMT1dfQUNUSU9OX1JFRElSRUNUICovXFxuIDI2MDpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX1ZMQU4gKi9cXG4gMjYxOlxcdFxcdFxcdFxcdHUxNlxcdFxcdHZpZDtcXG4gMjYyOlxcdFxcdFxcdFxcdF9fYmUxNlxcdFxcdHByb3RvO1xcbiAyNjM6XFx0XFx0XFx0XFx0dThcXHRcXHRwcmlvO1xcbiAyNjQ6XFx0XFx0XFx0fSB2bGFuO1xcbiAyNjU6XFx0XFx0XFx0c3RydWN0IHtcXHRcXHRcXHRcXHQvKiBGTE9XX0FDVElPTl9WTEFOX1BVU0hfRVRIICovXFxuIDI2NjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyIGRzdFtFVEhfQUxFTl07XFxuIDI2NzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyIHNyY1tFVEhfQUxFTl07XFxuIDI2ODpcXHRcXHRcXHR9IHZsYW5fcHVzaF9ldGg7XFxuIDI2OTpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX01BTkdMRSAqL1xcbiAyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogRkxPV19BQ1RJT05fQUREICovXFxuIDI3MTpcXHRcXHRcXHRcXHRlbnVtIGZsb3dfYWN0aW9uX21hbmdsZV9iYXNlIGh0eXBlO1xcbiAyNzI6XFx0XFx0XFx0XFx0dTMyXFx0XFx0b2Zmc2V0O1xcbiAyNzM6XFx0XFx0XFx0XFx0dTMyXFx0XFx0bWFzaztcXG4gMjc0OlxcdFxcdFxcdFxcdHUzMlxcdFxcdHZhbDtcXG4gMjc1OlxcdFxcdFxcdH0gbWFuZ2xlO1xcbiAyNzY6XFx0XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvXFx0KnR1bm5lbDtcXHQvKiBGTE9XX0FDVElPTl9UVU5ORUxfRU5DQVAgKi9cXG4gMjc3OlxcdFxcdFxcdHUzMlxcdFxcdFxcdGNzdW1fZmxhZ3M7XFx0LyogRkxPV19BQ1RJT05fQ1NVTSAqL1xcbiAyNzg6XFx0XFx0XFx0dTMyXFx0XFx0XFx0bWFyaztcXHRcXHQvKiBGTE9XX0FDVElPTl9NQVJLICovXFxuIDI3OTpcXHRcXHRcXHR1MTYgICAgICAgICAgICAgICAgICAgICBwdHlwZTsgICAgICAgICAgLyogRkxPV19BQ1RJT05fUFRZUEUgKi9cXG4gMjgwOlxcdFxcdFxcdHUxNlxcdFxcdFxcdHJ4X3F1ZXVlO1xcdC8qIEZMT1dfQUNUSU9OX1JYX1FVRVVFX01BUFBJTkcgKi9cXG4gMjgxOlxcdFxcdFxcdHUzMlxcdFxcdFxcdHByaW9yaXR5O1xcdC8qIEZMT1dfQUNUSU9OX1BSSU9SSVRZICovXFxuIDI4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX1FVRVVFICovXFxuIDI4MzpcXHRcXHRcXHRcXHR1MzJcXHRcXHRjdHg7XFxuIDI4NDpcXHRcXHRcXHRcXHR1MzJcXHRcXHRpbmRleDtcXG4gMjg1OlxcdFxcdFxcdFxcdHU4XFx0XFx0dmY7XFxuIDI4NjpcXHRcXHRcXHR9IHF1ZXVlO1xcbiAyODc6XFx0XFx0XFx0c3RydWN0IHtcXHRcXHRcXHRcXHQvKiBGTE9XX0FDVElPTl9TQU1QTEUgKi9cXG4gMjg4OlxcdFxcdFxcdFxcdHN0cnVjdCBwc2FtcGxlX2dyb3VwXFx0KnBzYW1wbGVfZ3JvdXA7XFxuIDI4OTpcXHRcXHRcXHRcXHR1MzJcXHRcXHRcXHRyYXRlO1xcbiAyOTA6XFx0XFx0XFx0XFx0dTMyXFx0XFx0XFx0dHJ1bmNfc2l6ZTtcXG4gMjkxOlxcdFxcdFxcdFxcdGJvb2xcXHRcXHRcXHR0cnVuY2F0ZTtcXG4gMjkyOlxcdFxcdFxcdH0gc2FtcGxlO1xcbiAyOTM6XFx0XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX3BvbGljZSBwb2xpY2U7XFx0LyogRkxPV19BQ1RJT05fUE9MSUNFICovXFxuIDI5NDpcXHRcXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX0NUICovXFxuIDI5NTpcXHRcXHRcXHRcXHRpbnQgYWN0aW9uO1xcbiAyOTY6XFx0XFx0XFx0XFx0dTE2IHpvbmU7XFxuIDI5NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlO1xcbiAyOTg6XFx0XFx0XFx0fSBjdDtcXG4gMjk5OlxcdFxcdFxcdHN0cnVjdCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjM4LjExMjkzNzU5MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDU0OTYzNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGTE9XX0FDVElPTl9QUklPUklUWSBVc2FnZSBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UgYWNyb3NzIGRpZmZlcmVudCBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zLCBzbyBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCB0aGUgcGF0Y2ggbm90ZXMuIEkgc2VlIHRoYXQgdGhlIGBhaXJvaGFfcHBlYCBhbmQgYG10a19wcGVfb2ZmbG9hZGAgZHJpdmVycyBhcmUgaGFuZGxpbmcgdGhpcyB3aXRoIGEgc2ltcGxlIGBjYXNlYCBzdGF0ZW1lbnQgYW5kIGBicmVha2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMuXG5cbk5vdywgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIEkgc2VlIHRoYXQgaWYgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIGhhcyBhIHZhbHVlLCB0aGV5IGFyZSBzZXR0aW5nIHRoZSBgc2tiLVx1MDAzZXByaW9yaXR5YC4gT2theSwgaW50ZXJlc3RpbmcuIEFuZCwgdGhlIHJldmVyc2UgaXMgaGFwcGVuaW5nIGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCB3aGVyZSB0aGV5J3JlIHRha2luZyBgcGt0LVx1MDAzZXNrYi1cdTAwM2Vwcmlvcml0eWAgYW5kIHNldHRpbmcgaXQgb24gdGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YC4gU2VlbXMgbGlrZSB3ZSdyZSBwYXNzaW5nIGl0IGJvdGggd2F5cy5cblxuVGhlbiwgdGhlcmUncyBgbmZfZmxvd190YWJsZV9vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgYSBsaXR0bGUgbW9yZSBjb21wbGV4LiBIZXJlLCBpZiBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgaXMgc2V0LCBhIGBmbG93X2FjdGlvbl9lbnRyeWAgaXMgcG9wdWxhdGVkIHdpdGggYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBhbmQgdGhlIGBmbG93LVx1MDAzZXByaW9yaXR5YCB2YWx1ZS4gVGhpcyBpcyBsaWtlbHkgaG93IHRoZSBwcmlvcml0eSBpcyBiZWluZyAqcGVyc2lzdGVkKiBvciAqYWN0ZWQgdXBvbiogaW4gdGhlIGZsb3cgdGFibGUgb2ZmbG9hZC4gTWFrZXMgc2Vuc2UuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXdoZXJlKiB0aGlzIGlzIHVzZWQuIEl0J3MgdGltZSB0byBsZXZlcmFnZSBteSBncmVwIHNraWxscy4gTGV0J3MgZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBGTE9XX0FDVElPTl9QUklPUklUWWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg3MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjQyLjE2NzkwMzYxNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTA2NjYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGTE9XX0FDVElPTl9QUklPUklUWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM9MTU3PXN0YXRpYyBpbnQga3N6OTQ3N19mbG93ZXJfcGFyc2VfYWN0aW9uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X3RjX2Zsb3dlci5jLTE3Ni1cXHRcXHRzd2l0Y2ggKGFjdC1cXHUwMDNlaWQpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfdGNfZmxvd2VyLmM6MTc3OlxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X3RjX2Zsb3dlci5jLTE3OC1cXHRcXHRcXHRpZiAoYWN0LVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlIEtTWjk0NzdfTUFYX1RDKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM9MjAyMT15dDkyMXhfYWNsX3J1bGVfZXh0X3BhcnNlX2Zsb3dfYWN0aW9uKHN0cnVjdCB5dDkyMXhfYWNsX3J1bGVfZXh0ICpydWxlZXh0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTIwNzYtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjIwNzc6XFx0XFx0Y2FzZSBGTE9XX0FDVElPTl9QUklPUklUWTpcXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtMjA3OC1cXHRcXHRcXHRpZiAoc2Vlbl9wcmlvcml0eSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMDg4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbG93X29mZmxvYWRfcmVwbGFjZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMTYzLVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTE2NDpcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTE2NS1cXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYz0yNzY9bXRrX2Zsb3dfb2ZmbG9hZF9yZXBsYWNlKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpmLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMzgwLVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjM4MTpcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTM4Mi1cXHRcXHRjYXNlIEZMT1dfQUNUSU9OX0NTVU06XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYz01OD1zdGF0aWMgaW50IG1seHN3X3NwX2Zsb3dlcl9wYXJzZV9hY3Rpb25zKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9mbG93ZXIuYy0yMTgtXFx0XFx0XFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2Zsb3dlci5jOjIxOTpcXHRcXHRjYXNlIEZMT1dfQUNUSU9OX1BSSU9SSVRZOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2Zsb3dlci5jLTIyMC1cXHRcXHRcXHRlcnIgPSBtbHhzd19zcF9hY2xfcnVsZWlfYWN0X3ByaW9yaXR5KG1seHN3X3NwLCBydWxlaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X2Zsb3dlci5jPTI1Nz1zdGF0aWMgaW50IG9jZWxvdF9mbG93ZXJfcGFyc2VfYWN0aW9uKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCwgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9mbG93ZXIuYy00NjUtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmxvd2VyLmM6NDY2OlxcdFxcdGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFk6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmxvd2VyLmMtNDY3LVxcdFxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZWJsb2NrX2lkICE9IFZDQVBfSVMxKSB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaD0xNTA9ZW51bSBmbG93X2FjdGlvbl9pZCB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0xNjgtXFx0RkxPV19BQ1RJT05fUFRZUEUsXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg6MTY5OlxcdEZMT1dfQUNUSU9OX1BSSU9SSVRZLFxcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTE3MC1cXHRGTE9XX0FDVElPTl9SWF9RVUVVRV9NQVBQSU5HLFxcbi0tXFxuaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmg9MjQ5PXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL25ldC9mbG93X29mZmxvYWQuaC0yODAtXFx0XFx0dTE2XFx0XFx0XFx0cnhfcXVldWU7XFx0LyogRkxPV19BQ1RJT05fUlhfUVVFVUVfTUFQUElORyAqL1xcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oOjI4MTpcXHRcXHR1MzJcXHRcXHRcXHRwcmlvcml0eTtcXHQvKiBGTE9XX0FDVElPTl9QUklPUklUWSAqL1xcbmluY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oLTI4Mi1cXHRcXHRzdHJ1Y3Qge1xcdFxcdFxcdFxcdC8qIEZMT1dfQUNUSU9OX1FVRVVFICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzA2OlxcdFxcdGVudHJ5LVxcdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1BSSU9SSVRZO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzA3LVxcdFxcdGVudHJ5LVxcdTAwM2Vwcmlvcml0eSA9IGZsb3ctXFx1MDAzZXByaW9yaXR5O1xcbi0tXFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmM9MzcwPXN0YXRpYyBpbnQgdGNmX3NrYmVkaXRfb2ZmbG9hZF9hY3Rfc2V0dXAoc3RydWN0IHRjX2FjdGlvbiAqYWN0LCB2b2lkICplbnRyeV9kYXRhLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtMzgzLVxcdFxcdH0gZWxzZSBpZiAoaXNfdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KSkge1xcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjM4NDpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9QUklPUklUWTtcXG5uZXQvc2NoZWQvYWN0X3NrYmVkaXQuYy0zODUtXFx0XFx0XFx0ZW50cnktXFx1MDAzZXByaW9yaXR5ID0gdGNmX3NrYmVkaXRfcHJpb3JpdHkoYWN0KTtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jLTQwNy1cXHRcXHRlbHNlIGlmIChpc190Y2Zfc2tiZWRpdF9wcmlvcml0eShhY3QpKVxcbm5ldC9zY2hlZC9hY3Rfc2tiZWRpdC5jOjQwODpcXHRcXHRcXHRmbF9hY3Rpb24tXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fUFJJT1JJVFk7XFxubmV0L3NjaGVkL2FjdF9za2JlZGl0LmMtNDA5LVxcdFxcdGVsc2UgaWYgKGlzX3RjZl9za2JlZGl0X3J4X3F1ZXVlX21hcHBpbmcoYWN0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6NDMuNjA4OTc0NDYyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk0NTA2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGbG93IE9mZmxvYWQgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0cnVjdCBmbG93X29mZmxvYWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgaXRzIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhgLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcbnN0cnVjdCBmbG93X29mZmxvYWQge1xuXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoXHRcdHR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07XG5cdHN0cnVjdCBuZl9jb25uXHRcdFx0XHQqY3Q7XG5cdHVuc2lnbmVkIGxvbmdcdFx0XHRcdGZsYWdzO1xuXHR1MTZcdFx0XHRcdFx0dHlwZTtcblx0dTMyXHRcdFx0XHRcdHRpbWVvdXQ7XG5cdHUzMlx0XHRcdFx0XHRwcmlvcml0eTtcblx0c3RydWN0IHJjdV9oZWFkXHRcdFx0XHRyY3VfaGVhZDtcbn07XG5gYGBcblxuUmlnaHQsIHRoYXQgZ2l2ZXMgbWUgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrczogdGhlIHR1cGxlIGhhc2gsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHBvaW50ZXIsIHNvbWUgZmxhZ3MsIGEgdHlwZSwgdGltZW91dCwgcHJpb3JpdHkgYW5kIHRoZSBSQ1UgaGVhZC4gTm93IHRoZSBpbXBvcnRhbnQgcGFydCwgSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSBsb2NhdGlvbnMgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgY3JlYXRlZCwgY29waWVkLCB0cmFuc21pdHRlZCB0byB1c2VyIHNwYWNlLCBvciByZWFkIGZyb20uIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgY3J1Y2lhbCBsb2NhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6NDUuOTQ4NDI4Njk0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyMjUwNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmbG93X29mZmxvYWQgXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NTI9c3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNTUtXFx0aW50XFx0XFx0XFx0XFx0KCppbml0KShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo1NjpcXHRib29sXFx0XFx0XFx0XFx0KCpnYykoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC01Ny1cXHRpbnRcXHRcXHRcXHRcXHQoKnNldHVwKShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmdCxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtNjAtXFx0aW50XFx0XFx0XFx0XFx0KCphY3Rpb24pKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTYyLVxcdFxcdFxcdFxcdFxcdFxcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MTk0PWVudW0gZmxvd19vZmZsb2FkX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0xOTgtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDoxOTk6c3RydWN0IGZsb3dfb2ZmbG9hZCB7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yMDAtXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaFxcdFxcdHR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTIxMS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjIxMjp1bnNpZ25lZCBsb25nIGZsb3dfb2ZmbG9hZF9nZXRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTIxMy1cXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjE5PXN0cnVjdCBuZl9mbG93X3JvdXRlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQzLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ1OnZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDYtXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI4Nz1uZl9mbG93X3RhYmxlX29mZmxvYWRfZGVsX2NiKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMwNi1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMwNzp2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMDgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzA5LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzEwOmludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzExLXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMxMjpcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGJvb2wgZm9yY2UpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzEzLVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMzA9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzEtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMzI6dm9pZCBmbG93X29mZmxvYWRfdGVhcmRvd24oc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzMtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMzQ6dm9pZCBuZl9mbG93X3NuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzM1LVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzYtXFx0XFx0ICAgICAgIHU4IHByb3RvY29sLCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMzNzp2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMzgtXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzY4PXZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNjk6XFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzcwLXZvaWQgbmZfZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzcxOlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNzItdm9pZCBuZl9mbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM3MzpcXHRcXHRcXHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNzQtdm9pZCBuZl9mbG93X29mZmxvYWRfc3RhdHMoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6Mzc1OlxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzc2LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zODA9aW50IG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM4Mi1cXHRcXHRcXHRcXHRlbnVtIGZsb3dfYmxvY2tfY29tbWFuZCBjbWQpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzgzOmludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zODQtXFx0XFx0XFx0ICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zODUtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozODY6aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM4Ny1cXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0zNj1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDAtXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqbmZfZmxvd190YWJsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6NDE6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqbmZfZmxvdztcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIxPXN0YXRpYyB2b2lkXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMjpmbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTIzLVxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NTM6c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU0LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU1OlxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01Ni1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODc9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjk3OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTk4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTU3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTU4OnN0YXRpYyB2b2lkIG5mdF9mbG93X2RzdF9yZWxlYXNlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNTktXFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE2My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE2NDp2b2lkIGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNjUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE3MT1FWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfcm91dGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xNzItXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNzM6c3RhdGljIGlubGluZSBib29sIG5mX2Zsb3dfaGFzX2V4cGlyZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE3NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE3OD1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZml4dXBfdGNwKHN0cnVjdCBuZl9jb25uICpjdCwgdTggdGNwX3N0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yMDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2ZpeHVwX2N0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yMDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNTQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNTU6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3JvdXRlX3JlbGVhc2Uoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI1Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI2MC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI2MTp2b2lkIGZsb3dfb2ZmbG9hZF9mcmVlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zMDE9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zMDgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMDk6dW5zaWduZWQgbG9uZyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMxMC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMyNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjMyODppbnQgZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzI5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzYwPXZvaWQgZmxvd19vZmZsb2FkX3JlZnJlc2goc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM2MTpcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGJvb2wgZm9yY2UpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0zNjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0zODA9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2RlbChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzgxOlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM4Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTM5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjM5Mjp2b2lkIGZsb3dfb2ZmbG9hZF90ZWFyZG93bihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMzkzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDAxPWZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA0LVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQwNTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA2LVxcdGludCBkaXI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNj1uZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyNy1cXHRcXHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDI4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI5LVxcdFxcdCAgICAgIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQzMi1cXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGh0aTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQzMzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDM0LVxcdGludCBlcnIgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz00NjA9c3RhdGljIGJvb2wgbmZfZmxvd19jdXN0b21fZ2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQ2MTpcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDYyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTY4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1Njk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy01NzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02Mzk9c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY1MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY1Mjp2b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NTMtXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Njc2PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfc25hdF9wb3J0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY3ODp2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzktXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCB0aG9mZiwgdTggcHJvdG9jb2wsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcyOD1zdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjcyOTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz00NT1zdGF0aWMgaW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjQ2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00Ny1cXHRcXHRcXHRcXHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMjQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MjU6c3RhdGljIGludCBuZl9mbG93X3N0YXRlX2NoZWNrKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGludCBwcm90byxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9Njk9c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXBfbDRwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgzOnN0YXRpYyB2b2lkIG5mX2Zsb3dfc25hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDY6c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjk6c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXAoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMzAtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDczLVxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDc0OlxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDc1LVxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODAxPXN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODA3LVxcdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwODpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwOS1cXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTkyND1zdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2X2w0cHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKmlwNmgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MzctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTM4OnN0YXRpYyB2b2lkIG5mX2Zsb3dfc25hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTM5LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICppcDZoLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjk2MTpzdGF0aWMgdm9pZCBuZl9mbG93X2RuYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk2Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5ODQ6c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDY3PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA3Mi1cXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNzM6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDc0LVxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTEzMj1zdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMzktXFx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE0MDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExNDEtXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIzMj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfc3JjKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIzMzpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM0LVxcdFxcdFxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTI4Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfZHN0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjI4MzpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjg0LVxcdFxcdFxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM0Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MzQzOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM0NC1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM3Mz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Mzc0OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3NS1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQyMz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDI0OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNS1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ0OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDQ5OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ1MC1cXHRcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjQ3MzpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9sNHByb3RvKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00NzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00OTI9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjQ5MzpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00OTQtXFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01MjY9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjUyNzpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01MjgtXFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01NjA9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9jaGVja3N1bShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1NjE6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU2Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTU4NT1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9yZWRpcmVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1ODY6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01ODctXFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjYyNTpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9lbmNhcF90dW5uZWwoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNi1cXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY1NDpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9kZWNhcF90dW5uZWwoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1NS1cXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODM6bmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODQtXFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NTMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo3NTQ6aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc1NS1cXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NzgxPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc4Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc4MzppbnQgbmZfZmxvd19ydWxlX3JvdXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzg0LVxcdFxcdFxcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04MDk9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MTQtXFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgxNTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93ID0gb2ZmbG9hZC1cXHUwMDNlZmxvdztcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgxNi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpvdGhlcl9kc3QgPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05MTI9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTEzOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTE0LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwOTM9bmZfZmxvd19vZmZsb2FkX3dvcmtfYWxsb2Moc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTA5NDpcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB1bnNpZ25lZCBpbnQgY21kKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTA5NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMTQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTE1OnN0YXRpYyBib29sIG5mX2Zsb3dfb2ZmbG9hZF91bnN1cHBvcnRlZChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTExNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExMjQ9dm9pZCBuZl9mbG93X29mZmxvYWRfcmVmcmVzaChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTI1OlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExMjYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMTM2PXZvaWQgbmZfZmxvd19vZmZsb2FkX2FkZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTM3OlxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTEzOC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNDY9dm9pZCBuZl9mbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjExNDc6XFx0XFx0XFx0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTQ4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE1OT12b2lkIG5mX2Zsb3dfb2ZmbG9hZF9zdGF0cyhzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoxMTYwOlxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMTYxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01OC1cXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1OTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTYwLVxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9MjQ0PXN0YXRpYyBpbnQgdGNmX2N0X2Zsb3dfdGFibGVfZmlsbF9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MjQ1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjQ2LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIHRkaXIsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg3LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyODg6c3RhdGljIGJvb2wgdGNmX2N0X2Zsb3dfaXNfb3V0ZGF0ZWQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjg5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3QuYz0zOTc9c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGFibGVfcHV0KHN0cnVjdCB0Y2ZfY3RfZmxvd190YWJsZSAqY3RfZnQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNDA1LVxcbm5ldC9zY2hlZC9hY3RfY3QuYzo0MDY6c3RhdGljIHZvaWQgdGNmX2N0X2Zsb3dfdGNfaWZpZHgoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnksXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQwNy1cXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm5fYWN0X2N0X2V4dCAqYWN0X2N0X2V4dCwgdTggZGlyKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxMi1cXG5uZXQvc2NoZWQvYWN0X2N0LmM6NDEzOnN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X2N0X2V4dF9pZmlkeF91cGRhdGUoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnkpXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQxNC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmM9NDI0PXN0YXRpYyB2b2lkIHRjZl9jdF9mbG93X3RhYmxlX2FkZChzdHJ1Y3QgdGNmX2N0X2Zsb3dfdGFibGUgKmN0X2Z0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTQyOC1cXHRzdHJ1Y3QgbmZfY29ubl9hY3RfY3RfZXh0ICphY3RfY3RfZXh0O1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo0Mjk6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZW50cnk7XFxubmV0L3NjaGVkL2FjdF9jdC5jLTQzMC1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTY1OD1zdGF0aWMgYm9vbCB0Y2ZfY3RfZmxvd190YWJsZV9sb29rdXAoc3RydWN0IHRjZl9jdF9wYXJhbXMgKnAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjY3LVxcdGJvb2wgZm9yY2VfcmVmcmVzaCA9IGZhbHNlO1xcbm5ldC9zY2hlZC9hY3RfY3QuYzo2Njg6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG5uZXQvc2NoZWQvYWN0X2N0LmMtNjY5LVxcdHN0cnVjdCBuZl9jb25uICpjdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzc6NDcuNDgwNjg1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2NDQyOTA3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLCBidXQgSSB3YW50IHRvIGdldCBhIGNvbmNyZXRlIGdyYXNwIG9mIGhvdyB0aGUgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZXZhbHVhdGVkIGFuZCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIG9mZmxvYWQgaG9va3MsIHRoZSBydWxlIG1hdGNoaW5nLCBhbmQgdGhlIGFjdHVhbCBwYWNrZXQgaGFuZGxpbmcgbG9naWMuIEknbGwgbmVlZCB0byByZWFsbHkgcGFyc2UgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJuIHRoaXMgcHJvY2Vzcy4gVGhpcyB3aWxsIGhlbHAgbWUgZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQxNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjU3LjEyNDk3ODI0NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDU6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykpXFxuIDEwNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbiAxMDk6XFx0XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4gMTEwOlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xcbiAxMTM6XFx0XFx0aWYgKCFmbG93KVxcbiAxMTQ6XFx0XFx0XFx0Z290byBlcnJfZmxvd19hbGxvYztcXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXFx1MDAyNnJvdXRlKTtcXG4gMTE3OlxcdFxcdGlmICh0Y3BoKVxcbiAxMTg6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdC8qIFRoZSBwYWNrZXRzIHRoZSBmbG93IGZvcndhcmRzIGluIGl0cyBwbGFjZSBieXBhc3MgdGhlIHJ1bGVzIHRoYXRcXG4gMTIxOlxcdFxcdCAqIGNsYXNzaWZpZWQgdGhpcyBvbmU7IGNhcnJ5IHRoZSByZXN1bHQgd2l0aCB0aGUgZmxvdy5cXG4gMTIyOlxcdFxcdCAqL1xcbiAxMjM6XFx0XFx0Zmxvdy1cXHUwMDNlcHJpb3JpdHkgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJpb3JpdHk7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuIDEyNjpcXHRcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxuIDEyNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTI4OlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfYWRkO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRyZXR1cm47XFxuIDEzMTpcXHRcXG4gMTMyOlxcdGVycl9mbG93X2FkZDpcXG4gMTMzOlxcdFxcdGZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpO1xcbiAxMzQ6XFx0ZXJyX2Zsb3dfYWxsb2M6XFxuIDEzNTpcXHRcXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XFxuIDEzNjpcXHRcXHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xcbiAxMzc6XFx0ZXJyX2Zsb3dfcm91dGU6XFxuIDEzODpcXHRcXHRjbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cyk7XFxuIDEzOTpcXHRvdXQ6XFxuIDE0MDpcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuIDE0MTpcXHR9XFxuIDE0MjpcXHRcXG4gMTQzOlxcdHN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiAxNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM3OjU3LjEyNTA0OTQzNFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc2NTk2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDpcblxuKipBbmFseXppbmcgRmxvdyBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBJUHY0IGFuZCBJUHY2IGZvcndhcmRpbmcuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBsaWVzIGluIHRoZSBmdW5jdGlvbnMgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB0ZXJtcyBvZiBhY3R1YWxseSBmb3J3YXJkaW5nIHRoZSBvZmZsb2FkZWQgZmxvd3MuIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgZm9yd2FyZGluZyBkZWNpc2lvbiBhbmQgYWN0aW9ucyBhcmUgbWFkZS4gSSdtIGhvcGluZyB0byBkaXNjb3ZlciB0aGUga2V5IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjUwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODowMC45MDE2NDk0NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXG4gNTAxOlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XFxuIDUwNDpcXHRcXHR0aG9mZiAtPSBjdHgtXFx1MDAzZW9mZnNldDtcXG4gNTA1OlxcdFxcbiA1MDY6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuIDUwNzpcXHRcXHRuZl9mbG93X25hdF9pcChmbG93LCBza2IsIHRob2ZmLCBkaXIsIGlwaCk7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdGlwX2RlY3JlYXNlX3R0bChpcGgpO1xcbiA1MTA6XFx0XFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAoZmxvdy1cXHUwMDNlcHJpb3JpdHkpXFxuIDUxMzpcXHRcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gZmxvdy1cXHUwMDNlcHJpb3JpdHk7XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdGlmIChmbG93X3RhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKVxcbiA1MTY6XFx0XFx0XFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cXHUwMDNlY3QsIHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyLCBza2ItXFx1MDAzZWxlbik7XFxuIDUxNzpcXHRcXG4gNTE4OlxcdFxcdHJldHVybiAxO1xcbiA1MTk6XFx0fVxcbiA1MjA6XFx0XFxuIDUyMTpcXHQvKiBTaW1pbGFyIHRvIHNrYl92bGFuX3B1c2guICovXFxuIDUyMjpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfdmxhbl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bywgdTE2IGlkLFxcbiA1MjM6XFx0XFx0XFx0XFx0ICAgICB1MzIgbmVlZGVkX2hlYWRyb29tKVxcbiA1MjQ6XFx0e1xcbiA1MjU6XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gNTI2OlxcdFxcdFxcdHN0cnVjdCB2bGFuX2hkciAqdmhkcjtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSArIFZMQU5fSExFTikpXFxuIDUyOTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdFxcdF9fc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pO1xcbiA1MzI6XFx0XFx0XFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4gNTMzOlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciAtPSBWTEFOX0hMRU47XFxuIDUzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MDAuOTAxNzU3NTg0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjM5NTY5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSVB2NiBGbG93IE9mZmxvYWQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIG1vZHVsZS4gSSByZW1lbWJlciB3ZSB3ZXJlIGhhdmluZyBzb21lIGlzc3VlcyBhcm91bmQgbGluZSAxMTAwLCBzbyBsZXQncyBqdW1wIHJpZ2h0IHRoZXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBzb21ldGhpbmcgbWlnaHQgYmUgYW1pc3MsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBJUHY2IGZvcndhcmRpbmcgcGF0aC4gV2Uga25vdyB0aGUgY29tcGxleGl0aWVzIGhlcmUuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDY5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODowNS40NjU3MTY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTU6XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHRob2ZmICsgY3R4LVxcdTAwM2VoZHJzaXplKSlcXG4xMDk4OlxcdFxcdFxcdHJldHVybiAtMTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgZmFsc2UpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRuZl9mbG93X2VuY2FwX3BvcChjdHgsIHNrYiwgdHVwbGVoYXNoKTtcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuMTEwNTpcXHRcXHRuZl9mbG93X25hdF9pcHY2KGZsb3csIHNrYiwgZGlyLCBpcDZoKTtcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aXA2aC1cXHUwMDNlaG9wX2xpbWl0LS07XFxuMTEwODpcXHRcXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdGlmIChmbG93LVxcdTAwM2Vwcmlvcml0eSlcXG4xMTExOlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBmbG93LVxcdTAwM2Vwcmlvcml0eTtcXG4xMTEyOlxcdFxcbjExMTM6XFx0XFx0aWYgKGZsb3dfdGFibGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXFxuMTExNDpcXHRcXHRcXHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVxcdTAwM2VjdCwgdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXIsIHNrYi1cXHUwMDNlbGVuKTtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0cmV0dXJuIDE7XFxuMTExNzpcXHR9XFxuMTExODpcXHRcXG4xMTE5OlxcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG4xMTIwOlxcdG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbjExMjE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuMTEyMjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMTIzOlxcdHtcXG4xMTI0OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuMTEyNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MDUuNDY1ODEyNThaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUzODY2ODk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRkxPV19BQ1RJT05fUFJJT1JJVFkgaW4gRXRoZXJuZXQgT2ZmbG9hZCBEcml2ZXJzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jbHVzaW9uIG9mIGBGTE9XX0FDVElPTl9QUklPUklUWWAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlc2Ugc3BlY2lmaWMgZXRoZXJuZXQgb2ZmbG9hZCBkcml2ZXJzLCBgYWlyb2hhX3BwZS5jYCBhbmQgYG10a19wcGVfb2ZmbG9hZC5jYC4gTG9va2luZyBhdCB0aGUgZGlmZnMsIGl0J3MgY2xlYXIgdGhleSBib3RoIG5vdyBpbmNsdWRlIGEgYGNhc2UgRkxPV19BQ1RJT05fUFJJT1JJVFlgIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGBfcmVwbGFjZWAgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gc3VwcG9ydCBvciBhY2tub3dsZWRnZSBhIHByaW9yaXR5LXJlbGF0ZWQgZmxvdyBhY3Rpb24gZHVyaW5nIG9mZmxvYWQgcmVwbGFjZW1lbnQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHM/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGlzIGludHJvZHVjdGlvbiBwcmVzZW50cyBhbnkgb2J2aW91cyBidWdzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIGluIHRoZSBjb2RlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhhdCBhIG5ldyBgRkxPV19BQ1RJT05fUFJJT1JJVFlgIGNhc2UgbWlnaHQgbm90IGJlIGltcGxlbWVudGVkIGZ1bGx5IGV2ZXJ5d2hlcmUgaXQgbmVlZHMgdG8gYmUsIG9yIHRoYXQgdGhlIGN1cnJlbnQgaGFuZGxpbmcgb2YgdGhlIGBGTE9XX0FDVElPTl9QUklPUklUWWAgY2FzZSBtaWdodCBiZSBpbmNvbXBsZXRlLlxuXG5OZXh0LCBJJ2xsIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNoYW5nZSByaXBwbGVzIG91dC4gRG9lcyB0aGUgY2hhbmdlIHRvIHRoZXNlIHR3byBkcml2ZXJzIGhhdmUgaW1wbGljYXRpb25zIGluIG90aGVyIHJlbGF0ZWQgZXRoZXJuZXQgb2ZmbG9hZCBkcml2ZXJzPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBvciBhbnkgcG90ZW50aWFsIHJlbGF0ZWQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlbS5cblxuRmluYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB3ZSBoYW5kbGUgdW5rbm93biBhY3Rpb24gSURzIGNvcnJlY3RseS4gSG93IGRvIG90aGVyIGZsb3dlci9vZmZsb2FkIGRyaXZlcnMgZGVhbCB3aXRoIGZsb3cgYWN0aW9ucyB0aGV5IGRvbid0IGV4cGxpY2l0bHkgcmVjb2duaXplPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGdyYWNlZnVsbHkgaGFuZGxpbmcgYW55IGZsb3cgYWN0aW9ucyB3ZSBkb24ndCBmdWxseSBzdXBwb3J0IHNvIHRoYXQgd2UgZG9uJ3QgaW50cm9kdWNlIGluc3RhYmlsaXR5LiBUaGlzIGlzIGFib3V0IHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MTAuMDA0NDg1MDM3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgzODYxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmYXVsdDpcXFxccypyZXR1cm4gLUVPUE5PVFNVUFA7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jPTE2MjA9aW50IG12cHAyX2V0aHRvb2xfcnhmaF9zZXQoc3RydWN0IG12cHAyX3BvcnQgKnBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jLTE2NTItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9jbHMuYzoxNjUzOlxcdGRlZmF1bHQ6IHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX2Nscy5jLTE2NTQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODoxMC42MDI4NzU1NThaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1MjYwMzg3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmlzayBBc3Nlc3NtZW50IGZvciBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBmbG93IG9mZmxvYWQgcGF0Y2guIE15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggdGhlc2UgdHlwZXMgb2YgY2hhbmdlcywgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcGF0Y2ggaW5hZHZlcnRlbnRseSBjcmVhdGVzIGEgc2NlbmFyaW8gd2hlcmUga2VybmVsIGRhdGEsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZmxvdyBvZmZsb2FkLCBtaWdodCBiZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBiZWZvcmUgaXQncyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5NeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBsaWtlIGBmbG93X2FjdGlvbl9iYXNpY19od19zdGF0c190eXBlc19jaGVja2Agb3IgYW55IHNpbWlsYXIgcm91dGluZXMgdGhhdCBwbGF5IGEgcm9sZSBpbiBmbG93IG9mZmxvYWQuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUga2V5IGFyZWFzLiBUaGUgY3J1eCBvZiB0aGUgbWF0dGVyIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCwgaW4gYW55IHdheSwgaW1wYWN0cyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4cG9zdXJlIG9mIHJlbGV2YW50IGtlcm5lbCBkYXRhLlxuXG5Ob3csIGxldCdzIHN5c3RlbWF0aWNhbGx5IGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYS4gRmlyc3QgdXAsIHdlJ3JlIGxvb2tpbmcgZm9yIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgZ2V0IHNlbnQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNrYiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuIEFyZSB0aGVyZSBhbnkgbmV3IGNhbmRpZGF0ZXMgaW4gdGhpcyBwYXRjaD9cblxuSSdtIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHRoZSBgZmxvdy1cdTAwM2Vwcmlvcml0eWAgZmllbGQuIFdoaWxlIGBza2ItXHUwMDNlcHJpb3JpdHlgIGlzIHN0YW5kYXJkIGtlcm5lbCBtZXRhZGF0YSBhbmQgc2hvdWxkIGJlIGZpbmUsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGluIGFueSB3YXkuIE15IG5leHQgc3RlcCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgbmV0ZmlsdGVyIG5ldGxpbmsgaW50ZXJmYWNlcy4gRG9lcyBgY3RuZXRsaW5rYCwgYG5mdGFibGVzYCwgb3IgYW55IG90aGVyIHJlbGV2YW50IG5ldGxpbmsgY29kZSBleHBvc2UgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIG9yIGFueSBwYXJ0cyBvZiB0aGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIHN0cnVjdHVyZT8gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBuZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBgbmZfZmxvd190YWJsZV9uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IGRhdGEgZHVtcHMuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3JlIG5vdCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aHJvdWdoIGEgbmV0bGluayBhdHRyaWJ1dGUgb3Igc2ltaWxhciBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjM4OjMwLjEyODkxNjY2M1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NTAyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVxcdFxcdCs9IG5mdF9jdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXFx0Kz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcXHRcXHQrPSBuZnRfbGltaXQub1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTE3MT12b2lkIG5mdF9vZmZsb2FkX3VwZGF0ZV9kZXBlbmRlbmN5KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xODgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjE4OTpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2NvbW1vbl9pbml0KHN0cnVjdCBmbG93X2Nsc19jb21tb25fb2ZmbG9hZCAqY29tbW9uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0xOTAtXFx0XFx0XFx0XFx0XFx0IF9fYmUxNiBwcm90bywgaW50IHByaW9yaXR5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTI0Nj1zdGF0aWMgdm9pZCBuZnRfZmxvd19jbHNfb2ZmbG9hZF9zZXR1cChzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyNjA6XFx0bmZ0X2Zsb3dfb2ZmbG9hZF9jb21tb25faW5pdChcXHUwMDI2Y2xzX2Zsb3ctXFx1MDAzZWNvbW1vbiwgcHJvdG8sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2MS1cXHRcXHRcXHRcXHQgICAgIGJhc2VjaGFpbi1cXHUwMDNlb3BzLnByaW9yaXR5LCBleHRhY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MjY4OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF9jbWQoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI2OS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyODg6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX3J1bGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI4OS1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9ydWxlICpydWxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTI5NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6Mjk1OlxcdHJldHVybiBuZnRfZmxvd19vZmZsb2FkX2NtZChjaGFpbiwgcnVsZSwgZmxvdywgY29tbWFuZCwgXFx1MDAyNmNsc19mbG93KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjk2LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz0yOTg9aW50IG5mdF9mbG93X3J1bGVfc3RhdHMoY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzA0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzozMDU6XFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9jbWQoY2hhaW4sIHJ1bGUsIE5VTEwsIEZMT1dfQ0xTX1NUQVRTLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMDYtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmNsc19mbG93KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMTctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjMxODpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfYmluZChzdHJ1Y3QgZmxvd19ibG9ja19vZmZsb2FkICpibyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzE5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMjQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjMyNTpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfdW5iaW5kKHN0cnVjdCBmbG93X2Jsb2NrX29mZmxvYWQgKmJvLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zMjYtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MzUwPXN0YXRpYyBpbnQgbmZ0X2Jsb2NrX3NldHVwKHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTM1Ny1cXHRjYXNlIEZMT1dfQkxPQ0tfQklORDpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzU4OlxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfYmluZChibywgYmFzZWNoYWluKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMzU5LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zNjAtXFx0Y2FzZSBGTE9XX0JMT0NLX1VOQklORDpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6MzYxOlxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfdW5iaW5kKGJvLCBiYXNlY2hhaW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0zNjItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDA0PXN0YXRpYyB2b2lkIG5mdF9pbmRyX2Jsb2NrX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTQxOC1cXHRsaXN0X21vdmUoXFx1MDAyNmJsb2NrX2NiLVxcdTAwM2VsaXN0LCBcXHUwMDI2Ym8uY2JfbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjQxOTpcXHRuZnRfZmxvd19vZmZsb2FkX3VuYmluZChcXHUwMDI2Ym8sIGJhc2VjaGFpbik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTQyMC1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWNvbW1pdF9tdXRleCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NDU4PXN0YXRpYyBpbnQgbmZ0X2Zsb3dfYmxvY2tfY2hhaW4oc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNDk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo0OTc6c3RhdGljIGludCBuZnRfZmxvd19vZmZsb2FkX2NoYWluKHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLCB1OCAqcHBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNDk4LVxcdFxcdFxcdFxcdCAgZW51bSBmbG93X2Jsb2NrX2NvbW1hbmQgY21kKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzMS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTMyOlxcdFxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY2hhaW4obmZ0X3RyYW5zX2NoYWluKHRyYW5zKSwgTlVMTCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRkxPV19CTE9DS19VTkJJTkQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzOC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTM5OlxcdFxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY2hhaW4obmZ0X3RyYW5zX2NoYWluKHRyYW5zKSwgTlVMTCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0NjpcXHRcXHRcXHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX3J1bGUobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mdF90cmFuc19ydWxlKHRyYW5zKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU1NDpcXHRcXHRcXHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX3J1bGUobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mdF90cmFuc19ydWxlKHRyYW5zKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01NjY9aW50IG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9jb21taXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4My1cXHRcXHRcXHRwb2xpY3kgPSBuZnRfdHJhbnNfY2hhaW5fcG9saWN5KHRyYW5zKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg0OlxcdFxcdFxcdGVyciA9IG5mdF9mbG93X29mZmxvYWRfY2hhaW4obmZ0X3RyYW5zX2NoYWluKHRyYW5zKSwgXFx1MDAyNnBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRkxPV19CTE9DS19CSU5EKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTEtXFx0XFx0XFx0cG9saWN5ID0gbmZ0X3RyYW5zX2NoYWluX3BvbGljeSh0cmFucyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU5MjpcXHRcXHRcXHRlcnIgPSBuZnRfZmxvd19vZmZsb2FkX2NoYWluKG5mdF90cmFuc19jaGFpbih0cmFucyksIFxcdTAwMjZwb2xpY3ksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU5My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIEZMT1dfQkxPQ0tfVU5CSU5EKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MDMtXFx0XFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MDQ6XFx0XFx0XFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9ydWxlKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MTM6XFx0XFx0XFx0ZXJyID0gbmZ0X2Zsb3dfb2ZmbG9hZF9ydWxlKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZnRfdHJhbnNfcnVsZSh0cmFucyksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMDpzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjEtXFx0c3RydWN0IG5mdF9mbG93dGFibGVcXHQqZmxvd3RhYmxlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjQ6c3RhdGljIGJvb2wgbmZ0X2Zsb3dfb2ZmbG9hZF9za2lwKHN0cnVjdCBza19idWZmICpza2IsIGludCBmYW1pbHkpXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NDE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX2N0X3RjcChzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy00OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzo1MDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTUxLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNTMte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjU0OlxcdHN0cnVjdCBuZnRfZmxvd19vZmZsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy01NS1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZmxvd3RhYmxlLVxcdTAwM2VkYXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtNjMtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6NjQ6XFx0aWYgKG5mdF9mbG93X29mZmxvYWRfc2tpcChwa3QtXFx1MDAzZXNrYiwgbmZ0X3BmKHBrdCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTY1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTQyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE0MzpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNDQtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xNTUtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTU2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZmxvd19vZmZsb2FkX3BvbGljeVtORlRBX0ZMT1dfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTU3LVxcdFtORlRBX0ZMT1dfVEFCTEVfTkFNRV1cXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE2MTpzdGF0aWMgaW50IG5mdF9mbG93X29mZmxvYWRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE2Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTY0LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxNjU6XFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE2Ni1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXFx1MDAzZW5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xODQtXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTg1OnN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTE4Ni1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xODgte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE4OTpcXHRzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTkwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE5NDpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2FjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk1LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xOTYte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjE5NzpcXHRzdHJ1Y3QgbmZ0X2Zsb3dfb2ZmbG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTk4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIwMjpzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDMtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMDctXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjA4OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfb2ZmbG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjA5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjEwLXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMTE6XFx0c3RydWN0IG5mdF9mbG93X29mZmxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIxMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIyMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjI6c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjM6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjI0OlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyNTpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9mbG93X29mZmxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjY6XFx0LmV2YWxcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjc6XFx0LmluaXRcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMjg6XFx0LmFjdGl2YXRlXFx0PSBuZnRfZmxvd19vZmZsb2FkX2FjdGl2YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIyOTpcXHQuZGVhY3RpdmF0ZVxcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9kZWFjdGl2YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMDpcXHQuZGVzdHJveVxcdD0gbmZ0X2Zsb3dfb2ZmbG9hZF9kZXN0cm95LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMTpcXHQudmFsaWRhdGVcXHQ9IG5mdF9mbG93X29mZmxvYWRfdmFsaWRhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjMyOlxcdC5kdW1wXFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLX07XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzNTpzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjM2LVxcdC5uYW1lXFx0XFx0PSBcXFwiZmxvd19vZmZsb2FkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMzc6XFx0Lm9wc1xcdFxcdD0gXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzODpcXHQucG9saWN5XFx0XFx0PSBuZnRfZmxvd19vZmZsb2FkX3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzktXFx0Lm1heGF0dHJcXHQ9IE5GVEFfRkxPV19NQVgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yNTY9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjI2MDpzdGF0aWMgaW50IF9faW5pdCBuZnRfZmxvd19vZmZsb2FkX21vZHVsZV9pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjYxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyNjg6XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjY5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjc5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjI4MDpzdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfZXhpdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI4MS17XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjgyOlxcdG5mdF91bnJlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjgzLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI4NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyODY6bW9kdWxlX2luaXQobmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6Mjg3Om1vZHVsZV9leGl0KG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2V4aXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI4OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6Mzg6MzAuMTc3NDY4NjkzWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzQzNzc5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQWxsIENsZWFyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ3ZlIHJldmlld2VkIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byB0aGUgYHByaW9yaXR5YCBmaWVsZCB3aXRoaW4gdGhlIGZsb3cgb2ZmbG9hZCBzeXN0ZW0gYW5kIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIEtNU0FOIGNvbmNlcm5zLiBUaGUgaW5pdGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYGZsb3dfb2ZmbG9hZGAgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCBndWFyYW50ZWVzIHRoYXQgdGhlIGBwcmlvcml0eWAgZmllbGQgaXMgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBUaGVuLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCBleHBsaWNpdGx5IHNldHMgYGZsb3ctXHUwMDNlcHJpb3JpdHlgIGJhc2VkIG9uIHRoZSBwYWNrZXQncyBTS0IgcHJpb3JpdHkuIFRoaXMgaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdGhlbiByZWFkIGFuZCB1c2VkIHRvIHNldCB0aGUgU0tCIHByaW9yaXR5IGluIHRoZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucywgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGNvZGUgcGF0aCB0aGF0IHVzZXMgYGZsb3dfYWN0aW9uX2VudHJ5YCBvYnRhaW5lZCBmcm9tIGBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSlgIGFsc28gYXBwZWFycyBzYWZlLiBUaGUgYGZsb3dfcnVsZWAgaXRzZWxmIGlzIGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2NfZmxleGAgZHVyaW5nIGBmbG93X3J1bGVfYWxsb2NgLlxuXG5JIHNlZSB0aGF0IGRyaXZlciBoYW5kbGVycyBsaWtlIHRob3NlIGluIGBhaXJvaGFfcHBlLmNgIGFuZCBgbXRrX3BwZV9vZmZsb2FkLmNgIGV4cGxpY2l0bHkgYWNjb3VudCBmb3IgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBieSBhZGRpbmcgdGhlIGNhc2UgZm9yIHRoYXQgYWN0aW9uLCBlbGltaW5hdGluZyBwb3RlbnRpYWwgaXNzdWVzIG9mIGZhbGxpbmcgaW50byB0aGUgZGVmYXVsdCBjYXNlLlxuXG5JbiBlc3NlbmNlLCB0aGVyZSBhcmUgbm8gaWRlbnRpZmllZCBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCwgbm8gdW5jaGVja2VkIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBtYW5pcHVsYXRlIGxlbmd0aCBvciBib3VuZHMgaW4gYSB3YXkgdGhhdCB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGlzIHRob3JvdWdoIGFuYWx5c2lzLCBJIGFtIGNvbWZvcnRhYmxlIHdpdGggdGhlIGNvbmNsdXNpb24gdGhhdCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBmaW5kaW5ncywgYW5kIEkgYW0gcmVhZHkgdG8gcHJlcGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDc3LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozODozNC40NTE4NDk0MjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZmxvdyBwcmlvcml0eSB0cmFja2luZyB0byB0aGUgTmV0ZmlsdGVyIGZsb3d0YWJsZSBmYXN0cGF0aCBhbmQgb2ZmbG9hZCBzdWJzeXN0ZW0uIFxcbi0gU3RydWN0IGBmbG93X29mZmxvYWRgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGBmbG93X29mZmxvYWRfYWxsb2NgKSwgemVyb2luZyBhbGwgZmllbGRzIGluY2x1ZGluZyB0aGUgbmV3IGBwcmlvcml0eWAgZmllbGQuXFxuLSBUaGUgYGZsb3ctXFx1MDAzZXByaW9yaXR5YCBmaWVsZCBpcyBhc3NpZ25lZCBmcm9tIGBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJpb3JpdHlgIGluIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGFuZCBsYXRlciByZWFkIHRvIHNldCBgc2tiLVxcdTAwM2Vwcmlvcml0eWAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBvciBhZGRlZCBhcyBhIGBGTE9XX0FDVElPTl9QUklPUklUWWAgZmxvdyBhY3Rpb24gZW50cnkgaW4gYG5mX2Zsb3dfcnVsZV9yb3V0ZV9jb21tb25gLlxcbi0gRmxvdyBydWxlcyBhcmUgYWxsb2NhdGVkIHZpYSBgZmxvd19ydWxlX2FsbG9jYCB1c2luZyBga3phbGxvY19mbGV4YCwgZW5zdXJpbmcgYWxsIGFjdGlvbiBlbnRyaWVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLlxcbi0gTm8gdW5pbml0aWFsaXplZCBkYXRhLCBzdGFjay9oZWFwIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmbG93IHByaW9yaXR5IHRyYWNraW5nIHRvIHRoZSBOZXRmaWx0ZXIgZmxvd3RhYmxlIGZhc3RwYXRoIGFuZCBvZmZsb2FkIHN1YnN5c3RlbS4gXFxuLSBTdHJ1Y3QgYGZsb3dfb2ZmbG9hZGAgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCB6ZXJvaW5nIGFsbCBmaWVsZHMgaW5jbHVkaW5nIHRoZSBuZXcgYHByaW9yaXR5YCBmaWVsZC5cXG4tIFRoZSBgZmxvdy1cXHUwMDNlcHJpb3JpdHlgIGZpZWxkIGlzIGFzc2lnbmVkIGZyb20gYHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcmlvcml0eWAgaW4gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgYW5kIGxhdGVyIHJlYWQgdG8gc2V0IGBza2ItXFx1MDAzZXByaW9yaXR5YCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIG9yIGFkZGVkIGFzIGEgYEZMT1dfQUNUSU9OX1BSSU9SSVRZYCBmbG93IGFjdGlvbiBlbnRyeSBpbiBgbmZfZmxvd19ydWxlX3JvdXRlX2NvbW1vbmAuXFxuLSBGbG93IHJ1bGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBmbG93X3J1bGVfYWxsb2NgIHVzaW5nIGBremFsbG9jX2ZsZXhgLCBlbnN1cmluZyBhbGwgYWN0aW9uIGVudHJpZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIGRhdGEsIHN0YWNrL2hlYXAgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2lfv4[1] Phase: Succeeded StartedAt: 2026-09-03 12:38:45 +0000 UTC FinishedAt: 2026-09-03 12:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 12:38:45 +0000 UTC FinishedAt: 2026-09-03 12:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[2] Phase: Running StartedAt: 2026-09-03 12:38:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-03 12:38:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2lfv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 12:38:45 +0000 UTC FinishedAt: 2026-09-03 12:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 12:38:45 +0000 UTC FinishedAt: 2026-09-03 12:38:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2lfv4/series-workflow2lfv4-convert-artifact-3672634618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2lfv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Running StartedAt: 2026-09-03 12:38:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2lfv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Running StartedAt: 2026-09-03 12:38:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*29be1314-2a41-4528-8354-8ca8a4fa4d37,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-workflow2lfv4/series-workflow2lfv4-convert-artifact-3672634618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2lfv4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_flow_offload_eval","nf_flow_offload_forward","nf_flow_offload_ipv6_forward","nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nf_flow_rule_route_common","nf_flow_rule_route_ipv4","nf_flow_rule_route_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS"],"series_id":"b4e67ed6-75ba-4808-8d7c-9977a18a3669","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Running StartedAt: 2026-09-03 12:38:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*29be1314-2a41-4528-8354-8ca8a4fa4d37,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-workflow2lfv4/series-workflow2lfv4-convert-artifact-3672634618/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,}