Name: series-workflowhqshz Phase: Succeeded StartedAt: 2026-09-14 14:58:13 +0000 UTC FinishedAt: 2026-09-14 19:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[0] Phase: Succeeded StartedAt: 2026-09-14 14:58:13 +0000 UTC FinishedAt: 2026-09-14 16:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 14:58:13 +0000 UTC FinishedAt: 2026-09-14 16:05:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "IPV6", "AF_RXRPC_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "IPV6", "AF_RXRPC_IPV6" ], "series_id": "4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_encap_rcv", "rxrpc_io_thread", "rxrpc_skb_orphan_udp", "rxrpc_destroy_local", "rxrpc_open_socket", "rxrpc_lookup_local" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cbjMuIEJ1ZyBEZXRlY3RvciBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiAoYHNrX3JlY2VpdmVfcXVldWUubG9ja2ApLCBzb2NrZXQgcmVmZXJlbmNlIGxpZmVjeWNsZSAvIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgYWNjb3VudGluZyBlcnJvcnMsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChMT0NLREVQLCBLQVNBTiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsb2NhbCB0cmFuc3BvcnQgZW5kcG9pbnQgbWFuYWdlbWVudC4gSXQgaW1wbGVtZW50cyBybWVtIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgZm9yIHJlY2VpdmVkIGVuY2Fwc3VsYXRpb24gc2ticyBpbiByeHJwY19lbmNhcF9yY3YsIHNrYiBvcnBoYW5pbmcgdW5kZXIgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrIGluIHJ4cnBjX2lvX3RocmVhZCwgc2V0cyBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgbGltaXRzIGluIHJ4cnBjX29wZW5fc29ja2V0LCBhbmQgYWx0ZXJzIHNvY2tldCByZWxlYXNlIG9yZGVyaW5nIGFuZCBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIG5ldHdvcmtpbmcgZmFzdC1wYXRocywgd2FycmFudGluZyBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHNvY2tldCBhY2NvdW50aW5nIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMjBjYWM0YzBmMDY1MzM5NjNiYWYxMTU1YmIzMTZjOWYwMjlmYmY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTU6Mjk6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG5pbmRleCBkYzUxODRhMmZhOWQxLi5jNzcyNDFiMTJmNTk3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbkBAIC03LDEyICYjNDM7Nyw0OCBAQFxuIFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDthci1pbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqcGVlcl9zcngsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogRHJvcCBVRFAgcm1lbSBvd25lcnNoaXAgZm9yIHBhY2tldHMgY2hhcmdlZCBpbiBlbmNhcF9yY3YoKS5cbiYjNDM7ICogc2tfZm9yd2FyZF9hbGxvYyBpcyBzZXJpYWxpc2VkIGJ5IHNrX3JlY2VpdmVfcXVldWUubG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1xuJiM0MztcdGlmICghc2spXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdHNrYl9vcnBoYW4oc2tiKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTtcbiYjNDM7XG4mIzQzO1x0c2tfZHJvcHNfaW5jKHVkcF9zayk7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiYjNDM7XHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XG4mIzQzO1x0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XG4mIzQzO1x0fSBlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdHtcbiYjNDM7XHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfUkNWQlVGRVJST1JTKTtcbiYjNDM7XHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xuJiM0MztcdH1cbiYjNDM7XHRza19za2JfcmVhc29uX2Ryb3AodWRwX3NrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfUkNWQlVGRik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnRcbiAgKiAtIG1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHRcbkBAIC0yOCw2ICYjNDM7NjQsOCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyeF9xdWV1ZTtcbiBcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XG4mIzQzO1x0dW5zaWduZWQgaW50IHJjdmJ1ZjtcbiBcbiBcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTQxLDggJiM0Mzs3OSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gXHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuIFxuLVx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4tXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuIFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuQEAgLTUyLDYgJiM0Mzs4OCwyNCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gI2VuZGlmXG4gXG4mIzQzO1x0cmN2YnVmID0gUkVBRF9PTkNFKHVkcF9zay1cdTAwM2Vza19yY3ZidWYpO1xuJiM0MztcdGhlYWRyb29tID0gU0tCX1RSVUVTSVpFKFJYUlBDX0pVTUJPKDEpKSAqIDI7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdGlmICgodW5zaWduZWQgaW50KWF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSAmIzQzO1xuJiM0MztcdCAgICBza2ItXHUwMDNldHJ1ZXNpemUgJiM0MzsgaGVhZHJvb20gXHUwMDNlPSByY3ZidWYgfHxcbiYjNDM7XHQgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdFx0cnhycGNfZW5jYXBfcmN2X2Ryb3AodWRwX3NrLCBza2IpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlZGV2ID0gTlVMTDtcbiYjNDM7XHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdHNrYl9kc3RfZHJvcChza2IpO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbiYjNDM7XHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XG4gXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcbiBcdHJldHVybiAwO1xuQEAgLTQ3MSw2ICYjNDM7NTI1LDkgQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHQvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi9cbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnJ4X3F1ZXVlKSkpIHtcbiBcdFx0XHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc2tiLVx1MDAzZW1hcmsgPT0gUlhSUENfU0tCX01BUktfUEFDS0VUKVxuJiM0MztcdFx0XHRcdHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYik7XG4gXHRcdFx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuIFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxuIFx0XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjJmOTM4OTFlODQxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mID0gezB9O1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4gXHRzdHJ1Y3Qgc29jayAqdXNrO1xuJiM0MztcdHUzMiByY3ZidWY7XG4gXHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0OyVweyVkLCVkfVwmIzM0OyxcbkBAIC0xOTgsNiAmIzQzOzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdC8qIHNldCB0aGUgc29ja2V0IHVwICovXG4gXHR1c2sgPSBsb2NhbC1cdTAwM2Vzb2NrZXQtXHUwMDNlc2s7XG4mIzQzO1x0LyogT25lIGFkdmVydGlzZWQgb3JkaW5hcnktREFUQSB3aW5kb3csIG5vdCBqdW1iby1tYXguICovXG4mIzQzO1x0cmN2YnVmID0gcnhycGNfcnhfd2luZG93X3NpemUgKiBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcbiYjNDM7XHRyY3ZidWYgJiM0Mzs9IHJjdmJ1ZiAvIDQ7XG4mIzQzO1x0cmN2YnVmID0gY2xhbXAocmN2YnVmLCBSRUFEX09OQ0Uoc3lzY3RsX3JtZW1fZGVmYXVsdCksXG4mIzQzO1x0XHQgICAgICAgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX21heCkpO1xuJiM0MztcdFdSSVRFX09OQ0UodXNrLVx1MDAzZXNrX3JjdmJ1ZiwgcmN2YnVmKTtcbiBcdHVzay1cdTAwM2Vza19lcnJvcl9yZXBvcnQgPSByeHJwY19lcnJvcl9yZXBvcnQ7XG4gXG4gXHRzd2l0Y2ggKHNyeC1cdTAwM2V0cmFuc3BvcnQuZmFtaWx5KSB7XG5AQCAtNDM3LDggJiM0Mzs0NDQsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtXHUwMDNlc2ssIE5VTEwpO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiAmIzQzOzQ1NSwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNvY2tldClcbiYjNDM7XHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuJiM0MztcbiBcdHJ4cnBjX3B1cmdlX2NsaWVudF9jb25uZWN0aW9ucyhsb2NhbCk7XG4gXHRwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oXHUwMDI2bG9jYWwtXHUwMDNldHhfYWxsb2MpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTIwY2FjNGMwZjA2NTMzOTYzYmFmMTE1NWJiMzE2YzlmMDI5ZmJmNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDE1OjI5OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jCmluZGV4IGRjNTE4NGEyZmE5ZDEuLmM3NzI0MWIxMmY1OTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKQEAgLTcsMTIgJiM0Mzs3LDQ4IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKIHN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgICAgc3RydWN0IHNvY2thZGRyX3J4cnBjICpwZWVyX3NyeCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAomIzQzOy8qCiYjNDM7ICogRHJvcCBVRFAgcm1lbSBvd25lcnNoaXAgZm9yIHBhY2tldHMgY2hhcmdlZCBpbiBlbmNhcF9yY3YoKS4KJiM0MzsgKiBza19mb3J3YXJkX2FsbG9jIGlzIHNlcmlhbGlzZWQgYnkgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJc2tiX29ycGhhbihza2IpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTsKJiM0MzsKJiM0MzsJc2tfZHJvcHNfaW5jKHVkcF9zayk7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiYjNDM7CQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpOwomIzQzOwl9IGVsc2UKJiM0MzsjZW5kaWYKJiM0MzsJewomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7CiYjNDM7CX0KJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHVkcF9zaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnQKICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dApAQCAtMjgsNiAmIzQzOzY0LDggQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBza19idWZmX2hlYWQgKnJ4X3F1ZXVlOwogCXN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkcm9vbTsKJiM0MzsJdW5zaWduZWQgaW50IHJjdmJ1ZjsKIAogCWlmICh1bmxpa2VseSghbG9jYWwpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNDEsOCAmIzQzOzc5LDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7ODgsMjQgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CXJjdmJ1ZiA9IFJFQURfT05DRSh1ZHBfc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWhlYWRyb29tID0gU0tCX1RSVUVTSVpFKFJYUlBDX0pVTUJPKDEpKSAqIDI7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJaWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoJmFtcDt1ZHBfc2stJmd0O3NrX3JtZW1fYWxsb2MpICYjNDM7CiYjNDM7CSAgICBza2ItJmd0O3RydWVzaXplICYjNDM7IGhlYWRyb29tICZndDs9IHJjdmJ1ZiB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJCXJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKJiM0MzsJc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt1ZHBfc2stJmd0O3NrX3JlY2VpdmVfcXVldWUubG9jayk7CiYjNDM7CXNrYl9kc3RfZHJvcChza2IpOwomIzQzOwomIzQzOwlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7CiYjNDM7CXJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7CiAJc2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7CiAJd2FrZV91cF9wcm9jZXNzKGlvX3RocmVhZCk7CiAJcmV0dXJuIDA7CkBAIC00NzEsNiAmIzQzOzUyNSw5IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSkKIAkJLyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3J4X3F1ZXVlKSkpIHsKIAkJCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiLSZndDttYXJrID09IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVCkKJiM0MzsJCQkJcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi4yZjkzODkxZTg0MWFiIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmYgPSB7MH07CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiAJc3RydWN0IHNvY2sgKnVzazsKJiM0MzsJdTMyIHJjdmJ1ZjsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7JXB7JWQsJWR9JiMzNDssCkBAIC0xOTgsNiAmIzQzOzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldCkKIAogCS8qIHNldCB0aGUgc29ja2V0IHVwICovCiAJdXNrID0gbG9jYWwtJmd0O3NvY2tldC0mZ3Q7c2s7CiYjNDM7CS8qIE9uZSBhZHZlcnRpc2VkIG9yZGluYXJ5LURBVEEgd2luZG93LCBub3QganVtYm8tbWF4LiAqLwomIzQzOwlyY3ZidWYgPSByeHJwY19yeF93aW5kb3dfc2l6ZSAqIFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyOwomIzQzOwlyY3ZidWYgJiM0Mzs9IHJjdmJ1ZiAvIDQ7CiYjNDM7CXJjdmJ1ZiA9IGNsYW1wKHJjdmJ1ZiwgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX2RlZmF1bHQpLAomIzQzOwkJICAgICAgIFJFQURfT05DRShzeXNjdGxfcm1lbV9tYXgpKTsKJiM0MzsJV1JJVEVfT05DRSh1c2stJmd0O3NrX3JjdmJ1ZiwgcmN2YnVmKTsKIAl1c2stJmd0O3NrX2Vycm9yX3JlcG9ydCA9IHJ4cnBjX2Vycm9yX3JlcG9ydDsKIAogCXN3aXRjaCAoc3J4LSZndDt0cmFuc3BvcnQuZmFtaWx5KSB7CkBAIC00MzcsOCAmIzQzOzQ0NCw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NTUsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUlhSUEMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBMb29rcyBsaWtlIHdlIGhhdmUgc29tZSBuZXcgZnVuY3Rpb25zOiBgcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKWAgYW5kIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAuIEludGVyZXN0aW5nLiBBbHNvLCBgcnhycGNfZW5jYXBfcmN2YCBpcyBub3cgZG9pbmcgc29tZSBjaGVja3MgcmVsYXRlZCB0byBVRFAgcmVjZWl2ZSBidWZmZXIgYW5kIGBza19ybWVtX3NjaGVkdWxlYCwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3MgdXNpbmcgYHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zaylgLiBOb3csIEkgc2VlIHRoYXQgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIHdoZW4gYW4gU0tCIG1hcmtlZCBhcyBgUlhSUENfU0tCX01BUktfUEFDS0VUYCBpcyBkZXF1ZXVlZCwgaXQgY2FsbHMgdGhhdCBgcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKWAgZnVuY3Rpb24uIEFsc28sIGByeHJwY19vcGVuX3NvY2tldGAgaXMgc2V0dGluZyBgdXNrLSZndDtza19yY3ZidWZgLiBGaW5hbGx5LCBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSBjYXJlZnVsIGhhbmRsaW5nIG9mIGBza191c2VyX2RhdGFgIHVzaW5nIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgYW5kIGBzeW5jaHJvbml6ZV9yY3VgIGJlZm9yZSBjYWxsaW5nIGBzb2NrX3JlbGVhc2VgICphZnRlciogYHJ4cnBjX3B1cmdlX3F1ZXVlYC4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhpcyB0aHJvdWdoIHRoZSBsZW5zIG9mIG15IHRyaWFnZSBydWxlcy4gQmFzZWQgb24gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHksIGFjY2Vzc2liaWxpdHkgaXMga2V5LCBhbmQgYEFGX1JYUlBDYCBpcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0IGZhbWlseS4gVGhlcmVmb3JlLCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1ldGhvZHMuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIHNjb3BlLiBUaGlzIHBhdGNoIHRvdWNoZXMgY29yZSBzdWJzeXN0ZW1zOiBpdCBtb2RpZmllcyBgQUZfUlhSUENgLCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIGxvY2tpbmcsIHF1ZXVpbmcsIHRoZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBhbHNvIGBza191c2VyX2RhdGFgLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBpcyBoaWdobHkgcmVhY2hhYmxlIGFuZCBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzIHJlbGF0ZWQgdG8gYHNrX3JlY2VpdmVfcXVldWUubG9ja2AsIGBza19ybWVtX2FsbG9jYCwgYW5kIGBza2Jfb3JwaGFuYCwgYW5kIGxpZmVjeWNsZSBvZiB0aGUgbG9jYWwgc29ja2V0IG9iamVjdHMuIERlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBLY29uZmlnIG9wdGlvbnMgc2V0LiBUaW1lIHRvIHJ1biBhIHF1aWNrIGBncmVwcGVyYCBjaGVjayBvbiBgQUZfUlhSUENgIGluIGBLY29uZmlnYCB0byBzZWUgd2hhdCBkZXBlbmRzIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9SWFJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZy01LVxubmV0L3J4cnBjL0tjb25maWc6Njpjb25maWcgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBzZXNzaW9uIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZz0yNT1pZiBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctMjYtXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxubmV0L3J4cnBjL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgUnhSUENcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cbm5ldC9yeHJwYy9LY29uZmlnOjM0OmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xubmV0L3J4cnBjL0tjb25maWctMzUtXHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy0zOS1cbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctNDktXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcbm5ldC9yeHJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXG5uZXQvcnhycGMvS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIG5ldC9yeHJwYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUnhSUEMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBgbmV0L3J4cnBjL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbCBkZWZpbml0aW9ucywgc3BlY2lmaWNhbGx5IGxpbmVzIDEgdGhyb3VnaCwgc2F5LCAyNS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHZpYSB0aGUgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGF0IGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgcHJvdG9jb2wgaXRzZWxmLCBwZXJoYXBzIHNvbWUgaW5pdGlhbCBmZWF0dXJlIGZsYWdzIGxpa2Ugc2VjdXJpdHkgb3B0aW9ucywgYW5kIG1heWJlIGEgZmV3IG90aGVyIGJhc2ljIHNldHRpbmdzLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXksIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBkZWNsYXJlZCBlYXJseSBvbi4gT25jZSBJIGhhdmUgdGhlIGJhc2ljIG9wdGlvbnMgZmlndXJlZCBvdXQsIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCBtb2R1bGVzIGFuZCBzdWItZmVhdHVyZXMgYmVjb21lIGF2YWlsYWJsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQUZfUlhSUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcbiAgMTE6XHRcdHNlbGVjdCBLRVlTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XG4gIDE1Olx0XHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXG4gIDE2Olx0XHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgVGhlc2UgYXJlIHVzZWQgZm9yIEFGUyBrZXJuZWwgZmlsZXN5c3RlbSBhbmQgdXNlcnNwYWNlIHV0aWxpdGllcy5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xuICAyMTpcdFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXG4gIDI0Olx0XG4gIDI1Olx0aWYgQUZfUlhSUENcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQUZfUlhSUENfSVBWNlxuICAyODpcdFx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xuICAzMjpcdFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG4gIDM1Olx0XHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBOZXR3b3JrIFByb3RvY29sIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SW50ZXJlc3RpbmcsIHdlJiMzOTt2ZSBnb3QgSVB2NiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlIHJlbGF0ZWQgdG8gVURQIHN0YXRzLiYjMzQ7IFNwZWNpZmljYWxseSwgSSYjMzk7bSBrZXlpbmcgaW4gb24gdGhpcyBzbmlwcGV0OgoKYGBgYwojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKCWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CgkJX19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfUkNWQlVGRVJST1JTKTsKCQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7Cgl9IGVsc2UKI2VuZGlmCmBgYAoKTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIG1ha2luZyBhc3NvY2lhdGlvbnMuIEkgc2VlIHRoZSBJUHY2IGNoZWNrLCBhbmQgdGhlbiBJJiMzOTttIHJlbWluZGVkIHRoYXQgYEFGX1JYUlBDX0lQVjZgIGlzIGFsc28gYSB0aGluZy4gVGhhdCByYWlzZXMgYSBxdWVzdGlvbiwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KClNvLCBJIG5lZWQgdG8ga25vdyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBgQUZfUlhSUENgIGZhbWlseSBhbmQgSVB2Ni4gQXJlIHRoZXkgaW5kZXBlbmRlbnQ/IElzIGBBRl9SWFJQQ19JUFY2YCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGJ1aWx0IG9uIHRvcCBvZiBgQUZfUlhSUENgLCBvciBhcmUgdGhleSBvcnRob2dvbmFsPyBPciBpcyBgQUZfUlhSUENfSVBWNmAgYWx3YXlzIGVuYWJsZWQgd2hlbiBJUHY2IGlzIGVuYWJsZWQ/IEFyZSB0aGV5IGxpa2UgYElORVRgIGFuZCBgSVBWNmAgaW4gc29tZSByZXNwZWN0cz8gSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIGRlcGVuZGVuY3kgaXMgaGFuZGxlZCBieSBgbWFrZWAgaW5mcmFzdHJ1Y3R1cmUuCgpUbyB2ZXJpZnkgdGhpcywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29tcGlsYXRpb24gcnVsZXMuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBvdmVyIHRvIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBiZSwgdG8gZmluZCBvdXQgZXhhY3RseSB3aGF0IGdldHMgY29tcGlsZWQgYW5kIGxpbmtlZCB3aGVuIGBBRl9SWFJQQ2AgaXMgZW5hYmxlZCwgYW5kIGhvdyBJUHY2IGludGVncmF0aW9uIGlzIGhhbmRsZWQgaW4gdGhhdCBjb250ZXh0LiBUaGF0IGZpbGUgd2lsbCB0ZWxsIHRoZSBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFJ4UlBDXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19BRl9SWFJQQykgJiM0Mzs9IHJ4cnBjLm9cbiAgIDc6XHRcbiAgIDg6XHRyeHJwYy15IDo9IFxcXG4gICA5Olx0XHRhZl9yeHJwYy5vIFxcXG4gIDEwOlx0XHRjYWxsX2FjY2VwdC5vIFxcXG4gIDExOlx0XHRjYWxsX2V2ZW50Lm8gXFxcbiAgMTI6XHRcdGNhbGxfb2JqZWN0Lm8gXFxcbiAgMTM6XHRcdGNhbGxfc3RhdGUubyBcXFxuICAxNDpcdFx0Y29ubl9jbGllbnQubyBcXFxuICAxNTpcdFx0Y29ubl9ldmVudC5vIFxcXG4gIDE2Olx0XHRjb25uX29iamVjdC5vIFxcXG4gIDE3Olx0XHRjb25uX3NlcnZpY2UubyBcXFxuICAxODpcdFx0aW5wdXQubyBcXFxuICAxOTpcdFx0aW5wdXRfcmFjay5vIFxcXG4gIDIwOlx0XHRpbnNlY3VyZS5vIFxcXG4gIDIxOlx0XHRpb190aHJlYWQubyBcXFxuICAyMjpcdFx0a2V5Lm8gXFxcbiAgMjM6XHRcdGxvY2FsX2V2ZW50Lm8gXFxcbiAgMjQ6XHRcdGxvY2FsX29iamVjdC5vIFxcXG4gIDI1Olx0XHRtaXNjLm8gXFxcbiAgMjY6XHRcdG5ldF9ucy5vIFxcXG4gIDI3Olx0XHRvb2IubyBcXFxuICAyODpcdFx0b3V0cHV0Lm8gXFxcbiAgMjk6XHRcdHBlZXJfZXZlbnQubyBcXFxuICAzMDpcdFx0cGVlcl9vYmplY3QubyBcXFxuICAzMTpcdFx0cmVjdm1zZy5vIFxcXG4gIDMyOlx0XHRydHQubyBcXFxuICAzMzpcdFx0c2VjdXJpdHkubyBcXFxuICAzNDpcdFx0c2VuZG1zZy5vIFxcXG4gIDM1Olx0XHRzZXJ2ZXJfa2V5Lm8gXFxcbiAgMzY6XHRcdHNrYnVmZi5vIFxcXG4gIDM3Olx0XHR0eGJ1Zi5vIFxcXG4gIDM4Olx0XHR1dGlscy5vXG4gIDM5Olx0XG4gIDQwOlx0cnhycGMtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJYUlBDIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBgaW9fdGhyZWFkLm9gIGFuZCBgbG9jYWxfb2JqZWN0Lm9gIGFyZSBlc3NlbnRpYWwgY29tcG9uZW50cyBvZiBgcnhycGMteWAgd2hlbiBgQ09ORklHX0FGX1JYUlBDYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gQW5kLCBhcyBleHBlY3RlZCwgd2UgYWxzbyByZXF1aXJlIGBDT05GSUdfSU5FVGAgdG8gYmUgZW5hYmxlZCBpZiBgQ09ORklHX0FGX1JYUlBDYCBpcyBzZXQuIElmIHdlIHdhbnQgSVB2NiBzdXBwb3J0LCB3ZSYjMzk7bGwgbmVlZCBib3RoIGBDT05GSUdfSVBWNmAgYW5kIGBDT05GSUdfQUZfUlhSUENfSVBWNmAuIFN0YW5kYXJkIHN0dWZmIHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHNlZSB0aGVzZSBrZXkgY2hhbmdlczoKCjEuICBgcnhycGNfZW5jYXBfcmN2YCBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYC4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBlbmZvcmNpbmcgbW9yZSByb2J1c3QgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoIGBybWVtYCBjaGVja3Mg4oCTIHVzaW5nIGBza19ybWVtX2FsbG9jYCwgYHNrYl9zZXRfb3duZXJfcmAsIGFuZCBgc2tfcm1lbV9zY2hlZHVsZWAuIFNtYXJ0IG1vdmU7IG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldHdvcmtpbmcgaXMgYWx3YXlzIGNyaXRpY2FsLiBBbmQsIGl0IG5vdyBjYWxscyBgcnhycGNfZW5jYXBfcmN2X2Ryb3BgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4KCjIuICBgcnhycGNfc2tiX29ycGhhbl91ZHBgIGlzIHN0YXRpYyB3aXRoaW4gYGlvX3RocmVhZC5jYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGlubGluZWQgb3Igbm90LiBXZSYjMzk7bGwgY2hlY2sgdGhlIGNvbXBpbGVyIG91dHB1dC4KCjMuICBgcnhycGNfaW9fdGhyZWFkYCBpbiBgaW9fdGhyZWFkLmNgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgYml0LiBJdCBjYWxscyBgcnhycGNfc2tiX29ycGhhbl91ZHBgIHNwZWNpZmljYWxseSB3aGVuIGBza2ItJmd0O21hcmtgIGlzIGVxdWFsIHRvIGBSWFJQQ19TS0JfTUFSS19QQUNLRVRgLCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuCgo0LiAgYHJ4cnBjX29wZW5fc29ja2V0YCBpcyBzdGF0aWMgaW4gYGxvY2FsX29iamVjdC5jYC4gIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgb25seSBieSBub24tc3RhdGljIGZ1bmN0aW9ucywgaWYgYXQgYWxsLgoKNS4gIEZpbmFsbHksIGByeHJwY19kZXN0cm95X2xvY2FsYCwgYWxzbyBpbiBgbG9jYWxfb2JqZWN0LmNgLCBpcyBleHBvcnRlZCwgc28gaXQmIzM5O3MgYSBwdWJsaWMgc3ltYm9sOiBgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpYC4KCkFscmlnaHQsIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbG9jYWxfb2JqZWN0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGByeHJwY19vcGVuX3NvY2tldGAgYW5kIGByeHJwY19kZXN0cm95X2xvY2FsYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzaWduaWZpY2FudCBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTA5PXN0YXRpYyBzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2FsbG9jX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTYxLSAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE2MjpzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xNjMte1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0yNTQ9c3RydWN0IHJ4cnBjX2xvY2FsICpyeHJwY19sb29rdXBfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0yOTktXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MzAwOlx0cmV0ID0gcnhycGNfb3Blbl9zb2NrZXQobG9jYWwsIG5ldCk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzAxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNoZWNraW5nIEludGVybmFsIERlY2xhcmF0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVjbGFyYXRpb25zIGZvciBgcnhycGNfbG9va3VwX2xvY2FsYCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGFyLWludGVybmFsLmhgLiBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbnRlcm5hbGx5LiBUaGlzIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB1bmRlcnN0YW5kaW5nIHRoZSBsb3ctbGV2ZWwgYmVoYXZpb3IgSSBuZWVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBwcmVjaXNlIHNpZ25hdHVyZXMsIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGV5IG9wZXJhdGUgb24sIGFuZCBhbnkgY29tbWVudHMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZWlyIGludGVuZGVkIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjYXZlYXRzLiBBY2N1cmFjeSBoZXJlIGlzIHBhcmFtb3VudCwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgdGhlIG9ubHkgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY18oZGVzdHJveXxsb29rdXApX2xvY2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hZl9yeHJwYy5jPTEzMT1zdGF0aWMgaW50IHJ4cnBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNhZGRyLCBpbnQgbGVuKVxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTE1MC1cdFx0cngtXHUwMDNlc3J4ID0gKnNyeDtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjE1MTpcdFx0bG9jYWwgPSByeHJwY19sb29rdXBfbG9jYWwoc29ja19uZXQoXHUwMDI2cngtXHUwMDNlc2spLCBcdTAwMjZyeC1cdTAwM2VzcngpO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtMTUyLVx0XHRpZiAoSVNfRVJSKGxvY2FsKSkge1xuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTUzOD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NzgtXHRcdH1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjU3OTpcdFx0bG9jYWwgPSByeHJwY19sb29rdXBfbG9jYWwoc29ja19uZXQoc29jay1cdTAwM2VzayksIFx1MDAyNnJ4LVx1MDAzZXNyeCk7XG5uZXQvcnhycGMvYWZfcnhycGMuYy01ODAtXHRcdGlmIChJU19FUlIobG9jYWwpKSB7XG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTMyNT12b2lkIHJ4cnBjX2xvY2FsX2RvbnRfZnJhZ21lbnQoY29uc3Qgc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgYm9vbCBzZXQpO1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTMyNjpzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2xvb2t1cF9sb2NhbChzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEzMjctc3RydWN0IHJ4cnBjX2xvY2FsICpyeHJwY19nZXRfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICosIGVudW0gcnhycGNfbG9jYWxfdHJhY2UpO1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEzMzE9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKiwgZW51bSByeHJwY19sb2NhbF90cmFjZSk7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMzMyOnZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEzMzMtdm9pZCByeHJwY19kZXN0cm95X2FsbF9sb2NhbHMoc3RydWN0IHJ4cnBjX25ldCAqKTtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9NDg0PWludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjM1LVx0cnhycGNfc2VlX2xvY2FsKGxvY2FsLCByeHJwY19sb2NhbF9zdG9wKTtcbm5ldC9yeHJwYy9pb190aHJlYWQuYzo2MzY6XHRyeHJwY19kZXN0cm95X2xvY2FsKGxvY2FsKTtcbm5ldC9yeHJwYy9pb190aHJlYWQuYy02MzctXHRXUklURV9PTkNFKGxvY2FsLVx1MDAzZWlvX3RocmVhZCwgTlVMTCk7XG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTE2Mj1zdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMjUzLSAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjI1NDpzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2xvb2t1cF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMjU1LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4KVxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MDU9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBlbnVtIHJ4cnBjX2xvY2FsX3RyYWNlIHdoeSlcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDI2LSAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00Mjgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHJ4cnBjX2VuY2FwX3JjdmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGVhZCBhcm91bmQgYHJ4cnBjX2VuY2FwX3JjdmAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIOKAkyB3aGF0IGlucHV0cyBpdCBleHBlY3RzLCB3aGF0IGl0JiMzOTtzIHJldHVybmluZywgYWxsIHRoZSB1c3VhbCBkZXRhaWxzLiBUaGVuLCBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBldmVyeSBwbGFjZSBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzICpjYWxsZWQqLiBLbm93aW5nIHRoZSBjYWxsc2l0ZXMgZ2l2ZXMgbWUgY3J1Y2lhbCBjb250ZXh0OyBpdCB0ZWxscyBtZSAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBsaWtlbHkgb3BlcmF0aW5nIG9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGFsbCB0aGUgY2FsbGVycy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBwaWVjZSB0b2dldGhlciB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfZW5jYXBfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEyNjg9c3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX3RscF9pbml0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMjc4OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMjc5LXZvaWQgcnhycGNfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICopO1xuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYz0yMj1zdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYy0zMy1cbm5ldC9yeHJwYy9pb190aHJlYWQuYzozNDpzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTM1LXtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjEtICovXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6NjI6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTYzLXtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtOTctXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjk4Olx0XHRyeHJwY19lbmNhcF9yY3ZfZHJvcCh1ZHBfc2ssIHNrYik7XG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtOTktXHRcdHJldHVybiAwO1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xNjI9c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NC1cdHR1bmNmZy5lbmNhcF90eXBlID0gVURQX0VOQ0FQX1JYUlBDO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE5NTpcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTk2LVx0dHVuY2ZnLmVuY2FwX2Vycl9yY3YgPSByeHJwY19lbmNhcF9lcnJfcmN2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNwoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJ4UlBDIFVEUCBFbmNhcHN1bGF0aW9uIGFuZCBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBjaGFuZ2UuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHdoYXQgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQgYW5kIHdoeSwgZ2l2ZW4gdGhlIHNjb3BlLgoKRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gY2FsbGJhY2ssIGByeHJwY19lbmNhcF9yY3ZgLiBUaGlzIGZ1bmN0aW9uLCBhcyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludCwgaXMgZnVuZGFtZW50YWwuIEl0JiMzOTtzIHRoZSByZWNlaXZlciBvZiB0aGUgVURQIHBhY2tldHMuIEkgc2VlIHRoYXQgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IG5vdyBuZWVkcyBjYXJlZnVsIGFjY291bnRpbmcgb2Ygc29ja2V0IGJ1ZmZlciB1c2FnZSwgY2hlY2tpbmcgYHVkcF9zay0mZ3Q7c2tfcm1lbV9hbGxvY2AgYWdhaW5zdCBgc2tfcmN2YnVmYCwgc2V0dGluZyBvd25lcnNoaXAgdXNpbmcgYHNrYl9zZXRfb3duZXJfcmAgd2l0aGluIGEgbG9jaywgYW5kIGRyb3BwaW5nIHBhY2tldHMgd2hlbiBvdmVyIHRoZSBsaW1pdC4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcGllY2Ugb2YgbG9naWMgdGhhdCB0b3VjaGVzIHRoZSBjcml0aWNhbCByZWNlaXZlIHBhdGguCgpUaGVuLCB0aGVyZSBpcyBgcnhycGNfaW9fdGhyZWFkYCwgdGhlIGtlcm5lbCB0aHJlYWQgaGFuZGxpbmcgSS9PIGZvciB0aGUgUnhSUEMgbG9jYWwgZW5kcG9pbnQuIGByeHJwY19za2Jfb3JwaGFuX3VkcCgpYCBpcyBhbHNvIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBsaWZlY3ljbGUgaXMgY3J1Y2lhbCwgc2luY2UgaXQgaGFuZGxlcyBkcm9wcGluZyBzb2NrZXQgb3duZXJzaGlwLgoKYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGlzIGVzc2VudGlhbC4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0ZWFyaW5nIGRvd24gdGhlIFJ4UlBDIGxvY2FsIGVuZHBvaW50IGFuZCBjbG9zaW5nIHRoZSBzb2NrZXQuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgaXQmIzM5O3Mgbm9uLXN0YXRpYywgc28sIGl0JiMzOTtzIGEga2V5IEFQSSBlbnRyeXBvaW50LiBUaGUgY2hhbmdlIGluY2x1ZGVzIHNvY2tldCB0ZWFyZG93biBhbmQgUkNVIGhhbmRsaW5nIG1vZGlmaWNhdGlvbnMuCgpUaGUgYHJ4cnBjX2xvb2t1cF9sb2NhbGAgKG9yIGByeHJwY19vcGVuX3NvY2tldGApIGlzIHVzZWQgdG8gb3BlbiB0aGUgVURQIHR1bm5lbCBzb2NrZXQgYW5kIGluaXRpYWxpemUgaXQuIEl0cyBtb2RpZmljYXRpb25zIHRvIHNvY2tldCBidWZmZXIgc2l6aW5nIGFyZSBhbHNvIG9mIGludGVyZXN0LgoKVGhlIHN0YXRpYyBmdW5jdGlvbnMgYHJ4cnBjX3NrYl9vcnBoYW5fdWRwYCwgYW5kIGByeHJwY19vcGVuX3NvY2tldGAgYW5kIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAgYWxzbyBuZWVkIHRvIGJlIGluY2x1ZGVkIHNpbmNlIHRoZXkgYXJlIHBvdGVudGlhbGx5IHJlbGV2YW50LgoKQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50OgotIGByeHJwY19lbmNhcF9yY3ZgCi0gYHJ4cnBjX2lvX3RocmVhZGAKLSBgcnhycGNfZGVzdHJveV9sb2NhbGAKLSBgcnhycGNfb3Blbl9zb2NrZXRgCi0gYHJ4cnBjX3NrYl9vcnBoYW5fdWRwYAotIGByeHJwY19sb29rdXBfbG9jYWxgCgpOb3csIGZvciBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgYEFGX1JYUlBDYCwgYElORVRgLCBgQUZfUlhSUENfSVBWNmAsIGFuZCBgSVBWNmAuIFRoaXMgbWFrZXMgc2Vuc2UuIGBBRl9SWFJQQ2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUsIHJlcXVpcmluZyBgSU5FVGAsIGFuZCBgQUZfUlhSUENfSVBWNmAgZGVwZW5kcyBvbiBib3RoIGBBRl9SWFJQQ2AgYW5kIGBJUFY2YC4KClNvLCBmb3IgJiMzNDtFbmFibGVDb25maWdzJiMzNDssIEkmIzM5O2xsIGxpc3Q6Ci0gYEFGX1JYUlBDYAotIGBJTkVUYAotIGBJUFY2YAotIGBBRl9SWFJQQ19JUFY2YAoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBjb3ZlcnMgdGhlIGltcG9ydGFudCBhcmVhcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBzb2NrZXQgYnVmZmVyIGFjY291bnRpbmcsIGludHJvZHVjaW5nIGxvY2tpbmcsIGFuZCBhZmZlY3RpbmcgYm90aCB0aGUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgdGVhcmRvd24gbGlmZWN5Y2xlLiBJdCYjMzk7cyB0b3VjaGluZyBidWZmZXIgYWxsb2NhdGlvbiwgb3duZXJzaGlwLCBhbmQgcmVsZWFzZSwgc28gSSB3b3VsZCBjZXJ0YWlubHkgY29uc2lkZXIgdGhpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGR1ZSB0byB0aGUgaGlnaCByaXNrIG9mIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cbjMuIEJ1ZyBEZXRlY3RvciBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiAoYHNrX3JlY2VpdmVfcXVldWUubG9ja2ApLCBzb2NrZXQgcmVmZXJlbmNlIGxpZmVjeWNsZSAvIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgYWNjb3VudGluZyBlcnJvcnMsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChMT0NLREVQLCBLQVNBTiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTIwY2FjNGMwZjA2NTMzOTYzYmFmMTE1NWJiMzE2YzlmMDI5ZmJmNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDE1OjI5OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jCmluZGV4IGRjNTE4NGEyZmE5ZDEuLmM3NzI0MWIxMmY1OTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKQEAgLTcsMTIgJiM0Mzs3LDQ4IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKIHN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgICAgc3RydWN0IHNvY2thZGRyX3J4cnBjICpwZWVyX3NyeCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAomIzQzOy8qCiYjNDM7ICogRHJvcCBVRFAgcm1lbSBvd25lcnNoaXAgZm9yIHBhY2tldHMgY2hhcmdlZCBpbiBlbmNhcF9yY3YoKS4KJiM0MzsgKiBza19mb3J3YXJkX2FsbG9jIGlzIHNlcmlhbGlzZWQgYnkgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJc2tiX29ycGhhbihza2IpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTsKJiM0MzsKJiM0MzsJc2tfZHJvcHNfaW5jKHVkcF9zayk7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiYjNDM7CQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpOwomIzQzOwl9IGVsc2UKJiM0MzsjZW5kaWYKJiM0MzsJewomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7CiYjNDM7CX0KJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHVkcF9zaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnQKICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dApAQCAtMjgsNiAmIzQzOzY0LDggQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBza19idWZmX2hlYWQgKnJ4X3F1ZXVlOwogCXN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkcm9vbTsKJiM0MzsJdW5zaWduZWQgaW50IHJjdmJ1ZjsKIAogCWlmICh1bmxpa2VseSghbG9jYWwpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNDEsOCAmIzQzOzc5LDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7ODgsMjQgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CXJjdmJ1ZiA9IFJFQURfT05DRSh1ZHBfc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWhlYWRyb29tID0gU0tCX1RSVUVTSVpFKFJYUlBDX0pVTUJPKDEpKSAqIDI7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJaWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoJmFtcDt1ZHBfc2stJmd0O3NrX3JtZW1fYWxsb2MpICYjNDM7CiYjNDM7CSAgICBza2ItJmd0O3RydWVzaXplICYjNDM7IGhlYWRyb29tICZndDs9IHJjdmJ1ZiB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJCXJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKJiM0MzsJc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt1ZHBfc2stJmd0O3NrX3JlY2VpdmVfcXVldWUubG9jayk7CiYjNDM7CXNrYl9kc3RfZHJvcChza2IpOwomIzQzOwomIzQzOwlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7CiYjNDM7CXJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7CiAJc2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7CiAJd2FrZV91cF9wcm9jZXNzKGlvX3RocmVhZCk7CiAJcmV0dXJuIDA7CkBAIC00NzEsNiAmIzQzOzUyNSw5IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSkKIAkJLyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3J4X3F1ZXVlKSkpIHsKIAkJCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiLSZndDttYXJrID09IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVCkKJiM0MzsJCQkJcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi4yZjkzODkxZTg0MWFiIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmYgPSB7MH07CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiAJc3RydWN0IHNvY2sgKnVzazsKJiM0MzsJdTMyIHJjdmJ1ZjsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7JXB7JWQsJWR9JiMzNDssCkBAIC0xOTgsNiAmIzQzOzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldCkKIAogCS8qIHNldCB0aGUgc29ja2V0IHVwICovCiAJdXNrID0gbG9jYWwtJmd0O3NvY2tldC0mZ3Q7c2s7CiYjNDM7CS8qIE9uZSBhZHZlcnRpc2VkIG9yZGluYXJ5LURBVEEgd2luZG93LCBub3QganVtYm8tbWF4LiAqLwomIzQzOwlyY3ZidWYgPSByeHJwY19yeF93aW5kb3dfc2l6ZSAqIFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyOwomIzQzOwlyY3ZidWYgJiM0Mzs9IHJjdmJ1ZiAvIDQ7CiYjNDM7CXJjdmJ1ZiA9IGNsYW1wKHJjdmJ1ZiwgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX2RlZmF1bHQpLAomIzQzOwkJICAgICAgIFJFQURfT05DRShzeXNjdGxfcm1lbV9tYXgpKTsKJiM0MzsJV1JJVEVfT05DRSh1c2stJmd0O3NrX3JjdmJ1ZiwgcmN2YnVmKTsKIAl1c2stJmd0O3NrX2Vycm9yX3JlcG9ydCA9IHJ4cnBjX2Vycm9yX3JlcG9ydDsKIAogCXN3aXRjaCAoc3J4LSZndDt0cmFuc3BvcnQuZmFtaWx5KSB7CkBAIC00MzcsOCAmIzQzOzQ0NCw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NTUsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjIybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLCB0aGVuIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkZpcnN0LCBsZXQmIzM5O3MgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSBpdCBwcmltYXJpbHkgY29uY2VybnMgdGhlIGByeHJwY2AgbmV0d29yayBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIFVEUCBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgcmVjZWl2ZSBwYXRoLgoKKiAgIEluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgLCB0aGUga2V5IGFkZGl0aW9uIGlzIGByeHJwY19za2Jfb3JwaGFuX3VkcChza2IpYC4gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBkcm9wIFVEUCBybWVtIG93bmVyc2hpcCBvZiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgdXNlIG9mIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBhIHNwaW5sb2NrLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGFyZWEgdG8gd2F0Y2ggYXMgc3BpbmxvY2tzIGNhbiBtYWtlIGFuYWx5c2lzIHRyaWNreS4gVGhlbiB0aGVyZSYjMzk7cyBgcnhycGNfZW5jYXBfcmN2X2Ryb3AodWRwX3NrLCBza2IpYCB3aGljaCBpbmNyZW1lbnRzIHN0YXRzIGFuZCBjYWxscyBgc2tfc2tiX3JlYXNvbl9kcm9wKClgLiBBbmQgd2l0aGluIGByeHJwY19lbmNhcF9yY3YoKWAsIHRoZSBjb2RlIGNoZWNrcyB0aGUgcmVjZWl2ZSBidWZmZXIgKGBza19yY3ZidWZgKSBvZiB0aGUgVURQIHNvY2tldCAoYHVkcF9za2ApLiBJdCBhbHNvIGNhbGN1bGF0ZXMgaGVhZHJvb20gYW5kIGNoZWNrcyBgc2tfcm1lbV9zY2hlZHVsZWAsIGFuZCBkcm9wcyBwYWNrZXRzIGlmIHRoZSBidWZmZXIgaXMgZXhjZWVkZWQuIFRoaXMgaXMgbm9ybWFsLiBUaGUgaW1wb3J0YW50IHBhcnRzIGFyZSB0aGUgdXNlIG9mIGBza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spYCB0byBjaGFyZ2UgdGhlIFNLQiB0byB0aGUgc29ja2V0IHdpdGhpbiBhIGxvY2ssIHRoZW4gbGF0ZXIgdW5jaGFyZ2VzIGl0IHdpdGggYHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYilgIHdoZW4gZGVxdWV1aW5nIGZyb20gYHJ4X3F1ZXVlYC4KCiogICBgbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jYCBpcyBhbHNvIG1vZGlmaWVkLCB3aXRoIGNoYW5nZXMgdG8gYHJ4cnBjX29wZW5fc29ja2V0YCwgd2hlcmUgdGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgKGBza19yY3ZidWZgKSBpcyBzZXQgYmFzZWQgb24gdGhlIGFkdmVydGlzZWQgd2luZG93IGFuZCBzeXN0ZW0td2lkZSBtZW1vcnkgbGltaXRzLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIHdoaWNoIHVzZXMgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBhbmQgYHN5bmNocm9uaXplX3JjdWAgZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbi4gVGhpcyBpcyBsaWtlbHkgdGhlIHNvY2tldCBjbGVhbnVwIGFuZCByZWxlYXNlIHBhdGguIFRoZSBkZWZlcnJhbCBvZiBgc29ja19yZWxlYXNlYCBhZnRlciBwdXJnaW5nIHF1ZXVlcyBpcyBhbHNvIGtleS4KClNvLCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXM6CgoxLiAgTWFuYWdpbmcgU0tCIG93bmVyc2hpcCByZWxhdGVkIHRvIGEgVURQIHNvY2tldC4KMi4gIEJ1ZmZlciBzaXplIGNoZWNrcyBhbmQgZHJvcHBpbmcgcGFja2V0cy4KMy4gIFNvY2tldCBkZXN0cnVjdGlvbiBhbmQgY2xlYW51cC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIEtNU0FOIGFuZ2xlcyBoZXJlLiBUaGUgbW9zdCBvYnZpb3VzIGFyZWEgb2YgY29uY2VybiBpcyBhcm91bmQgdGhlIGJ1ZmZlciBvd25lcnNoaXAgdHJhbnNmZXIgYW5kIHJlbGVhc2Ugd2l0aGluIHRoZSByZWNlaXZlIHBhdGguIFNwZWNpZmljYWxseSwgYHNrYl9zZXRfb3duZXJfcmAgYW5kIGBza2Jfb3JwaGFuYC4gV2UgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IHVzZSBvZiBtZW1vcnkgb3duZXJzaGlwLCBvciBidWZmZXIgcmUtdXNlIGNhbiB0cmlnZ2VyIEtNU0FOLiBUaGUgdXNlIG9mIHNwaW5sb2NrcyBhbmQgYHJjdWAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGV5IHVzdWFsbHkgaW5jcmVhc2UgdGhlIGNvbXBsZXhpdHkgb2YgYW5hbHlzaXMuIExldCBtZSBjaGVjayB0aGUgY29kZSBhcm91bmQgYHJ4cnBjX3B1cmdlX3F1ZXVlYC4gSXQmIzM5O3MgcG9zc2libGUgdG8gZmluZCBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfcHVyZ2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL2FmX3J4cnBjLmM9OTA3PXN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTExLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjkxMjpcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTEzLVxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTkyNz1zdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY0LVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjk2NTpcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY2LVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE1MTc9dm9pZCByeHJwY19mcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqLCBlbnVtIHJ4cnBjX3NrYl90cmFjZSk7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNTE4OnZvaWQgcnhycGNfcHVyZ2VfcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE1MTktXG4tLVxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM9NTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2NsZWFudXBfcnhfYnVmZmVycyhzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbm5ldC9yeHJwYy9jYWxsX29iamVjdC5jLTU1NS17XG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYzo1NTY6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpO1xubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM6NTU3Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2Y2FsbC1cdTAwM2VyeF9xdWV1ZSk7XG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYzo1NTg6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZjYWxsLVx1MDAzZXJ4X29vc19xdWV1ZSk7XG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYy01NTktXHRrZnJlZShjYWxsLVx1MDAzZXJ4X2RlY19idWZmZXIpO1xuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTMwNj1zdGF0aWMgdm9pZCByeHJwY19jbGVhbl91cF9jb25uZWN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0zMzEtXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzozMzI6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZjb25uLVx1MDAzZXJ4X3F1ZXVlKTtcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTMzMy1cdHJ4cnBjX2ZyZWVfc2tiKGNvbm4tXHUwMDNldHhfcmVzcG9uc2UsIHJ4cnBjX3NrYl9wdXRfcmVzcG9uc2UpO1xuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTM0Ni1cdCAqL1xubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmM6MzQ3Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2Y29ubi1cdTAwM2VyeF9xdWV1ZSk7XG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0zNDgtXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTQyNz12b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU0LSNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6NDU1Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ1Ni0jZW5kaWZcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0NTc6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU4LVxuLS1cbm5ldC9yeHJwYy9yZWN2bXNnLmM9NDA3PWludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi0tXG5uZXQvcnhycGMvcmVjdm1zZy5jLTU2Ny1jYWxsX2ZhaWxlZDpcbm5ldC9yeHJwYy9yZWN2bXNnLmM6NTY4Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKTtcbm5ldC9yeHJwYy9yZWN2bXNnLmMtNTY5LWNhbGxfY29tcGxldGU6XG4tLVxubmV0L3J4cnBjL3NrYnVmZi5jPTUyPXZvaWQgcnhycGNfZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSByeHJwY19za2JfdHJhY2Ugd2h5KVxuLS1cbm5ldC9yeHJwYy9za2J1ZmYuYy02My0gKi9cbm5ldC9yeHJwYy9za2J1ZmYuYzo2NDp2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG5uZXQvcnhycGMvc2tidWZmLmMtNjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYHJ4cnBjX3B1cmdlX3F1ZXVlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBgcnhycGNfcHVyZ2VfcXVldWVgIGZ1bmN0aW9uLiBNeSBicmFpbiYjMzk7cyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHJ1biB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGFuZCB0aGUgdXN1YWwgZ290Y2hhcyB3aXRoIHF1ZXVlIG1hbmFnZW1lbnQgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBhcm91bmQgaXRlcmF0aW5nLCBmcmVlaW5nLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZXJyb3JzIGR1cmluZyB0aGUgcHVyZ2UgcHJvY2Vzcy4gS25vd2luZyB0aGUgYnJvYWRlciBSeFJQQyBjb250ZXh0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBtZXNzYWdlIGxpZmV0aW1lcywgY29ubmVjdGlvbiBzdGF0ZSwgYW5kIHBvc3NpYmx5IGV2ZW4gY29uY3VycmVuY3kgaXNzdWVzLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgdGhpcyBmdW5jdGlvbiB0byB0aGUgbGFyZ2VyIGNvbW11bmljYXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZS4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCByZXNvdXJjZSBjbGVhbnVwIGFuZCBlbnN1cmluZyBhIHJvYnVzdCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFxuICA2MTpcdC8qXG4gIDYyOlx0ICogQ2xlYXIgYSBxdWV1ZSBvZiBzb2NrZXQgYnVmZmVycy5cbiAgNjM6XHQgKi9cbiAgNjQ6XHR2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG4gIDY1Olx0e1xuICA2NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgNjc6XHRcbiAgNjg6XHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoKGxpc3QpKSkgIT0gTlVMTCkge1xuICA2OTpcdFx0XHRpbnQgbiA9IGF0b21pY19kZWNfcmV0dXJuKHNlbGVjdF9za2JfY291bnQoc2tiKSk7XG4gIDcwOlx0XHRcdHRyYWNlX3J4cnBjX3NrYihza2IsIHJlZmNvdW50X3JlYWQoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKSwgbixcbiAgNzE6XHRcdFx0XHRcdHJ4cnBjX3NrYl9wdXRfcHVyZ2UpO1xuICA3MjpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuICA3MzpcdFx0fVxuICA3NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcxNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IFJlbGVhc2UgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgaG93IGl0JiMzOTtzIHJlbGVhc2VkIGFmdGVyIGJlaW5nIHVzZWQgaW4gdGhlIGByeHJwY2AgY29udGV4dC4gSWYgYHNrYmAgZ2V0cyBwdXJnZWQgdXNpbmcgYHJ4cnBjX3B1cmdlX3F1ZXVlYCBvciB0aHJvdWdoIHRoZSBtb3JlIGdlbmVyYWwgYGNvbnN1bWVfc2tiYCBvciBga2ZyZWVfc2tiYCBwYXRocywgdGhlIHNvY2tldCByZWZlcmVuY2Ugc2hvdWxkIGJlIHJlbGVhc2VkLCBhbmQgdGhlIGFzc29jaWF0ZWQgcm1lbSAocmVjZWl2ZSBtZW1vcnkpIHNob3VsZCBiZSB1bmNoYXJnZWQuIFRoaXMgdW5jaGFyZ2luZyBpcyBrZXk7IGl0JiMzOTtzIGRvbmUgZWl0aGVyIHZpYSBgc2tiX29ycGhhbmAgb3IgdGhyb3VnaCBhIGRlc3RydWN0b3IsIGxpa2UgYHNvY2tfcmZyZWVgLgoKQnV0IGhvbGQgb24sIHRoZXJlJiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgd2hlbiBgc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKWAgaXMgY2FsbGVkLiBUaGlzIHNldHMgdGhlIGBza2ItJmd0O2Rlc3RydWN0b3JgIHRvIGBzb2NrX3JmcmVlYCBhbmQgbGlua3MgdGhlIGBza2JgIHRvIHRoZSBzb2NrZXQgKGBza2ItJmd0O3NrID0gc2tgKS4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyLCBkb2VzIGBzb2NrX3JmcmVlYCByZXF1aXJlIHRoZSBgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYD8gVGhhdCYjMzk7cyBlc3NlbnRpYWwgdG8gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHNvY2tfcmZyZWVgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgVURQIGFuZCBjb3JlIG5ldHdvcmtpbmcgY29udGV4dCB0byBtYWtlIHN1cmUgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpcyB0aHJlYWQtc2FmZSBhbmQgY29ycmVjdC4gSSYjMzk7bGwgY2hlY2sgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNvY2tfcmZyZWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oPTE4NjY9dm9pZCBza2Jfb3JwaGFuX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9zb2NrLmg6MTg2Nzp2b2lkIHNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9zb2NrLmgtMTg2OC12b2lkIHNvY2tfcm1lbV9mcmVlKHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0yNzkzPUVYUE9SVF9TWU1CT0woc2tiX29ycGhhbl9wYXJ0aWFsKTtcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjc5Ny0gKi9cbm5ldC9jb3JlL3NvY2suYzoyNzk4OnZvaWQgc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc29jay5jLTI3OTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgU29ja2V0IFJlbGVhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG5ldC9jb3JlL3NvY2suY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBzb2NrX3JmcmVlYCBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IHdvcmtpbmcgYXMgZXhwZWN0ZWQgaW4gdGhlIHNvY2tldCByZWxlYXNlIHByb2Nlc3MgYW5kIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSwgd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgZnJlZWluZywgYW5kIGlmIHRoZXJlIG1pZ2h0IGJlIGEgcG90ZW50aWFsIGxlYWsgb3IgaW1wcm9wZXIgaGFuZGxpbmcgd2l0aGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBnZXQgZG93biB0byB0aGUgbG93LWxldmVsIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3OTU6XHQvKlxuMjc5NjpcdCAqIFJlYWQgYnVmZmVyIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBrZnJlZV9za2IuXG4yNzk3Olx0ICovXG4yNzk4Olx0dm9pZCBzb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXG4yNzk5Olx0e1xuMjgwMDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVx1MDAzZXNrO1xuMjgwMTpcdFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbjI4MDI6XHRcbjI4MDM6XHRcdGF0b21pY19zdWIobGVuLCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbjI4MDQ6XHRcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcbjI4MDU6XHR9XG4yODA2Olx0RVhQT1JUX1NZTUJPTChzb2NrX3JmcmVlKTtcbjI4MDc6XHRcbjI4MDg6XHQvKlxuMjgwOTpcdCAqIEJ1ZmZlciBkZXN0cnVjdG9yIGZvciBza2JzIHRoYXQgYXJlIG5vdCB1c2VkIGRpcmVjdGx5IGluIHJlYWQgb3Igd3JpdGVcbjI4MTA6XHQgKiBwYXRoLCBlLmcuIGZvciBlcnJvciBoYW5kbGVyIHNrYnMuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20ga2ZyZWVfc2tiLlxuMjgxMTpcdCAqL1xuMjgxMjpcdHZvaWQgc29ja19lZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjgxMzpcdHtcbjI4MTQ6XHRcdHNvY2tfcHV0KHNrYi1cdTAwM2Vzayk7XG4yODE1Olx0fVxuMjgxNjpcdEVYUE9SVF9TWU1CT0woc29ja19lZnJlZSk7XG4yODE3Olx0XG4yODE4Olx0LyogQnVmZmVyIGRlc3RydWN0b3IgZm9yIHByZWZldGNoL3JlY2VpdmUgcGF0aCB3aGVyZSByZWZlcmVuY2UgY291bnQgbWF5XG4yODE5Olx0ICogbm90IGJlIGhlbGQsIGUuZy4gZm9yIGxpc3RlbiBzb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEaXZpbmcgaW50byBgc2tfbWVtX3VuY2hhcmdlYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLi4uIFdoYXQgZXhhY3RseSBpcyB0aGUgZnVuY3Rpb24gb2YgYHNrX21lbV91bmNoYXJnZWAgaW4gdGhpcyBjb250ZXh0PyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suIEkmIzM5O2xsIGdldCByaWdodCB0byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTm8gdGltZSB0byB3YXN0ZTsgbGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX21lbV91bmNoYXJnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zb2NrLmg9MTYzNz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0xNjQzLVxuaW5jbHVkZS9uZXQvc29jay5oOjE2NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxuaW5jbHVkZS9uZXQvc29jay5oLTE2NDUte1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTMyNz1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3dtZW1fZnJlZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTMzMC1cdGlmICghc2tiX3pjb3B5X3B1cmUoc2tiKSlcbmluY2x1ZGUvbmV0L3RjcC5oOjMzMTpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItXHUwMDNldHJ1ZXNpemUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMzMyLVx0ZWxzZVxuaW5jbHVkZS9uZXQvdGNwLmg6MzMzOlx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChza2IpKSk7XG5pbmNsdWRlL25ldC90Y3AuaC0zMzQtXHRfX2tmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTMwNDk9QlBGX0NBTExfNChicGZfbXNnX3BvcF9kYXRhLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZywgdTMyLCBzdGFydCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zMTc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MzE3NjpcdHNrX21lbV91bmNoYXJnZShtc2ctXHUwMDNlc2ssIGxlbiAtIHBvcCk7XG5uZXQvY29yZS9maWx0ZXIuYy0zMTc3LVx0bXNnLVx1MDAzZXNnLnNpemUgLT0gKGxlbiAtIHBvcCk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMzg9dm9pZCBza19tc2dfcmV0dXJuX3plcm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jLTE0Ny1cdFx0XHRzZ2UtXHUwMDNlb2Zmc2V0ICYjNDM7PSBieXRlcztcbm5ldC9jb3JlL3NrbXNnLmM6MTQ4Olx0XHRcdHNrX21lbV91bmNoYXJnZShzaywgYnl0ZXMpO1xubmV0L2NvcmUvc2ttc2cuYy0xNDktXHRcdFx0YnJlYWs7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xNTEtXG5uZXQvY29yZS9za21zZy5jOjE1MjpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZ2UtXHUwMDNlbGVuZ3RoKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTUzLVx0XHRieXRlcyAtPSBzZ2UtXHUwMDNlbGVuZ3RoO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTYyPXZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTY5LVxubmV0L2NvcmUvc2ttc2cuYzoxNzA6XHRcdHNrX21lbV91bmNoYXJnZShzaywgdW5jaGFyZ2UpO1xubmV0L2NvcmUvc2ttc2cuYy0xNzEtXHRcdGJ5dGVzIC09IHVuY2hhcmdlO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTc3PXN0YXRpYyBpbnQgc2tfbXNnX2ZyZWVfZWxlbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xODUtXHRcdGlmIChjaGFyZ2UpXG5uZXQvY29yZS9za21zZy5jOjE4NjpcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIGxlbik7XG5uZXQvY29yZS9za21zZy5jLTE4Ny1cdFx0cHV0X3BhZ2Uoc2dfcGFnZShzZ2UpKTtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yMzUtXHRcdFx0aWYgKGNoYXJnZSlcbm5ldC9jb3JlL3NrbXNnLmM6MjM2Olx0XHRcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBieXRlcyk7XG5uZXQvY29yZS9za21zZy5jLTIzNy1cdFx0XHRzZ2UtXHUwMDNlbGVuZ3RoIC09IGJ5dGVzO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MjY0PXZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yODUtXHRtc2ctXHUwMDNlc2cuZGF0YVtpXS5sZW5ndGggLT0gdHJpbTtcbm5ldC9jb3JlL3NrbXNnLmM6Mjg2Olx0c2tfbWVtX3VuY2hhcmdlKHNrLCB0cmltKTtcbm5ldC9jb3JlL3NrbXNnLmMtMjg3LVx0LyogQWRqdXN0IGNvcHlicmVhayBpZiBpdCBmYWxscyBpbnRvIHRoZSB0cmltbWVkIHBhcnQgb2YgbGFzdCBidWYgKi9cbi0tXG5uZXQvY29yZS9za21zZy5jPTQxMz1pbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvY29yZS9za21zZy5jLTQ1Ny1cdFx0XHRcdGlmICghbXNnX3J4LVx1MDAzZXNrYikge1xubmV0L2NvcmUvc2ttc2cuYzo0NTg6XHRcdFx0XHRcdHNrX21lbV91bmNoYXJnZShzaywgY29weSk7XG5uZXQvY29yZS9za21zZy5jLTQ1OS1cdFx0XHRcdFx0YXRvbWljX3N1Yihjb3B5LCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbi0tXG5uZXQvY29yZS9zb2NrLmM9Mjc5OD12b2lkIHNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjgwMy1cdGF0b21pY19zdWIobGVuLCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbm5ldC9jb3JlL3NvY2suYzoyODA0Olx0c2tfbWVtX3VuY2hhcmdlKHNrLCBsZW4pO1xubmV0L2NvcmUvc29jay5jLTI4MDUtfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xMzItXHRcdGlmICh1bmNoYXJnZSlcbm5ldC9pcHY0L3RjcF9icGYuYzoxMzM6XHRcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCByZXQpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTEzNC1cdFx0aWYgKHJldCAhPSBzaXplKSB7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDk1LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdGNwX2JwZi5jOjQ5NjpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZW50KTtcbm5ldC9pcHY0L3RjcF9icGYuYy00OTctXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE5NzI9aW50IHRjcF90cmltX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xOTg1LVx0aWYgKCFza2JfemNvcHlfcHVyZShza2IpKVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE5ODY6XHRcdHNrX21lbV91bmNoYXJnZShzaywgZGVsdGFfdHJ1ZXNpemUpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTE5ODctXG4tLVxubmV0L2tjbS9rY21zb2NrLmM9MTczPXN0YXRpYyB2b2lkIGtjbV9yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9rY20va2Ntc29jay5jLTE3OS1cbm5ldC9rY20va2Ntc29jay5jOjE4MDpcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcbm5ldC9rY20va2Ntc29jay5jLTE4MS1cdGF0b21pY19zdWIobGVuLCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMTQ3PXN0YXRpYyB2b2lkIGRmcmFnX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNDgte1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTE0OTpcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNTAtXHRza193bWVtX3F1ZXVlZF9hZGQoc2ssIC1sZW4pO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMzg9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQzLVx0YXRvbWljX3N1Yihza2ItXHUwMDNldHJ1ZXNpemUsIFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjE0NDpcdHNrX21lbV91bmNoYXJnZShzaywgc2tiLVx1MDAzZXRydWVzaXplKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDUtXHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz05MjEzPXN0YXRpYyB2b2lkIHNjdHBfd2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy05MjE4LVxubmV0L3NjdHAvc29ja2V0LmM6OTIxOTpcdHNrX21lbV91bmNoYXJnZShzaywgc2tiLVx1MDAzZXRydWVzaXplKTtcbm5ldC9zY3RwL3NvY2tldC5jLTkyMjAtXHRza193bWVtX3F1ZXVlZF9hZGQoc2ssIC0oc2tiLVx1MDAzZXRydWVzaXplICYjNDM7IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVuaykpKTtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz05MjU2PXZvaWQgc2N0cF9zb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTI2NS1cdCAqL1xubmV0L3NjdHAvc29ja2V0LmM6OTI2NjpcdHNrX21lbV91bmNoYXJnZShzaywgZXZlbnQtXHUwMDNlcm1lbV9sZW4pO1xubmV0L3NjdHAvc29ja2V0LmMtOTI2Ny19XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTE2OD1pbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yMTEtXHRcdHB1dF9wYWdlKHApO1xubmV0L3Rscy90bHNfbWFpbi5jOjIxMjpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cdTAwM2VsZW5ndGgpO1xubmV0L3Rscy90bHNfbWFpbi5jLTIxMy1cdFx0c2cgPSBzZ19uZXh0KHNnKTtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MjgxPXZvaWQgdGxzX2ZyZWVfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtMjg2LVx0XHRwdXRfcGFnZShzZ19wYWdlKHNnKSk7XG5uZXQvdGxzL3Rsc19tYWluLmM6Mjg3Olx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVx1MDAzZWxlbmd0aCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtMjg4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBTb2NrZXQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza19tZW1fdW5jaGFyZ2VgIHdvcmtzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBpbmNsdWRlL25ldC9zb2NrLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzb2NrZXQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGtlcm5lbC4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lOyBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gZG9lcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciB0aGUgb3ZlcmFsbCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gYSBzb2NrZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byBnbyBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY0MDpcdFx0XHRyZXR1cm47XG4xNjQxOlx0XHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgLXNpemUpO1xuMTY0MjpcdH1cbjE2NDM6XHRcbjE2NDQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUpXG4xNjQ1Olx0e1xuMTY0NjpcdFx0aWYgKCFza19oYXNfYWNjb3VudChzaykpXG4xNjQ3Olx0XHRcdHJldHVybjtcbjE2NDg6XHRcdHNrX2ZvcndhcmRfYWxsb2NfYWRkKHNrLCBzaXplKTtcbjE2NDk6XHRcdHNrX21lbV9yZWNsYWltKHNrKTtcbjE2NTA6XHR9XG4xNjUxOlx0XG4xNjUyOlx0dm9pZCBfX3NrX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IGdmcCk7XG4xNjUzOlx0XG4xNjU0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19NT0RVTEVTKVxuMTY1NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza19vd25lcl9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbjE2NTY6XHR7XG4xNjU3Olx0XHRfX21vZHVsZV9nZXQob3duZXIpO1xuMTY1ODpcdFx0c2stXHUwMDNlc2tfb3duZXIgPSBvd25lcjtcbjE2NTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE2OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDgxCgkJCQkJCQlvdXRwdXQ6IDI3MAoJCQkJCQkJdGhvdWdodHM6IDI2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4qKgoKT2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2guIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBjb2RlIGNoYW5nZXMgbWV0aWN1bG91c2x5LCBjb25zaWRlcmluZyB0aGUgS01TQU4gY3JpdGVyaWEgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGJ1Z3MuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBjb3JyZWN0IHNvY2tldCBzdGF0ZSBtYW5hZ2VtZW50LCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb2RlIGluIGByeHJwY19za2Jfb3JwaGFuX3VkcGAsIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAsIGFuZCBgcnhycGNfZW5jYXBfcmN2YC4gSXTigJlzIGNsZWFyIHRvIG1lIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgbGlmZWN5Y2xlIG9mIFNLQnMgd2l0aGluIHRoZSBSWFJQQyBzdWJzeXN0ZW0uIFRoZSBrZXkgaXMgaW4gbWFpbnRhaW5pbmcgdGhlIHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBhbmQgZHJvcHBpbmcgcGFja2V0cyBpZiB0aGVzZSBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBJIG5vdGUgdGhlIGxvY2tpbmcgYXJvdW5kIHRoZSByZWNlaXZlIHF1ZXVlIGFuZCB0aGUgdXNlIG9mIGBza2Jfb3JwaGFuYCwgd2hpY2ggYXJlIGNsYXNzaWMgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gdGhpcyBzb3J0IG9mIG5ldHdvcmsgY29kZS4gSSBkbyBub3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGxvY2tpbmcgaGVyZSwgd2hpbGUgaW1wb3J0YW50LCBpcyBtb3JlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgYXRvbWljaXR5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpOZXh0LCBJIGxvb2tlZCBhdCB0aGUgY2hhbmdlcyBpbiBgcnhycGNfb3Blbl9zb2NrZXRgIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgYXJlIGJlaW5nIGNhbGN1bGF0ZWQgYW5kIHNldCBpbiB0aGUgb3BlbiBzb2NrZXQgZnVuY3Rpb24gYW5kIGNsZWFyZWQgaW4gdGhlIGRlc3Ryb3kuIFRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRpbWluZyBvZiBgc29ja19yZWxlYXNlYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFyZSBjcml0aWNhbCBidXQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgc29ja2V0IHRlYXJkb3duIGlzIGhhcHBlbmluZyB2aWEgUkNVIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGFzIHRoZSBzb2NrZXRzIGFyZSByZW1vdmVkLgoKSSBjb25zaWRlcmVkIGVhY2ggb2YgdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2U6KiogTm9wZS4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3MgYWxsIGFib3V0IGludGVybmFsIHNvY2tldCBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nLgoKMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIEkgc2NydXRpbml6ZWQgZXZlcnkgdmFyaWFibGUgZGVjbGFyYXRpb24gYW5kIHVzYWdlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGByY3ZidWZgLCBhbmQgYGhlYWRyb29tYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgd2hldGhlciBpdOKAmXMgcmVhZGluZyBmcm9tIHNvY2tldCBzdGF0ZSBvciBkb2luZyBhIGNhbGN1bGF0aW9uLiBJIGRvbuKAmXQgc2VlIGFueSBwb3RlbnRpYWwgZm9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuCgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUuIEl0IGlzIGp1c3QgYWRqdXN0aW5nIGEgZmV3IHNvY2tldCB2YXJpYWJsZXMuCgo0LiAgKipCb3VuZHMgY2hlY2tzIGFuZCB1bmluaXRpYWxpemVkIGJ5dGVzOioqIFRoZSBwYXRjaOKAmXMgYWRkaXRpb25zIGRvIG5vdCBjb21wcm9taXNlIHBhY2tldCBib3VuZGFyeSBjaGVja3Mgb3IgcmVhZCBwYXN0IGJ1ZmZlciBsaW1pdHMuIFRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcmVjZWl2ZSBidWZmZXIgbGltaXRzIHNlcnZlIHRvICpwcmV2ZW50KiBvdmVycnVucywgYnkgZHJvcHBpbmcgcGFja2V0cy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBwb3NzaWJsZSByaXNrcyBpbiB0aGlzIHBhdGNoOiBEZWFkbG9ja3MsIFVzZS1hZnRlci1GcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgbWVtb3J5IGxlYWsvYWNjb3VudGluZyBtaXNtYXRjaGVzLiBJIGRldGVybWluZWQgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIGlzc3Vlcy4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gVGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZWFkLiBUaGVyZSBpcyBhbHNvIG5vIGNoYW5nZSBpbiBob3cgZGF0YSBpcyByZWFkIGZyb20gdGhlIHBhY2tldCBpdHNlbGYuCgpJbiBjb25jbHVzaW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgZG8gKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHByaW1hcnkgY29uY2VybnMgYXJlIHN5bmNocm9uaXphdGlvbiwgZGF0YSBjb25zaXN0ZW5jeSwgYW5kIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlc2UgYXJlIGJlc3QgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIHNhbml0aXphdGlvbiB0b29scy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cbjMuIEJ1ZyBEZXRlY3RvciBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiAoYHNrX3JlY2VpdmVfcXVldWUubG9ja2ApLCBzb2NrZXQgcmVmZXJlbmNlIGxpZmVjeWNsZSAvIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgYWNjb3VudGluZyBlcnJvcnMsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChMT0NLREVQLCBLQVNBTiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgcmN2YnVmYCwgYGhlYWRyb29tYCwgYHNrYCwgYG5ldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGNyZWF0ZWQsIHJlYWQsIG9yIG1vZGlmaWVkLlxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXG4zLiBCdWcgRGV0ZWN0b3IgQXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gKGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgKSwgc29ja2V0IHJlZmVyZW5jZSBsaWZlY3ljbGUgLyB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGFjY291bnRpbmcgZXJyb3JzLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoTE9DS0RFUCwgS0FTQU4sIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6Mjk6MzMuNTIwOTc4NjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTg4MjgwMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQUZfUlhSUENfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19za2Jfb3JwaGFuX3VkcFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiLFxuICAgIFwicnhycGNfb3Blbl9zb2NrZXRcIixcbiAgICBcInJ4cnBjX2xvb2t1cF9sb2NhbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXFxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXFxuMy4gQnVnIERldGVjdG9yIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIChgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYCksIHNvY2tldCByZWZlcmVuY2UgbGlmZWN5Y2xlIC8gdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKExPQ0tERVAsIEtBU0FOLCBhbmQgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsb2NhbCB0cmFuc3BvcnQgZW5kcG9pbnQgbWFuYWdlbWVudC4gSXQgaW1wbGVtZW50cyBybWVtIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgZm9yIHJlY2VpdmVkIGVuY2Fwc3VsYXRpb24gc2ticyBpbiByeHJwY19lbmNhcF9yY3YsIHNrYiBvcnBoYW5pbmcgdW5kZXIgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrIGluIHJ4cnBjX2lvX3RocmVhZCwgc2V0cyBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgbGltaXRzIGluIHJ4cnBjX29wZW5fc29ja2V0LCBhbmQgYWx0ZXJzIHNvY2tldCByZWxlYXNlIG9yZGVyaW5nIGFuZCBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIG5ldHdvcmtpbmcgZmFzdC1wYXRocywgd2FycmFudGluZyBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHNvY2tldCBhY2NvdW50aW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjI5OjMzLjUyMDk4NDg1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxOTk1NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTIwY2FjNGMwZjA2NTMzOTYzYmFmMTE1NWJiMzE2YzlmMDI5ZmJmNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxNToyOTozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcXG5pbmRleCBkYzUxODRhMmZhOWQxLi5jNzcyNDFiMTJmNTk3IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbkBAIC03LDEyICs3LDQ4IEBAXFxuIFxcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3VkcC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW50IHJ4cnBjX2lucHV0X3BhY2tldF9vbl9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc29ja2FkZHJfcnhycGMgKnBlZXJfc3J4LFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuKy8qXFxuKyAqIERyb3AgVURQIHJtZW0gb3duZXJzaGlwIGZvciBwYWNrZXRzIGNoYXJnZWQgaW4gZW5jYXBfcmN2KCkuXFxuKyAqIHNrX2ZvcndhcmRfYWxsb2MgaXMgc2VyaWFsaXNlZCBieSBza19yZWNlaXZlX3F1ZXVlLmxvY2suXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcbitcXHRpZiAoIXNrKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbitcXHRza2Jfb3JwaGFuKHNrYik7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnhycGNfZW5jYXBfcmN2X2Ryb3Aoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldCh1ZHBfc2spO1xcbitcXG4rXFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbitcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpO1xcbitcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XFxuK1xcdH0gZWxzZVxcbisjZW5kaWZcXG4rXFx0e1xcbitcXHRcXHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XFxuK1xcdFxcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xcbitcXHR9XFxuK1xcdHNrX3NrYl9yZWFzb25fZHJvcCh1ZHBfc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9SQ1ZCVUZGKTtcXG4rfVxcbitcXG4gLypcXG4gICogaGFuZGxlIGRhdGEgcmVjZWl2ZWQgb24gdGhlIGxvY2FsIGVuZHBvaW50XFxuICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dFxcbkBAIC0yOCw2ICs2NCw4IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcnhfcXVldWU7XFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqaW9fdGhyZWFkO1xcbitcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XFxuK1xcdHVuc2lnbmVkIGludCByY3ZidWY7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIWxvY2FsKSkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5AQCAtNDEsOCArNzksNiBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmIChza2ItXFx1MDAzZXRzdGFtcCA9PSAwKVxcbiBcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XFxuIFxcbi1cXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuLVxcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuIFxcdHJ4X3F1ZXVlID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZTtcXG4gI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gXFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxcbkBAIC01Miw2ICs4OCwyNCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gI2VuZGlmXFxuIFxcbitcXHRyY3ZidWYgPSBSRUFEX09OQ0UodWRwX3NrLVxcdTAwM2Vza19yY3ZidWYpO1xcbitcXHRoZWFkcm9vbSA9IFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4rXFx0aWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgK1xcbitcXHQgICAgc2tiLVxcdTAwM2V0cnVlc2l6ZSArIGhlYWRyb29tIFxcdTAwM2U9IHJjdmJ1ZiB8fFxcbitcXHQgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1ZHBfc2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuK1xcdFxcdHJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNrYi1cXHUwMDNlZGV2ID0gTlVMTDtcXG4rXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4rXFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuK1xcbitcXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuK1xcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuIFxcdHNrYl9xdWV1ZV90YWlsKHJ4X3F1ZXVlLCBza2IpO1xcbiBcXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ3MSw2ICs1MjUsOSBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdFxcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xcbiBcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnJ4X3F1ZXVlKSkpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbWFyayA9PSBSWFJQQ19TS0JfTUFSS19QQUNLRVQpXFxuK1xcdFxcdFxcdFxcdHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYik7XFxuIFxcdFxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2VtYXJrKSB7XFxuIFxcdFxcdFxcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxcbiBcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXFxuaW5kZXggMTY5ZjlkZmRhYTc3Zi4uMmY5Mzg5MWU4NDFhYiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcXG4rKysgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mID0gezB9O1xcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcXG4gXFx0c3RydWN0IHNvY2sgKnVzaztcXG4rXFx0dTMyIHJjdmJ1ZjtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwiJXB7JWQsJWR9XFxcIixcXG5AQCAtMTk4LDYgKzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcXG4gXFxuIFxcdC8qIHNldCB0aGUgc29ja2V0IHVwICovXFxuIFxcdHVzayA9IGxvY2FsLVxcdTAwM2Vzb2NrZXQtXFx1MDAzZXNrO1xcbitcXHQvKiBPbmUgYWR2ZXJ0aXNlZCBvcmRpbmFyeS1EQVRBIHdpbmRvdywgbm90IGp1bWJvLW1heC4gKi9cXG4rXFx0cmN2YnVmID0gcnhycGNfcnhfd2luZG93X3NpemUgKiBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcXG4rXFx0cmN2YnVmICs9IHJjdmJ1ZiAvIDQ7XFxuK1xcdHJjdmJ1ZiA9IGNsYW1wKHJjdmJ1ZiwgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX2RlZmF1bHQpLFxcbitcXHRcXHQgICAgICAgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX21heCkpO1xcbitcXHRXUklURV9PTkNFKHVzay1cXHUwMDNlc2tfcmN2YnVmLCByY3ZidWYpO1xcbiBcXHR1c2stXFx1MDAzZXNrX2Vycm9yX3JlcG9ydCA9IHJ4cnBjX2Vycm9yX3JlcG9ydDtcXG4gXFxuIFxcdHN3aXRjaCAoc3J4LVxcdTAwM2V0cmFuc3BvcnQuZmFtaWx5KSB7XFxuQEAgLTQzNyw4ICs0NDQsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0aWYgKHNvY2tldCkge1xcbiBcXHRcXHRsb2NhbC1cXHUwMDNlc29ja2V0ID0gTlVMTDtcXG4gXFx0XFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xcbi1cXHRcXHRzb2NrZXQtXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xcbi1cXHRcXHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVxcdTAwM2VzaywgTlVMTCk7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcXG5AQCAtNDQ4LDYgKzQ1NSwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuICNlbmRpZlxcbiBcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFxuK1xcdGlmIChzb2NrZXQpXFxuK1xcdFxcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xcbitcXG4gXFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcXG4gXFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfYWxsb2MpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjI5OjM0LjA4MzY5MDM1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY5NTE5Mjk4MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJBRl9SWFJQQ19JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfZW5jYXBfcmN2XCIsXG4gICAgXCJyeHJwY19pb190aHJlYWRcIixcbiAgICBcInJ4cnBjX3NrYl9vcnBoYW5fdWRwXCIsXG4gICAgXCJyeHJwY19kZXN0cm95X2xvY2FsXCIsXG4gICAgXCJyeHJwY19vcGVuX3NvY2tldFwiLFxuICAgIFwicnhycGNfbG9va3VwX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEyMGNhYzRjMGYwNjUzMzk2M2JhZjExNTViYjMxNmM5ZjAyOWZiZjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxNToyOTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9pb190aHJlYWQuYyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuaW5kZXggZGM1MTg0YTJmYTlkMS4uYzc3MjQxYjEyZjU5NyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuY1xuKysrIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG5AQCAtNywxMiArNyw0OCBAQFxuIFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuIFxuKyNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4gc3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqcGVlcl9zcngsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbisvKlxuKyAqIERyb3AgVURQIHJtZW0gb3duZXJzaGlwIGZvciBwYWNrZXRzIGNoYXJnZWQgaW4gZW5jYXBfcmN2KCkuXG4rICogc2tfZm9yd2FyZF9hbGxvYyBpcyBzZXJpYWxpc2VkIGJ5IHNrX3JlY2VpdmVfcXVldWUubG9jay5cbisgKi9cbitzdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cdTAwM2VzaztcbitcbitcdGlmICghc2spXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0c2tiX29ycGhhbihza2IpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnhycGNfZW5jYXBfcmN2X2Ryb3Aoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldCh1ZHBfc2spO1xuK1xuK1x0c2tfZHJvcHNfaW5jKHVkcF9zayk7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4rXHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XG4rXHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lORVJST1JTKTtcbitcdH0gZWxzZVxuKyNlbmRpZlxuK1x0e1xuK1x0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XG4rXHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xuK1x0fVxuK1x0c2tfc2tiX3JlYXNvbl9kcm9wKHVkcF9zaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkYpO1xuK31cbitcbiAvKlxuICAqIGhhbmRsZSBkYXRhIHJlY2VpdmVkIG9uIHRoZSBsb2NhbCBlbmRwb2ludFxuICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dFxuQEAgLTI4LDYgKzY0LDggQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcnhfcXVldWU7XG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YSh1ZHBfc2spO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XG4rXHR1bnNpZ25lZCBpbnQgcmN2YnVmO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFsb2NhbCkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtNDEsOCArNzksNiBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXRzdGFtcCA9PSAwKVxuIFx0XHRza2ItXHUwMDNldHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcbiBcbi1cdHNrYi1cdTAwM2VtYXJrID0gUlhSUENfU0tCX01BUktfUEFDS0VUO1xuLVx0cnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTtcbiBcdHJ4X3F1ZXVlID0gXHUwMDI2bG9jYWwtXHUwMDNlcnhfcXVldWU7XG4gI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbiBcdGlmIChyeHJwY19pbmplY3RfcnhfZGVsYXkgfHxcbkBAIC01Miw2ICs4OCwyNCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gI2VuZGlmXG4gXG4rXHRyY3ZidWYgPSBSRUFEX09OQ0UodWRwX3NrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXHRoZWFkcm9vbSA9IFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0aWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoXHUwMDI2dWRwX3NrLVx1MDAzZXNrX3JtZW1fYWxsb2MpICtcbitcdCAgICBza2ItXHUwMDNldHJ1ZXNpemUgKyBoZWFkcm9vbSBcdTAwM2U9IHJjdmJ1ZiB8fFxuK1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXHUwMDNldHJ1ZXNpemUpKSB7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0XHRyeHJwY19lbmNhcF9yY3ZfZHJvcCh1ZHBfc2ssIHNrYik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dWRwX3NrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rXHRza2JfZHN0X2Ryb3Aoc2tiKTtcbitcbitcdHNrYi1cdTAwM2VtYXJrID0gUlhSUENfU0tCX01BUktfUEFDS0VUO1xuK1x0cnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTtcbiBcdHNrYl9xdWV1ZV90YWlsKHJ4X3F1ZXVlLCBza2IpO1xuIFx0d2FrZV91cF9wcm9jZXNzKGlvX3RocmVhZCk7XG4gXHRyZXR1cm4gMDtcbkBAIC00NzEsNiArNTI1LDkgQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHQvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi9cbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnJ4X3F1ZXVlKSkpIHtcbiBcdFx0XHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4rXG4rXHRcdFx0aWYgKHNrYi1cdTAwM2VtYXJrID09IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVClcbitcdFx0XHRcdHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYik7XG4gXHRcdFx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuIFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxuIFx0XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjJmOTM4OTFlODQxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbiBcdHN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmYgPSB7MH07XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcbiBcdHN0cnVjdCBzb2NrICp1c2s7XG4rXHR1MzIgcmN2YnVmO1xuIFx0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcIiVweyVkLCVkfVwiLFxuQEAgLTE5OCw2ICsxOTksMTIgQEAgc3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHQvKiBzZXQgdGhlIHNvY2tldCB1cCAqL1xuIFx0dXNrID0gbG9jYWwtXHUwMDNlc29ja2V0LVx1MDAzZXNrO1xuK1x0LyogT25lIGFkdmVydGlzZWQgb3JkaW5hcnktREFUQSB3aW5kb3csIG5vdCBqdW1iby1tYXguICovXG4rXHRyY3ZidWYgPSByeHJwY19yeF93aW5kb3dfc2l6ZSAqIFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyO1xuK1x0cmN2YnVmICs9IHJjdmJ1ZiAvIDQ7XG4rXHRyY3ZidWYgPSBjbGFtcChyY3ZidWYsIFJFQURfT05DRShzeXNjdGxfcm1lbV9kZWZhdWx0KSxcbitcdFx0ICAgICAgIFJFQURfT05DRShzeXNjdGxfcm1lbV9tYXgpKTtcbitcdFdSSVRFX09OQ0UodXNrLVx1MDAzZXNrX3JjdmJ1ZiwgcmN2YnVmKTtcbiBcdHVzay1cdTAwM2Vza19lcnJvcl9yZXBvcnQgPSByeHJwY19lcnJvcl9yZXBvcnQ7XG4gXG4gXHRzd2l0Y2ggKHNyeC1cdTAwM2V0cmFuc3BvcnQuZmFtaWx5KSB7XG5AQCAtNDM3LDggKzQ0NCw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0aWYgKHNvY2tldCkge1xuIFx0XHRsb2NhbC1cdTAwM2Vzb2NrZXQgPSBOVUxMO1xuIFx0XHRrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7XG4tXHRcdHNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuLVx0XHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcbitcdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiArNDU1LDEwIEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xuICNlbmRpZlxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfcXVldWUpO1xuK1xuK1x0aWYgKHNvY2tldClcbitcdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXG4gXHRyeHJwY19wdXJnZV9jbGllbnRfY29ubmVjdGlvbnMobG9jYWwpO1xuIFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFx1MDAyNmxvY2FsLVx1MDAzZXR4X2FsbG9jKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNToyOTozNC4wODM2OTIzMTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NjM3OTk3NTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFJYUlBDIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIExvb2tzIGxpa2Ugd2UgaGF2ZSBzb21lIG5ldyBmdW5jdGlvbnM6IGByeHJwY19za2Jfb3JwaGFuX3VkcChza2IpYCBhbmQgYHJ4cnBjX2VuY2FwX3Jjdl9kcm9wYC4gSW50ZXJlc3RpbmcuIEFsc28sIGByeHJwY19lbmNhcF9yY3ZgIGlzIG5vdyBkb2luZyBzb21lIGNoZWNrcyByZWxhdGVkIHRvIFVEUCByZWNlaXZlIGJ1ZmZlciBhbmQgYHNrX3JtZW1fc2NoZWR1bGVgLCBhbmQgY3J1Y2lhbGx5LCBpdCdzIHVzaW5nIGBza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spYC4gTm93LCBJIHNlZSB0aGF0IGluIGByeHJwY19pb190aHJlYWRgLCB3aGVuIGFuIFNLQiBtYXJrZWQgYXMgYFJYUlBDX1NLQl9NQVJLX1BBQ0tFVGAgaXMgZGVxdWV1ZWQsIGl0IGNhbGxzIHRoYXQgYHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYilgIGZ1bmN0aW9uLiBBbHNvLCBgcnhycGNfb3Blbl9zb2NrZXRgIGlzIHNldHRpbmcgYHVzay1cdTAwM2Vza19yY3ZidWZgLiBGaW5hbGx5LCBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAsIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGNhcmVmdWwgaGFuZGxpbmcgb2YgYHNrX3VzZXJfZGF0YWAgdXNpbmcgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBhbmQgYHN5bmNocm9uaXplX3JjdWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfcmVsZWFzZWAgKmFmdGVyKiBgcnhycGNfcHVyZ2VfcXVldWVgLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhpcyB0aHJvdWdoIHRoZSBsZW5zIG9mIG15IHRyaWFnZSBydWxlcy4gQmFzZWQgb24gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHksIGFjY2Vzc2liaWxpdHkgaXMga2V5LCBhbmQgYEFGX1JYUlBDYCBpcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0IGZhbWlseS4gVGhlcmVmb3JlLCBpdCdzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWV0aG9kcy4gU28sIGl0J3MgZGVmaW5pdGVseSBpbiBzY29wZS4gVGhpcyBwYXRjaCB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtczogaXQgbW9kaWZpZXMgYEFGX1JYUlBDYCwgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBxdWV1aW5nLCB0aGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgYWxzbyBgc2tfdXNlcl9kYXRhYC4gVGhpcyBtYWtlcyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgaXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyByZWxhdGVkIHRvIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgLCBgc2tfcm1lbV9hbGxvY2AsIGFuZCBgc2tiX29ycGhhbmAsIGFuZCBsaWZlY3ljbGUgb2YgdGhlIGxvY2FsIHNvY2tldCBvYmplY3RzLiBEZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBzZXQuIFRpbWUgdG8gcnVuIGEgcXVpY2sgYGdyZXBwZXJgIGNoZWNrIG9uIGBBRl9SWFJQQ2AgaW4gYEtjb25maWdgIHRvIHNlZSB3aGF0IGRlcGVuZHMgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToxMC40NjM2NzA5NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MzEwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRl9SWFJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL0tjb25maWctNS1cXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xcbm5ldC9yeHJwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlJ4UlBDIHNlc3Npb24gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTI1PWlmIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctMjYtXFxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzMtXFxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXFxubmV0L3J4cnBjL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxcbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNDktXFxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXFxubmV0L3J4cnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToxMS4wNDE5OTA4NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDE4NDA0OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgbmV0L3J4cnBjKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUnhSUEMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGBuZXQvcnhycGMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbml0aWFsIGRlZmluaXRpb25zLCBzcGVjaWZpY2FsbHkgbGluZXMgMSB0aHJvdWdoLCBzYXksIDI1LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBmZWF0dXJlcyBhbmQgaG93IHRoZXkncmUgZXhwb3NlZCB2aWEgdGhlIGJ1aWxkIHN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGF0IGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgcHJvdG9jb2wgaXRzZWxmLCBwZXJoYXBzIHNvbWUgaW5pdGlhbCBmZWF0dXJlIGZsYWdzIGxpa2Ugc2VjdXJpdHkgb3B0aW9ucywgYW5kIG1heWJlIGEgZmV3IG90aGVyIGJhc2ljIHNldHRpbmdzLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXksIHNvIEknbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGRlY2xhcmVkIGVhcmx5IG9uLiBPbmNlIEkgaGF2ZSB0aGUgYmFzaWMgb3B0aW9ucyBmaWd1cmVkIG91dCwgSSBjYW4gdW5kZXJzdGFuZCB3aGF0IG1vZHVsZXMgYW5kIHN1Yi1mZWF0dXJlcyBiZWNvbWUgYXZhaWxhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToxNy40NjAzOTg5NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSeFJQQyBzZXNzaW9uIHNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFGX1JYUlBDXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcXG4gIDExOlxcdFxcdHNlbGVjdCBLRVlTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XFxuICAxNTpcXHRcXHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXFxuICAxNjpcXHRcXHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBUaGVzZSBhcmUgdXNlZCBmb3IgQUZTIGtlcm5lbCBmaWxlc3lzdGVtIGFuZCB1c2Vyc3BhY2UgdXRpbGl0aWVzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoaXMgbW9kdWxlIGF0IHRoZSBtb21lbnQgb25seSBzdXBwb3J0cyBjbGllbnQgb3BlcmF0aW9ucyBhbmQgaXNcXG4gIDIxOlxcdFxcdCAgY3VycmVudGx5IGluY29tcGxldGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICAyNDpcXHRcXG4gIDI1OlxcdGlmIEFGX1JYUlBDXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBBRl9SWFJQQ19JUFY2XFxuICAyODpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgQUZfUlhSUEMgdG8gdXNlIElQVjYgVURQIGFzIHdlbGwgYXMgSVBWNCBVRFAgYXNcXG4gIDMyOlxcdFxcdCAgaXRzIG5ldHdvcmsgdHJhbnNwb3J0LlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkluamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjMxOjE3LjQ2MDQ3MDEwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMTEzODM0MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIFByb3RvY29sIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkaWZmLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkludGVyZXN0aW5nLCB3ZSd2ZSBnb3QgSVB2NiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlIHJlbGF0ZWQgdG8gVURQIHN0YXRzLlwiIFNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcbiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG5cdFx0X19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfUkNWQlVGRVJST1JTKTtcblx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XG5cdH0gZWxzZVxuI2VuZGlmXG5gYGBcblxuTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIG1ha2luZyBhc3NvY2lhdGlvbnMuIEkgc2VlIHRoZSBJUHY2IGNoZWNrLCBhbmQgdGhlbiBJJ20gcmVtaW5kZWQgdGhhdCBgQUZfUlhSUENfSVBWNmAgaXMgYWxzbyBhIHRoaW5nLiBUaGF0IHJhaXNlcyBhIHF1ZXN0aW9uLCBhbmQgaXQncyBhIGNyaXRpY2FsIG9uZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblNvLCBJIG5lZWQgdG8ga25vdyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBgQUZfUlhSUENgIGZhbWlseSBhbmQgSVB2Ni4gQXJlIHRoZXkgaW5kZXBlbmRlbnQ/IElzIGBBRl9SWFJQQ19JUFY2YCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGJ1aWx0IG9uIHRvcCBvZiBgQUZfUlhSUENgLCBvciBhcmUgdGhleSBvcnRob2dvbmFsPyBPciBpcyBgQUZfUlhSUENfSVBWNmAgYWx3YXlzIGVuYWJsZWQgd2hlbiBJUHY2IGlzIGVuYWJsZWQ/IEFyZSB0aGV5IGxpa2UgYElORVRgIGFuZCBgSVBWNmAgaW4gc29tZSByZXNwZWN0cz8gSSdtIGJldHRpbmcgdGhhdCB0aGUgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGJ5IGBtYWtlYCBpbmZyYXN0cnVjdHVyZS5cblxuVG8gdmVyaWZ5IHRoaXMsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbXBpbGF0aW9uIHJ1bGVzLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBvdmVyIHRvIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGJlLCB0byBmaW5kIG91dCBleGFjdGx5IHdoYXQgZ2V0cyBjb21waWxlZCBhbmQgbGlua2VkIHdoZW4gYEFGX1JYUlBDYCBpcyBlbmFibGVkLCBhbmQgaG93IElQdjYgaW50ZWdyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGF0IGNvbnRleHQuIFRoYXQgZmlsZSB3aWxsIHRlbGwgdGhlIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzE6MjkuNTc0MzA2ODg5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFJ4UlBDXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19BRl9SWFJQQykgKz0gcnhycGMub1xcbiAgIDc6XFx0XFxuICAgODpcXHRyeHJwYy15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFmX3J4cnBjLm8gXFxcXFxcbiAgMTA6XFx0XFx0Y2FsbF9hY2NlcHQubyBcXFxcXFxuICAxMTpcXHRcXHRjYWxsX2V2ZW50Lm8gXFxcXFxcbiAgMTI6XFx0XFx0Y2FsbF9vYmplY3QubyBcXFxcXFxuICAxMzpcXHRcXHRjYWxsX3N0YXRlLm8gXFxcXFxcbiAgMTQ6XFx0XFx0Y29ubl9jbGllbnQubyBcXFxcXFxuICAxNTpcXHRcXHRjb25uX2V2ZW50Lm8gXFxcXFxcbiAgMTY6XFx0XFx0Y29ubl9vYmplY3QubyBcXFxcXFxuICAxNzpcXHRcXHRjb25uX3NlcnZpY2UubyBcXFxcXFxuICAxODpcXHRcXHRpbnB1dC5vIFxcXFxcXG4gIDE5OlxcdFxcdGlucHV0X3JhY2subyBcXFxcXFxuICAyMDpcXHRcXHRpbnNlY3VyZS5vIFxcXFxcXG4gIDIxOlxcdFxcdGlvX3RocmVhZC5vIFxcXFxcXG4gIDIyOlxcdFxcdGtleS5vIFxcXFxcXG4gIDIzOlxcdFxcdGxvY2FsX2V2ZW50Lm8gXFxcXFxcbiAgMjQ6XFx0XFx0bG9jYWxfb2JqZWN0Lm8gXFxcXFxcbiAgMjU6XFx0XFx0bWlzYy5vIFxcXFxcXG4gIDI2OlxcdFxcdG5ldF9ucy5vIFxcXFxcXG4gIDI3OlxcdFxcdG9vYi5vIFxcXFxcXG4gIDI4OlxcdFxcdG91dHB1dC5vIFxcXFxcXG4gIDI5OlxcdFxcdHBlZXJfZXZlbnQubyBcXFxcXFxuICAzMDpcXHRcXHRwZWVyX29iamVjdC5vIFxcXFxcXG4gIDMxOlxcdFxcdHJlY3Ztc2cubyBcXFxcXFxuICAzMjpcXHRcXHRydHQubyBcXFxcXFxuICAzMzpcXHRcXHRzZWN1cml0eS5vIFxcXFxcXG4gIDM0OlxcdFxcdHNlbmRtc2cubyBcXFxcXFxuICAzNTpcXHRcXHRzZXJ2ZXJfa2V5Lm8gXFxcXFxcbiAgMzY6XFx0XFx0c2tidWZmLm8gXFxcXFxcbiAgMzc6XFx0XFx0dHhidWYubyBcXFxcXFxuICAzODpcXHRcXHR1dGlscy5vXFxuICAzOTpcXHRcXG4gIDQwOlxcdHJ4cnBjLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToyOS41NzQzNzY2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDg4Nzc3MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSWFJQQyBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSXQncyBjbGVhciB0aGF0IGJvdGggYGlvX3RocmVhZC5vYCBhbmQgYGxvY2FsX29iamVjdC5vYCBhcmUgZXNzZW50aWFsIGNvbXBvbmVudHMgb2YgYHJ4cnBjLXlgIHdoZW4gYENPTkZJR19BRl9SWFJQQ2AgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIEFuZCwgYXMgZXhwZWN0ZWQsIHdlIGFsc28gcmVxdWlyZSBgQ09ORklHX0lORVRgIHRvIGJlIGVuYWJsZWQgaWYgYENPTkZJR19BRl9SWFJQQ2AgaXMgc2V0LiBJZiB3ZSB3YW50IElQdjYgc3VwcG9ydCwgd2UnbGwgbmVlZCBib3RoIGBDT05GSUdfSVBWNmAgYW5kIGBDT05GSUdfQUZfUlhSUENfSVBWNmAuIFN0YW5kYXJkIHN0dWZmIHNvIGZhci5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgc3BlY2lmaWMgc3ltYm9scyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSBzZWUgdGhlc2Uga2V5IGNoYW5nZXM6XG5cbjEuICBgcnhycGNfZW5jYXBfcmN2YCBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYC4gTG9va3MgbGlrZSB0aGV5J3JlIGVuZm9yY2luZyBtb3JlIHJvYnVzdCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGggYHJtZW1gIGNoZWNrcyDigJMgdXNpbmcgYHNrX3JtZW1fYWxsb2NgLCBgc2tiX3NldF9vd25lcl9yYCwgYW5kIGBza19ybWVtX3NjaGVkdWxlYC4gU21hcnQgbW92ZTsgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0d29ya2luZyBpcyBhbHdheXMgY3JpdGljYWwuIEFuZCwgaXQgbm93IGNhbGxzIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAuIEknbGwgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuXG5cbjIuICBgcnhycGNfc2tiX29ycGhhbl91ZHBgIGlzIHN0YXRpYyB3aXRoaW4gYGlvX3RocmVhZC5jYC4gSXQncyBjYWxsZWQgZnJvbSBgcnhycGNfaW9fdGhyZWFkYCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBpbmxpbmVkIG9yIG5vdC4gV2UnbGwgY2hlY2sgdGhlIGNvbXBpbGVyIG91dHB1dC5cblxuMy4gIGByeHJwY19pb190aHJlYWRgIGluIGBpb190aHJlYWQuY2AuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBiaXQuIEl0IGNhbGxzIGByeHJwY19za2Jfb3JwaGFuX3VkcGAgc3BlY2lmaWNhbGx5IHdoZW4gYHNrYi1cdTAwM2VtYXJrYCBpcyBlcXVhbCB0byBgUlhSUENfU0tCX01BUktfUEFDS0VUYCwgSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuXG5cbjQuICBgcnhycGNfb3Blbl9zb2NrZXRgIGlzIHN0YXRpYyBpbiBgbG9jYWxfb2JqZWN0LmNgLiAgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgYmVpbmcgY2FsbGVkIG9ubHkgYnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGlmIGF0IGFsbC5cblxuNS4gIEZpbmFsbHksIGByeHJwY19kZXN0cm95X2xvY2FsYCwgYWxzbyBpbiBgbG9jYWxfb2JqZWN0LmNgLCBpcyBleHBvcnRlZCwgc28gaXQncyBhIHB1YmxpYyBzeW1ib2w6IGB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClgLlxuXG5BbHJpZ2h0LCBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbG9jYWxfb2JqZWN0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGByeHJwY19vcGVuX3NvY2tldGAgYW5kIGByeHJwY19kZXN0cm95X2xvY2FsYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzaWduaWZpY2FudCBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzE6NTcuNjYzMTU2ODY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM2OTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19vcGVuX3NvY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTEwOT1zdGF0aWMgc3RydWN0IHJ4cnBjX2xvY2FsICpyeHJwY19hbGxvY19sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTYxLSAqL1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzoxNjI6c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE2My17XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MjU0PXN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfbG9va3VwX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0yOTktXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjMwMDpcXHRyZXQgPSByeHJwY19vcGVuX3NvY2tldChsb2NhbCwgbmV0KTtcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzAxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMTo1Ny43MTQ1MzI0MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQ1ODc3MDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQ2hlY2tpbmcgSW50ZXJuYWwgRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVjbGFyYXRpb25zIGZvciBgcnhycGNfbG9va3VwX2xvY2FsYCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLiBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgYXItaW50ZXJuYWwuaGAuIEkndmUgZ290IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW50ZXJuYWxseS4gVGhpcyBpcyB0aGUgY29ybmVyc3RvbmUgb2YgdW5kZXJzdGFuZGluZyB0aGUgbG93LWxldmVsIGJlaGF2aW9yIEkgbmVlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBwcmVjaXNlIHNpZ25hdHVyZXMsIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGV5IG9wZXJhdGUgb24sIGFuZCBhbnkgY29tbWVudHMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZWlyIGludGVuZGVkIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjYXZlYXRzLiBBY2N1cmFjeSBoZXJlIGlzIHBhcmFtb3VudCwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgdGhlIG9ubHkgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MDcuMTczMzA1MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODg4NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4cnBjXyhkZXN0cm95fGxvb2t1cClfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hZl9yeHJwYy5jPTEzMT1zdGF0aWMgaW50IHJ4cnBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNhZGRyLCBpbnQgbGVuKVxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMTUwLVxcdFxcdHJ4LVxcdTAwM2VzcnggPSAqc3J4O1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjE1MTpcXHRcXHRsb2NhbCA9IHJ4cnBjX2xvb2t1cF9sb2NhbChzb2NrX25ldChcXHUwMDI2cngtXFx1MDAzZXNrKSwgXFx1MDAyNnJ4LVxcdTAwM2VzcngpO1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTE1Mi1cXHRcXHRpZiAoSVNfRVJSKGxvY2FsKSkge1xcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM9NTM4PXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtNTc4LVxcdFxcdH1cXG5uZXQvcnhycGMvYWZfcnhycGMuYzo1Nzk6XFx0XFx0bG9jYWwgPSByeHJwY19sb29rdXBfbG9jYWwoc29ja19uZXQoc29jay1cXHUwMDNlc2spLCBcXHUwMDI2cngtXFx1MDAzZXNyeCk7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtNTgwLVxcdFxcdGlmIChJU19FUlIobG9jYWwpKSB7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMzI1PXZvaWQgcnhycGNfbG9jYWxfZG9udF9mcmFnbWVudChjb25zdCBzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBib29sIHNldCk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTMyNjpzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2xvb2t1cF9sb2NhbChzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMzI3LXN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfZ2V0X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqLCBlbnVtIHJ4cnBjX2xvY2FsX3RyYWNlKTtcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEzMzE9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKiwgZW51bSByeHJwY19sb2NhbF90cmFjZSk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTMzMjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTMzMy12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhzdHJ1Y3QgcnhycGNfbmV0ICopO1xcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTQ4ND1pbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjM1LVxcdHJ4cnBjX3NlZV9sb2NhbChsb2NhbCwgcnhycGNfbG9jYWxfc3RvcCk7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjYzNjpcXHRyeHJwY19kZXN0cm95X2xvY2FsKGxvY2FsKTtcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjM3LVxcdFdSSVRFX09OQ0UobG9jYWwtXFx1MDAzZWlvX3RocmVhZCwgTlVMTCk7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTI1My0gKi9cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MjU0OnN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfbG9va3VwX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMjU1LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfcnhycGMgKnNyeClcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MDU9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBlbnVtIHJ4cnBjX2xvY2FsX3RyYWNlIHdoeSlcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00MjYtICovXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MDcuMjI2MjAyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM4NjcwNDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcnhycGNfZW5jYXBfcmN2YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGByeHJwY19lbmNhcF9yY3ZgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIOKAkyB3aGF0IGlucHV0cyBpdCBleHBlY3RzLCB3aGF0IGl0J3MgcmV0dXJuaW5nLCBhbGwgdGhlIHVzdWFsIGRldGFpbHMuIFRoZW4sIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBsb2NhdGUgZXZlcnkgcGxhY2UgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyAqY2FsbGVkKi4gS25vd2luZyB0aGUgY2FsbHNpdGVzIGdpdmVzIG1lIGNydWNpYWwgY29udGV4dDsgaXQgdGVsbHMgbWUgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGFuZCB3aGF0IGRhdGEgaXQncyBsaWtlbHkgb3BlcmF0aW5nIG9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgYWxsIHRoZSBjYWxsZXJzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gcGllY2UgdG9nZXRoZXIgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MTQuNjEyOTEwNTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTg2NjM0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19lbmNhcF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEyNjg9c3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX3RscF9pbml0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTI3Ny0gKi9cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMjc4OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTI3OS12b2lkIHJ4cnBjX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqKTtcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYz0yMj1zdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTMzLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYzozNDpzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0zNS17XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjEtICovXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjYyOmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjMte1xcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTk3LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1ZHBfc2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjk4OlxcdFxcdHJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTtcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtOTktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NC1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk1OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5Ni1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjMyOjE1LjI1ODgxMDY3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjY1NTk0NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJ4UlBDIFVEUCBFbmNhcHN1bGF0aW9uIGFuZCBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gY2hhbmdlLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkIGFuZCB3aHksIGdpdmVuIHRoZSBzY29wZS5cblxuRmlyc3QsIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBjYWxsYmFjaywgYHJ4cnBjX2VuY2FwX3JjdmAuIFRoaXMgZnVuY3Rpb24sIGFzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50LCBpcyBmdW5kYW1lbnRhbC4gSXQncyB0aGUgcmVjZWl2ZXIgb2YgdGhlIFVEUCBwYWNrZXRzLiBJIHNlZSB0aGF0IGl0J3MgdGhlIG9uZSB0aGF0IG5vdyBuZWVkcyBjYXJlZnVsIGFjY291bnRpbmcgb2Ygc29ja2V0IGJ1ZmZlciB1c2FnZSwgY2hlY2tpbmcgYHVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jYCBhZ2FpbnN0IGBza19yY3ZidWZgLCBzZXR0aW5nIG93bmVyc2hpcCB1c2luZyBgc2tiX3NldF9vd25lcl9yYCB3aXRoaW4gYSBsb2NrLCBhbmQgZHJvcHBpbmcgcGFja2V0cyB3aGVuIG92ZXIgdGhlIGxpbWl0LiBUaGlzIGlzIGEgdmVyeSBpbnRlcmVzdGluZyBwaWVjZSBvZiBsb2dpYyB0aGF0IHRvdWNoZXMgdGhlIGNyaXRpY2FsIHJlY2VpdmUgcGF0aC5cblxuVGhlbiwgdGhlcmUgaXMgYHJ4cnBjX2lvX3RocmVhZGAsIHRoZSBrZXJuZWwgdGhyZWFkIGhhbmRsaW5nIEkvTyBmb3IgdGhlIFJ4UlBDIGxvY2FsIGVuZHBvaW50LiBgcnhycGNfc2tiX29ycGhhbl91ZHAoKWAgaXMgYWxzbyB1c2VkIGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24ncyByb2xlIGluIHRoZSBsaWZlY3ljbGUgaXMgY3J1Y2lhbCwgc2luY2UgaXQgaGFuZGxlcyBkcm9wcGluZyBzb2NrZXQgb3duZXJzaGlwLlxuXG5gcnhycGNfZGVzdHJveV9sb2NhbGAgaXMgZXNzZW50aWFsLiBJdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdGVhcmluZyBkb3duIHRoZSBSeFJQQyBsb2NhbCBlbmRwb2ludCBhbmQgY2xvc2luZyB0aGUgc29ja2V0LiBJJ3ZlIG5vdGVkIHRoYXQgaXQncyBub24tc3RhdGljLCBzbywgaXQncyBhIGtleSBBUEkgZW50cnlwb2ludC4gVGhlIGNoYW5nZSBpbmNsdWRlcyBzb2NrZXQgdGVhcmRvd24gYW5kIFJDVSBoYW5kbGluZyBtb2RpZmljYXRpb25zLlxuXG5UaGUgYHJ4cnBjX2xvb2t1cF9sb2NhbGAgKG9yIGByeHJwY19vcGVuX3NvY2tldGApIGlzIHVzZWQgdG8gb3BlbiB0aGUgVURQIHR1bm5lbCBzb2NrZXQgYW5kIGluaXRpYWxpemUgaXQuIEl0cyBtb2RpZmljYXRpb25zIHRvIHNvY2tldCBidWZmZXIgc2l6aW5nIGFyZSBhbHNvIG9mIGludGVyZXN0LlxuXG5UaGUgc3RhdGljIGZ1bmN0aW9ucyBgcnhycGNfc2tiX29ycGhhbl91ZHBgLCBhbmQgYHJ4cnBjX29wZW5fc29ja2V0YCBhbmQgYHJ4cnBjX2VuY2FwX3Jjdl9kcm9wYCBhbHNvIG5lZWQgdG8gYmUgaW5jbHVkZWQgc2luY2UgdGhleSBhcmUgcG90ZW50aWFsbHkgcmVsZXZhbnQuXG5cbkJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudDpcbi0gYHJ4cnBjX2VuY2FwX3JjdmBcbi0gYHJ4cnBjX2lvX3RocmVhZGBcbi0gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgXG4tIGByeHJwY19vcGVuX3NvY2tldGBcbi0gYHJ4cnBjX3NrYl9vcnBoYW5fdWRwYFxuLSBgcnhycGNfbG9va3VwX2xvY2FsYFxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9ucy4gSSdtIHNlZWluZyBgQUZfUlhSUENgLCBgSU5FVGAsIGBBRl9SWFJQQ19JUFY2YCwgYW5kIGBJUFY2YC4gVGhpcyBtYWtlcyBzZW5zZS4gYEFGX1JYUlBDYCBzZWVtcyB0byBiZSB0aGUgY29yZSwgcmVxdWlyaW5nIGBJTkVUYCwgYW5kIGBBRl9SWFJQQ19JUFY2YCBkZXBlbmRzIG9uIGJvdGggYEFGX1JYUlBDYCBhbmQgYElQVjZgLlxuXG5TbywgZm9yIFwiRW5hYmxlQ29uZmlnc1wiLCBJJ2xsIGxpc3Q6XG4tIGBBRl9SWFJQQ2Bcbi0gYElORVRgXG4tIGBJUFY2YFxuLSBgQUZfUlhSUENfSVBWNmBcblxuSSdtIGNvbmZpZGVudCB0aGlzIGNvdmVycyB0aGUgaW1wb3J0YW50IGFyZWFzLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHNvY2tldCBidWZmZXIgYWNjb3VudGluZywgaW50cm9kdWNpbmcgbG9ja2luZywgYW5kIGFmZmVjdGluZyBib3RoIHRoZSByZWNlaXZlIHBhdGggYW5kIHRoZSB0ZWFyZG93biBsaWZlY3ljbGUuIEl0J3MgdG91Y2hpbmcgYnVmZmVyIGFsbG9jYXRpb24sIG93bmVyc2hpcCwgYW5kIHJlbGVhc2UsIHNvIEkgd291bGQgY2VydGFpbmx5IGNvbnNpZGVyIHRoaXMgXCJXb3J0aEZ1enppbmdcIiBkdWUgdG8gdGhlIGhpZ2ggcmlzayBvZiByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgYW5kIHJlZmVyZW5jZSBjb3VudCBtaXNtYXRjaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNywiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjMyOjIzLjUyNDQwNzQ4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTc2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQUZfUlhSUENfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19za2Jfb3JwaGFuX3VkcFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiLFxuICAgIFwicnhycGNfb3Blbl9zb2NrZXRcIixcbiAgICBcInJ4cnBjX2xvb2t1cF9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJ4UlBDIFVEUCBlbmNhcHN1bGF0aW9uIHBhY2tldCByZWNlcHRpb24gYW5kIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBtYW5hZ2VtZW50LiBJdCBpbXBsZW1lbnRzIHJtZW0gYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBmb3IgcmVjZWl2ZWQgZW5jYXBzdWxhdGlvbiBza2JzIGluIHJ4cnBjX2VuY2FwX3Jjdiwgc2tiIG9ycGhhbmluZyB1bmRlciBza19yZWNlaXZlX3F1ZXVlLmxvY2sgaW4gcnhycGNfaW9fdGhyZWFkLCBzZXRzIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgaW4gcnhycGNfb3Blbl9zb2NrZXQsIGFuZCBhbHRlcnMgc29ja2V0IHJlbGVhc2Ugb3JkZXJpbmcgYW5kIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gcnhycGNfZGVzdHJveV9sb2NhbC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgbmV0d29ya2luZyBmYXN0LXBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igc29ja2V0IGFjY291bnRpbmcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQUZfUlhSUENfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19za2Jfb3JwaGFuX3VkcFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiLFxuICAgIFwicnhycGNfb3Blbl9zb2NrZXRcIixcbiAgICBcInJ4cnBjX2xvb2t1cF9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJ4UlBDIFVEUCBlbmNhcHN1bGF0aW9uIHBhY2tldCByZWNlcHRpb24gYW5kIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBtYW5hZ2VtZW50LiBJdCBpbXBsZW1lbnRzIHJtZW0gYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBmb3IgcmVjZWl2ZWQgZW5jYXBzdWxhdGlvbiBza2JzIGluIHJ4cnBjX2VuY2FwX3Jjdiwgc2tiIG9ycGhhbmluZyB1bmRlciBza19yZWNlaXZlX3F1ZXVlLmxvY2sgaW4gcnhycGNfaW9fdGhyZWFkLCBzZXRzIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgaW4gcnhycGNfb3Blbl9zb2NrZXQsIGFuZCBhbHRlcnMgc29ja2V0IHJlbGVhc2Ugb3JkZXJpbmcgYW5kIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gcnhycGNfZGVzdHJveV9sb2NhbC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgbmV0d29ya2luZyBmYXN0LXBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igc29ja2V0IGFjY291bnRpbmcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MjMuNjAyOTkyODg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5ODAwNzc5Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MjMuNjAzNDkyNTg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk4OTgwMDI3NjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXFxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXFxuMy4gQnVnIERldGVjdG9yIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIChgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYCksIHNvY2tldCByZWZlcmVuY2UgbGlmZWN5Y2xlIC8gdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKExPQ0tERVAsIEtBU0FOLCBhbmQgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMjBjYWM0YzBmMDY1MzM5NjNiYWYxMTU1YmIzMTZjOWYwMjlmYmY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTU6Mjk6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbmluZGV4IGRjNTE4NGEyZmE5ZDEuLmM3NzI0MWIxMmY1OTcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuQEAgLTcsMTIgKzcsNDggQEBcbiBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbisjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImFyLWludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc29ja2FkZHJfcnhycGMgKnBlZXJfc3J4LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4rLypcbisgKiBEcm9wIFVEUCBybWVtIG93bmVyc2hpcCBmb3IgcGFja2V0cyBjaGFyZ2VkIGluIGVuY2FwX3JjdigpLlxuKyAqIHNrX2ZvcndhcmRfYWxsb2MgaXMgc2VyaWFsaXNlZCBieSBza19yZWNlaXZlX3F1ZXVlLmxvY2suXG4rICovXG4rc3RhdGljIHZvaWQgcnhycGNfc2tiX29ycGhhbl91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4rXG4rXHRpZiAoIXNrKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdHNrYl9vcnBoYW4oc2tiKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTtcbitcbitcdHNrX2Ryb3BzX2luYyh1ZHBfc2spO1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuK1x0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpO1xuK1x0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XG4rXHR9IGVsc2VcbisjZW5kaWZcbitcdHtcbitcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpO1xuK1x0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lORVJST1JTKTtcbitcdH1cbitcdHNrX3NrYl9yZWFzb25fZHJvcCh1ZHBfc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9SQ1ZCVUZGKTtcbit9XG4rXG4gLypcbiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnRcbiAgKiAtIG1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHRcbkBAIC0yOCw2ICs2NCw4IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnJ4X3F1ZXVlO1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEodWRwX3NrKTtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqaW9fdGhyZWFkO1xuK1x0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuK1x0dW5zaWduZWQgaW50IHJjdmJ1ZjtcbiBcbiBcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTQxLDggKzc5LDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2V0c3RhbXAgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XG4gXG4tXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbi1cdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xuICNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG5AQCAtNTIsNiArODgsMjQgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0cmN2YnVmID0gUkVBRF9PTkNFKHVkcF9zay1cdTAwM2Vza19yY3ZidWYpO1xuK1x0aGVhZHJvb20gPSBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcbitcdHNwaW5fbG9jayhcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdGlmICgodW5zaWduZWQgaW50KWF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSArXG4rXHQgICAgc2tiLVx1MDAzZXRydWVzaXplICsgaGVhZHJvb20gXHUwMDNlPSByY3ZidWYgfHxcbitcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdFx0cnhycGNfZW5jYXBfcmN2X2Ryb3AodWRwX3NrLCBza2IpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNrYi1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0c2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0c2tiX2RzdF9kcm9wKHNrYik7XG4rXG4rXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbitcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiBcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDcxLDYgKzUyNSw5IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbiBcdFx0LyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovXG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZyeF9xdWV1ZSkpKSB7XG4gXHRcdFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuK1xuK1x0XHRcdGlmIChza2ItXHUwMDNlbWFyayA9PSBSWFJQQ19TS0JfTUFSS19QQUNLRVQpXG4rXHRcdFx0XHRyeHJwY19za2Jfb3JwaGFuX3VkcChza2IpO1xuIFx0XHRcdHN3aXRjaCAoc2tiLVx1MDAzZW1hcmspIHtcbiBcdFx0XHRjYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDpcbiBcdFx0XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IDA7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG5pbmRleCAxNjlmOWRmZGFhNzdmLi4yZjkzODkxZTg0MWFiIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG4rKysgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbkBAIC0xNjYsNiArMTY2LDcgQEAgc3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mID0gezB9O1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4gXHRzdHJ1Y3Qgc29jayAqdXNrO1xuK1x0dTMyIHJjdmJ1ZjtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCIlcHslZCwlZH1cIixcbkBAIC0xOTgsNiArMTk5LDEyIEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0Lyogc2V0IHRoZSBzb2NrZXQgdXAgKi9cbiBcdHVzayA9IGxvY2FsLVx1MDAzZXNvY2tldC1cdTAwM2VzaztcbitcdC8qIE9uZSBhZHZlcnRpc2VkIG9yZGluYXJ5LURBVEEgd2luZG93LCBub3QganVtYm8tbWF4LiAqL1xuK1x0cmN2YnVmID0gcnhycGNfcnhfd2luZG93X3NpemUgKiBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcbitcdHJjdmJ1ZiArPSByY3ZidWYgLyA0O1xuK1x0cmN2YnVmID0gY2xhbXAocmN2YnVmLCBSRUFEX09OQ0Uoc3lzY3RsX3JtZW1fZGVmYXVsdCksXG4rXHRcdCAgICAgICBSRUFEX09OQ0Uoc3lzY3RsX3JtZW1fbWF4KSk7XG4rXHRXUklURV9PTkNFKHVzay1cdTAwM2Vza19yY3ZidWYsIHJjdmJ1Zik7XG4gXHR1c2stXHUwMDNlc2tfZXJyb3JfcmVwb3J0ID0gcnhycGNfZXJyb3JfcmVwb3J0O1xuIFxuIFx0c3dpdGNoIChzcngtXHUwMDNldHJhbnNwb3J0LmZhbWlseSkge1xuQEAgLTQzNyw4ICs0NDQsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0fVxuIFxuIFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXG5AQCAtNDQ4LDYgKzQ1NSwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbitcbitcdGlmIChzb2NrZXQpXG4rXHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuK1xuIFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcbiBcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcdTAwMjZsb2NhbC1cdTAwM2V0eF9hbGxvYyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MjMuNjAzNDkzNDY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNTcyNTQyMDc1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlcywgdGhlbiBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cbkZpcnN0LCBsZXQncyB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgaXQgcHJpbWFyaWx5IGNvbmNlcm5zIHRoZSBgcnhycGNgIG5ldHdvcmsgcHJvdG9jb2wsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBVRFAgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIHJlY2VpdmUgcGF0aC5cblxuKiAgIEluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgLCB0aGUga2V5IGFkZGl0aW9uIGlzIGByeHJwY19za2Jfb3JwaGFuX3VkcChza2IpYC4gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBkcm9wIFVEUCBybWVtIG93bmVyc2hpcCBvZiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgdXNlIG9mIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBhIHNwaW5sb2NrLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGFyZWEgdG8gd2F0Y2ggYXMgc3BpbmxvY2tzIGNhbiBtYWtlIGFuYWx5c2lzIHRyaWNreS4gVGhlbiB0aGVyZSdzIGByeHJwY19lbmNhcF9yY3ZfZHJvcCh1ZHBfc2ssIHNrYilgIHdoaWNoIGluY3JlbWVudHMgc3RhdHMgYW5kIGNhbGxzIGBza19za2JfcmVhc29uX2Ryb3AoKWAuIEFuZCB3aXRoaW4gYHJ4cnBjX2VuY2FwX3JjdigpYCwgdGhlIGNvZGUgY2hlY2tzIHRoZSByZWNlaXZlIGJ1ZmZlciAoYHNrX3JjdmJ1ZmApIG9mIHRoZSBVRFAgc29ja2V0IChgdWRwX3NrYCkuIEl0IGFsc28gY2FsY3VsYXRlcyBoZWFkcm9vbSBhbmQgY2hlY2tzIGBza19ybWVtX3NjaGVkdWxlYCwgYW5kIGRyb3BzIHBhY2tldHMgaWYgdGhlIGJ1ZmZlciBpcyBleGNlZWRlZC4gVGhpcyBpcyBub3JtYWwuIFRoZSBpbXBvcnRhbnQgcGFydHMgYXJlIHRoZSB1c2Ugb2YgYHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zaylgIHRvIGNoYXJnZSB0aGUgU0tCIHRvIHRoZSBzb2NrZXQgd2l0aGluIGEgbG9jaywgdGhlbiBsYXRlciB1bmNoYXJnZXMgaXQgd2l0aCBgcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKWAgd2hlbiBkZXF1ZXVpbmcgZnJvbSBgcnhfcXVldWVgLlxuXG4qICAgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AgaXMgYWxzbyBtb2RpZmllZCwgd2l0aCBjaGFuZ2VzIHRvIGByeHJwY19vcGVuX3NvY2tldGAsIHdoZXJlIHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIChgc2tfcmN2YnVmYCkgaXMgc2V0IGJhc2VkIG9uIHRoZSBhZHZlcnRpc2VkIHdpbmRvdyBhbmQgc3lzdGVtLXdpZGUgbWVtb3J5IGxpbWl0cywgYW5kIGByeHJwY19kZXN0cm95X2xvY2FsYCB3aGljaCB1c2VzIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgYW5kIGBzeW5jaHJvbml6ZV9yY3VgIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBzb2NrZXQgY2xlYW51cCBhbmQgcmVsZWFzZSBwYXRoLiBUaGUgZGVmZXJyYWwgb2YgYHNvY2tfcmVsZWFzZWAgYWZ0ZXIgcHVyZ2luZyBxdWV1ZXMgaXMgYWxzbyBrZXkuXG5cblNvLCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXM6XG5cbjEuICBNYW5hZ2luZyBTS0Igb3duZXJzaGlwIHJlbGF0ZWQgdG8gYSBVRFAgc29ja2V0LlxuMi4gIEJ1ZmZlciBzaXplIGNoZWNrcyBhbmQgZHJvcHBpbmcgcGFja2V0cy5cbjMuICBTb2NrZXQgZGVzdHJ1Y3Rpb24gYW5kIGNsZWFudXAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgS01TQU4gYW5nbGVzIGhlcmUuIFRoZSBtb3N0IG9idmlvdXMgYXJlYSBvZiBjb25jZXJuIGlzIGFyb3VuZCB0aGUgYnVmZmVyIG93bmVyc2hpcCB0cmFuc2ZlciBhbmQgcmVsZWFzZSB3aXRoaW4gdGhlIHJlY2VpdmUgcGF0aC4gU3BlY2lmaWNhbGx5LCBgc2tiX3NldF9vd25lcl9yYCBhbmQgYHNrYl9vcnBoYW5gLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgYSByYWNlIGNvbmRpdGlvbiBvciBpbmNvcnJlY3QgdXNlIG9mIG1lbW9yeSBvd25lcnNoaXAsIG9yIGJ1ZmZlciByZS11c2UgY2FuIHRyaWdnZXIgS01TQU4uIFRoZSB1c2Ugb2Ygc3BpbmxvY2tzIGFuZCBgcmN1YCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZXkgdXN1YWxseSBpbmNyZWFzZSB0aGUgY29tcGxleGl0eSBvZiBhbmFseXNpcy4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgcnhycGNfcHVyZ2VfcXVldWVgLiBJdCdzIHBvc3NpYmxlIHRvIGZpbmQgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTo1NTowMC44NTc3MDQ5MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTc5NjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19wdXJnZV9xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL2FmX3J4cnBjLmM9OTA3PXN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy05MTEtXFx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYzo5MTI6XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYy05MTMtXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYz05Mjc9c3RhdGljIGludCByeHJwY19yZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY0LVxcdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6OTY1OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY2LVxcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTUxNz12b2lkIHJ4cnBjX2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICosIGVudW0gcnhycGNfc2tiX3RyYWNlKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNTE4OnZvaWQgcnhycGNfcHVyZ2VfcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xNTE5LVxcbi0tXFxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM9NTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2NsZWFudXBfcnhfYnVmZmVycyhzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYy01NTUte1xcbm5ldC9yeHJwYy9jYWxsX29iamVjdC5jOjU1NjpcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19xdWV1ZSk7XFxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM6NTU3OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZjYWxsLVxcdTAwM2VyeF9xdWV1ZSk7XFxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM6NTU4OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZjYWxsLVxcdTAwM2VyeF9vb3NfcXVldWUpO1xcbm5ldC9yeHJwYy9jYWxsX29iamVjdC5jLTU1OS1cXHRrZnJlZShjYWxsLVxcdTAwM2VyeF9kZWNfYnVmZmVyKTtcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTMwNj1zdGF0aWMgdm9pZCByeHJwY19jbGVhbl91cF9jb25uZWN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTMzMS1cXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzozMzI6XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmNvbm4tXFx1MDAzZXJ4X3F1ZXVlKTtcXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0zMzMtXFx0cnhycGNfZnJlZV9za2IoY29ubi1cXHUwMDNldHhfcmVzcG9uc2UsIHJ4cnBjX3NrYl9wdXRfcmVzcG9uc2UpO1xcbi0tXFxubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMtMzQ2LVxcdCAqL1xcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jOjM0NzpcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2Y29ubi1cXHUwMDNlcnhfcXVldWUpO1xcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTM0OC1cXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00Mjc9dm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU0LSNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQ1NTpcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU2LSNlbmRpZlxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0NTc6XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZSk7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ1OC1cXG4tLVxcbm5ldC9yeHJwYy9yZWN2bXNnLmM9NDA3PWludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9yeHJwYy9yZWN2bXNnLmMtNTY3LWNhbGxfZmFpbGVkOlxcbm5ldC9yeHJwYy9yZWN2bXNnLmM6NTY4OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX3F1ZXVlKTtcXG5uZXQvcnhycGMvcmVjdm1zZy5jLTU2OS1jYWxsX2NvbXBsZXRlOlxcbi0tXFxubmV0L3J4cnBjL3NrYnVmZi5jPTUyPXZvaWQgcnhycGNfZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSByeHJwY19za2JfdHJhY2Ugd2h5KVxcbi0tXFxubmV0L3J4cnBjL3NrYnVmZi5jLTYzLSAqL1xcbm5ldC9yeHJwYy9za2J1ZmYuYzo2NDp2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxubmV0L3J4cnBjL3NrYnVmZi5jLTY1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6NTU6MDEuMzkzNTA2ODI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MDEyMDEzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYHJ4cnBjX3B1cmdlX3F1ZXVlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGByeHJwY19wdXJnZV9xdWV1ZWAgZnVuY3Rpb24uIE15IGJyYWluJ3MgYWxyZWFkeSBzdGFydGluZyB0byBydW4gdGhyb3VnaCB0aGUgbGlrZWx5IHNjZW5hcmlvcyBhbmQgdGhlIHVzdWFsIGdvdGNoYXMgd2l0aCBxdWV1ZSBtYW5hZ2VtZW50IGluIHRoaXMgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBhcm91bmQgaXRlcmF0aW5nLCBmcmVlaW5nLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZXJyb3JzIGR1cmluZyB0aGUgcHVyZ2UgcHJvY2Vzcy4gS25vd2luZyB0aGUgYnJvYWRlciBSeFJQQyBjb250ZXh0LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIG1lc3NhZ2UgbGlmZXRpbWVzLCBjb25uZWN0aW9uIHN0YXRlLCBhbmQgcG9zc2libHkgZXZlbiBjb25jdXJyZW5jeSBpc3N1ZXMuIEknbGwgbWVudGFsbHkgbWFwIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGxhcmdlciBjb21tdW5pY2F0aW9uIGZsb3cgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgcmVzb3VyY2UgY2xlYW51cCBhbmQgZW5zdXJpbmcgYSByb2J1c3Qgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjg2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6NTU6MDQuMDk0NzExMzEzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXG4gIDYxOlxcdC8qXFxuICA2MjpcXHQgKiBDbGVhciBhIHF1ZXVlIG9mIHNvY2tldCBidWZmZXJzLlxcbiAgNjM6XFx0ICovXFxuICA2NDpcXHR2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKChsaXN0KSkpICE9IE5VTEwpIHtcXG4gIDY5OlxcdFxcdFxcdGludCBuID0gYXRvbWljX2RlY19yZXR1cm4oc2VsZWN0X3NrYl9jb3VudChza2IpKTtcXG4gIDcwOlxcdFxcdFxcdHRyYWNlX3J4cnBjX3NrYihza2IsIHJlZmNvdW50X3JlYWQoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpLCBuLFxcbiAgNzE6XFx0XFx0XFx0XFx0XFx0cnhycGNfc2tiX3B1dF9wdXJnZSk7XFxuICA3MjpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTo1NTowNC4wOTQ3NzAyMzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzUzMzQ5ODcyNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBQYWNrZXQgUmVsZWFzZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgaG93IGl0J3MgcmVsZWFzZWQgYWZ0ZXIgYmVpbmcgdXNlZCBpbiB0aGUgYHJ4cnBjYCBjb250ZXh0LiBJZiBgc2tiYCBnZXRzIHB1cmdlZCB1c2luZyBgcnhycGNfcHVyZ2VfcXVldWVgIG9yIHRocm91Z2ggdGhlIG1vcmUgZ2VuZXJhbCBgY29uc3VtZV9za2JgIG9yIGBrZnJlZV9za2JgIHBhdGhzLCB0aGUgc29ja2V0IHJlZmVyZW5jZSBzaG91bGQgYmUgcmVsZWFzZWQsIGFuZCB0aGUgYXNzb2NpYXRlZCBybWVtIChyZWNlaXZlIG1lbW9yeSkgc2hvdWxkIGJlIHVuY2hhcmdlZC4gVGhpcyB1bmNoYXJnaW5nIGlzIGtleTsgaXQncyBkb25lIGVpdGhlciB2aWEgYHNrYl9vcnBoYW5gIG9yIHRocm91Z2ggYSBkZXN0cnVjdG9yLCBsaWtlIGBzb2NrX3JmcmVlYC5cblxuQnV0IGhvbGQgb24sIHRoZXJlJ3MgYSBjcml0aWNhbCBwb2ludCB3aGVuIGBza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spYCBpcyBjYWxsZWQuIFRoaXMgc2V0cyB0aGUgYHNrYi1cdTAwM2VkZXN0cnVjdG9yYCB0byBgc29ja19yZnJlZWAgYW5kIGxpbmtzIHRoZSBgc2tiYCB0byB0aGUgc29ja2V0IChgc2tiLVx1MDAzZXNrID0gc2tgKS4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyLCBkb2VzIGBzb2NrX3JmcmVlYCByZXF1aXJlIHRoZSBgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYD8gVGhhdCdzIGVzc2VudGlhbCB0byBtYWludGFpbmluZyBkYXRhIGludGVncml0eSBhbmQgYXZvaWRpbmcgcmFjZSBjb25kaXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgc29ja19yZnJlZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBVRFAgYW5kIGNvcmUgbmV0d29ya2luZyBjb250ZXh0IHRvIG1ha2Ugc3VyZSB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHRocmVhZC1zYWZlIGFuZCBjb3JyZWN0LiBJJ2xsIGNoZWNrIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAwOjU3LjQ0NDY0NjY3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNzg0NDE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHNvY2tfcmZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc29jay5oPTE4NjY9dm9pZCBza2Jfb3JwaGFuX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvc29jay5oOjE4Njc6dm9pZCBzb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xODY4LXZvaWQgc29ja19ybWVtX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9Mjc5Mz1FWFBPUlRfU1lNQk9MKHNrYl9vcnBoYW5fcGFydGlhbCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjc5Ny0gKi9cXG5uZXQvY29yZS9zb2NrLmM6Mjc5ODp2b2lkIHNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9zb2NrLmMtMjc5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAwOjU5Ljg3MjUwNTYwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzI4MzQ2NzczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgU29ja2V0IFJlbGVhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L2NvcmUvc29jay5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYHNvY2tfcmZyZWVgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpc24ndCB3b3JraW5nIGFzIGV4cGVjdGVkIGluIHRoZSBzb2NrZXQgcmVsZWFzZSBwcm9jZXNzIGFuZCB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgd2hhdCByZXNvdXJjZXMgaXQncyBmcmVlaW5nLCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgYSBwb3RlbnRpYWwgbGVhayBvciBpbXByb3BlciBoYW5kbGluZyB3aXRoaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCB0aGF0IGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAxOjE3LjE1NTk3Njk2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3OTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3OTU6XFx0LypcXG4yNzk2OlxcdCAqIFJlYWQgYnVmZmVyIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBrZnJlZV9za2IuXFxuMjc5NzpcXHQgKi9cXG4yNzk4OlxcdHZvaWQgc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjI3OTk6XFx0e1xcbjI4MDA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVxcdTAwM2VzaztcXG4yODAxOlxcdFxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZXRydWVzaXplO1xcbjI4MDI6XFx0XFxuMjgwMzpcXHRcXHRhdG9taWNfc3ViKGxlbiwgXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG4yODA0OlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcXG4yODA1OlxcdH1cXG4yODA2OlxcdEVYUE9SVF9TWU1CT0woc29ja19yZnJlZSk7XFxuMjgwNzpcXHRcXG4yODA4OlxcdC8qXFxuMjgwOTpcXHQgKiBCdWZmZXIgZGVzdHJ1Y3RvciBmb3Igc2ticyB0aGF0IGFyZSBub3QgdXNlZCBkaXJlY3RseSBpbiByZWFkIG9yIHdyaXRlXFxuMjgxMDpcXHQgKiBwYXRoLCBlLmcuIGZvciBlcnJvciBoYW5kbGVyIHNrYnMuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20ga2ZyZWVfc2tiLlxcbjI4MTE6XFx0ICovXFxuMjgxMjpcXHR2b2lkIHNvY2tfZWZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yODEzOlxcdHtcXG4yODE0OlxcdFxcdHNvY2tfcHV0KHNrYi1cXHUwMDNlc2spO1xcbjI4MTU6XFx0fVxcbjI4MTY6XFx0RVhQT1JUX1NZTUJPTChzb2NrX2VmcmVlKTtcXG4yODE3OlxcdFxcbjI4MTg6XFx0LyogQnVmZmVyIGRlc3RydWN0b3IgZm9yIHByZWZldGNoL3JlY2VpdmUgcGF0aCB3aGVyZSByZWZlcmVuY2UgY291bnQgbWF5XFxuMjgxOTpcXHQgKiBub3QgYmUgaGVsZCwgZS5nLiBmb3IgbGlzdGVuIHNvY2tldHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAxOjE3LjE1NjI0NTgzMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NjA4OTk3MjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIGBza19tZW1fdW5jaGFyZ2VgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLi4uIFdoYXQgZXhhY3RseSBpcyB0aGUgZnVuY3Rpb24gb2YgYHNrX21lbV91bmNoYXJnZWAgaW4gdGhpcyBjb250ZXh0PyBMZXQncyB0YWtlIGEgbG9vay4gSSdsbCBnZXQgcmlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTm8gdGltZSB0byB3YXN0ZTsgbGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTY6MDI6MzMuMjQ2MjIxNDU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg4MDI5MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX21lbV91bmNoYXJnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zb2NrLmg9MTYzNz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTE2NDMtXFxuaW5jbHVkZS9uZXQvc29jay5oOjE2NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0xNjQ1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTMyNz1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3dtZW1fZnJlZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzMwLVxcdGlmICghc2tiX3pjb3B5X3B1cmUoc2tiKSlcXG5pbmNsdWRlL25ldC90Y3AuaDozMzE6XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0zMzItXFx0ZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oOjMzMzpcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChza2IpKSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMzM0LVxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMDQ5PUJQRl9DQUxMXzQoYnBmX21zZ19wb3BfZGF0YSwgc3RydWN0IHNrX21zZyAqLCBtc2csIHUzMiwgc3RhcnQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zMTc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjMxNzY6XFx0c2tfbWVtX3VuY2hhcmdlKG1zZy1cXHUwMDNlc2ssIGxlbiAtIHBvcCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzE3Ny1cXHRtc2ctXFx1MDAzZXNnLnNpemUgLT0gKGxlbiAtIHBvcCk7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEzOD12b2lkIHNrX21zZ19yZXR1cm5femVybyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xNDctXFx0XFx0XFx0c2dlLVxcdTAwM2VvZmZzZXQgKz0gYnl0ZXM7XFxubmV0L2NvcmUvc2ttc2cuYzoxNDg6XFx0XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBieXRlcyk7XFxubmV0L2NvcmUvc2ttc2cuYy0xNDktXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTE1MS1cXG5uZXQvY29yZS9za21zZy5jOjE1MjpcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnZS1cXHUwMDNlbGVuZ3RoKTtcXG5uZXQvY29yZS9za21zZy5jLTE1My1cXHRcXHRieXRlcyAtPSBzZ2UtXFx1MDAzZWxlbmd0aDtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTYyPXZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xNjktXFxubmV0L2NvcmUvc2ttc2cuYzoxNzA6XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCB1bmNoYXJnZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xNzEtXFx0XFx0Ynl0ZXMgLT0gdW5jaGFyZ2U7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTE3Nz1zdGF0aWMgaW50IHNrX21zZ19mcmVlX2VsZW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBpLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xODUtXFx0XFx0aWYgKGNoYXJnZSlcXG5uZXQvY29yZS9za21zZy5jOjE4NjpcXHRcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIGxlbik7XFxubmV0L2NvcmUvc2ttc2cuYy0xODctXFx0XFx0cHV0X3BhZ2Uoc2dfcGFnZShzZ2UpKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MjI0PXN0YXRpYyB2b2lkIF9fc2tfbXNnX2ZyZWVfcGFydGlhbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjM1LVxcdFxcdFxcdGlmIChjaGFyZ2UpXFxubmV0L2NvcmUvc2ttc2cuYzoyMzY6XFx0XFx0XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBieXRlcyk7XFxubmV0L2NvcmUvc2ttc2cuYy0yMzctXFx0XFx0XFx0c2dlLVxcdTAwM2VsZW5ndGggLT0gYnl0ZXM7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTI2ND12b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0yODUtXFx0bXNnLVxcdTAwM2VzZy5kYXRhW2ldLmxlbmd0aCAtPSB0cmltO1xcbm5ldC9jb3JlL3NrbXNnLmM6Mjg2OlxcdHNrX21lbV91bmNoYXJnZShzaywgdHJpbSk7XFxubmV0L2NvcmUvc2ttc2cuYy0yODctXFx0LyogQWRqdXN0IGNvcHlicmVhayBpZiBpdCBmYWxscyBpbnRvIHRoZSB0cmltbWVkIHBhcnQgb2YgbGFzdCBidWYgKi9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NDEzPWludCBfX3NrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy00NTctXFx0XFx0XFx0XFx0aWYgKCFtc2dfcngtXFx1MDAzZXNrYikge1xcbm5ldC9jb3JlL3NrbXNnLmM6NDU4OlxcdFxcdFxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgY29weSk7XFxubmV0L2NvcmUvc2ttc2cuYy00NTktXFx0XFx0XFx0XFx0XFx0YXRvbWljX3N1Yihjb3B5LCBcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTI3OTg9dm9pZCBzb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjgwMy1cXHRhdG9taWNfc3ViKGxlbiwgXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG5uZXQvY29yZS9zb2NrLmM6MjgwNDpcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIGxlbik7XFxubmV0L2NvcmUvc29jay5jLTI4MDUtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTMyLVxcdFxcdGlmICh1bmNoYXJnZSlcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTMzOlxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgcmV0KTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTM0LVxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTUtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDk2OlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2VudCk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5Ny1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xOTcyPWludCB0Y3BfdHJpbV9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xOTg1LVxcdGlmICghc2tiX3pjb3B5X3B1cmUoc2tiKSlcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTk4NjpcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIGRlbHRhX3RydWVzaXplKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTk4Ny1cXG4tLVxcbm5ldC9rY20va2Ntc29jay5jPTE3Mz1zdGF0aWMgdm9pZCBrY21fcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9rY20va2Ntc29jay5jLTE3OS1cXG5uZXQva2NtL2tjbXNvY2suYzoxODA6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBsZW4pO1xcbm5ldC9rY20va2Ntc29jay5jLTE4MS1cXHRhdG9taWNfc3ViKGxlbiwgXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTExNDc9c3RhdGljIHZvaWQgZGZyYWdfdW5jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNDgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjExNDk6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBsZW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNTAtXFx0c2tfd21lbV9xdWV1ZWRfYWRkKHNrLCAtbGVuKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMzg9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDMtXFx0YXRvbWljX3N1Yihza2ItXFx1MDAzZXRydWVzaXplLCBcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDQ6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ1LVxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05MjEzPXN0YXRpYyB2b2lkIHNjdHBfd2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTkyMTgtXFxubmV0L3NjdHAvc29ja2V0LmM6OTIxOTpcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNrYi1cXHUwMDNldHJ1ZXNpemUpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTkyMjAtXFx0c2tfd21lbV9xdWV1ZWRfYWRkKHNrLCAtKHNrYi1cXHUwMDNldHJ1ZXNpemUgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmspKSk7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05MjU2PXZvaWQgc2N0cF9zb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy05MjY1LVxcdCAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjkyNjY6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBldmVudC1cXHUwMDNlcm1lbV9sZW4pO1xcbm5ldC9zY3RwL3NvY2tldC5jLTkyNjctfVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTE2OD1pbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTIxMS1cXHRcXHRwdXRfcGFnZShwKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MjEyOlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2ctXFx1MDAzZWxlbmd0aCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTIxMy1cXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTI4MT12b2lkIHRsc19mcmVlX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjg2LVxcdFxcdHB1dF9wYWdlKHNnX3BhZ2Uoc2cpKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6Mjg3OlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2ctXFx1MDAzZWxlbmd0aCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTI4OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAyOjM1LjczNDI1ODQ3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTgyMjg5MjgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU29ja2V0IE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza19tZW1fdW5jaGFyZ2VgIHdvcmtzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbmV0L3NvY2suaGAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja2V0IG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBMaW51eCBrZXJuZWwuIE5vIG5lZWQgdG8gd2FzdGUgdGltZTsgbGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gZG9lcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciB0aGUgb3ZlcmFsbCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gYSBzb2NrZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byBnbyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAzOjExLjU1NzE1NDg1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc29jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NDA6XFx0XFx0XFx0cmV0dXJuO1xcbjE2NDE6XFx0XFx0c2tfZm9yd2FyZF9hbGxvY19hZGQoc2ssIC1zaXplKTtcXG4xNjQyOlxcdH1cXG4xNjQzOlxcdFxcbjE2NDQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxcbjE2NDU6XFx0e1xcbjE2NDY6XFx0XFx0aWYgKCFza19oYXNfYWNjb3VudChzaykpXFxuMTY0NzpcXHRcXHRcXHRyZXR1cm47XFxuMTY0ODpcXHRcXHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgc2l6ZSk7XFxuMTY0OTpcXHRcXHRza19tZW1fcmVjbGFpbShzayk7XFxuMTY1MDpcXHR9XFxuMTY1MTpcXHRcXG4xNjUyOlxcdHZvaWQgX19za19jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBnZnApO1xcbjE2NTM6XFx0XFxuMTY1NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfTE9DS0lORykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfTU9EVUxFUylcXG4xNjU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza19vd25lcl9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4xNjU2OlxcdHtcXG4xNjU3OlxcdFxcdF9fbW9kdWxlX2dldChvd25lcik7XFxuMTY1ODpcXHRcXHRzay1cXHUwMDNlc2tfb3duZXIgPSBvd25lcjtcXG4xNjU5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTY6MDM6MTEuNTU3MzAyMDM4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MTg0NjQ0NTgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBLTVNBTioqXG5cbk9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2guIEkndmUgd2Fsa2VkIHRocm91Z2ggdGhlIGNvZGUgY2hhbmdlcyBtZXRpY3Vsb3VzbHksIGNvbnNpZGVyaW5nIHRoZSBLTVNBTiBjcml0ZXJpYSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYnVncy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGNvcnJlY3Qgc29ja2V0IHN0YXRlIG1hbmFnZW1lbnQsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgY29kZSBpbiBgcnhycGNfc2tiX29ycGhhbl91ZHBgLCBgcnhycGNfZW5jYXBfcmN2X2Ryb3BgLCBhbmQgYHJ4cnBjX2VuY2FwX3JjdmAuIEl04oCZcyBjbGVhciB0byBtZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGxpZmVjeWNsZSBvZiBTS0JzIHdpdGhpbiB0aGUgUlhSUEMgc3Vic3lzdGVtLiBUaGUga2V5IGlzIGluIG1haW50YWluaW5nIHRoZSByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgYW5kIGRyb3BwaW5nIHBhY2tldHMgaWYgdGhlc2UgbGltaXRzIGFyZSBleGNlZWRlZC4gSSBub3RlIHRoZSBsb2NraW5nIGFyb3VuZCB0aGUgcmVjZWl2ZSBxdWV1ZSBhbmQgdGhlIHVzZSBvZiBgc2tiX29ycGhhbmAsIHdoaWNoIGFyZSBjbGFzc2ljIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGluIHRoaXMgc29ydCBvZiBuZXR3b3JrIGNvZGUuIEkgZG8gbm90IHNlZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiB0aGVzZSBmdW5jdGlvbnMuIFRoZSBsb2NraW5nIGhlcmUsIHdoaWxlIGltcG9ydGFudCwgaXMgbW9yZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIGF0b21pY2l0eSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5OZXh0LCBJIGxvb2tlZCBhdCB0aGUgY2hhbmdlcyBpbiBgcnhycGNfb3Blbl9zb2NrZXRgIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgYXJlIGJlaW5nIGNhbGN1bGF0ZWQgYW5kIHNldCBpbiB0aGUgb3BlbiBzb2NrZXQgZnVuY3Rpb24gYW5kIGNsZWFyZWQgaW4gdGhlIGRlc3Ryb3kuIFRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRpbWluZyBvZiBgc29ja19yZWxlYXNlYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFyZSBjcml0aWNhbCBidXQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgc29ja2V0IHRlYXJkb3duIGlzIGhhcHBlbmluZyB2aWEgUkNVIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGFzIHRoZSBzb2NrZXRzIGFyZSByZW1vdmVkLlxuXG5JIGNvbnNpZGVyZWQgZWFjaCBvZiB0aGUgZm91ciBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlOioqIE5vcGUuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gSXQncyBhbGwgYWJvdXQgaW50ZXJuYWwgc29ja2V0IG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBJIHNjcnV0aW5pemVkIGV2ZXJ5IHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFuZCB1c2FnZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgcmN2YnVmYCwgYW5kIGBoZWFkcm9vbWAsIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHdoZXRoZXIgaXTigJlzIHJlYWRpbmcgZnJvbSBzb2NrZXQgc3RhdGUgb3IgZG9pbmcgYSBjYWxjdWxhdGlvbi4gSSBkb27igJl0IHNlZSBhbnkgcG90ZW50aWFsIGZvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUuIEl0IGlzIGp1c3QgYWRqdXN0aW5nIGEgZmV3IHNvY2tldCB2YXJpYWJsZXMuXG5cbjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogVGhlIHBhdGNo4oCZcyBhZGRpdGlvbnMgZG8gbm90IGNvbXByb21pc2UgcGFja2V0IGJvdW5kYXJ5IGNoZWNrcyBvciByZWFkIHBhc3QgYnVmZmVyIGxpbWl0cy4gVGhlIGNoYW5nZXMgcmVsYXRlZCB0byByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgc2VydmUgdG8gKnByZXZlbnQqIG92ZXJydW5zLCBieSBkcm9wcGluZyBwYWNrZXRzLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBwb3NzaWJsZSByaXNrcyBpbiB0aGlzIHBhdGNoOiBEZWFkbG9ja3MsIFVzZS1hZnRlci1GcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgbWVtb3J5IGxlYWsvYWNjb3VudGluZyBtaXNtYXRjaGVzLiBJIGRldGVybWluZWQgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIGlzc3Vlcy4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gVGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZWFkLiBUaGVyZSBpcyBhbHNvIG5vIGNoYW5nZSBpbiBob3cgZGF0YSBpcyByZWFkIGZyb20gdGhlIHBhY2tldCBpdHNlbGYuXG5cbkluIGNvbmNsdXNpb24sIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvICpub3QqIGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwcmltYXJ5IGNvbmNlcm5zIGFyZSBzeW5jaHJvbml6YXRpb24sIGRhdGEgY29uc2lzdGVuY3ksIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZXNlIGFyZSBiZXN0IGFkZHJlc3NlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBzYW5pdGl6YXRpb24gdG9vbHMuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODEsIk91dHB1dFRva2VucyI6MjcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjA1OjMzLjQwMzc1MDMwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXFxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXFxuMy4gQnVnIERldGVjdG9yIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIChgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYCksIHNvY2tldCByZWZlcmVuY2UgbGlmZWN5Y2xlIC8gdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKExPQ0tERVAsIEtBU0FOLCBhbmQgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYHJjdmJ1ZmAsIGBoZWFkcm9vbWAsIGBza2AsIGBuZXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBjcmVhdGVkLCByZWFkLCBvciBtb2RpZmllZC5cXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cXG4zLiBCdWcgRGV0ZWN0b3IgQXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gKGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgKSwgc29ja2V0IHJlZmVyZW5jZSBsaWZlY3ljbGUgLyB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGFjY291bnRpbmcgZXJyb3JzLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoTE9DS0RFUCwgS0FTQU4sIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 14:58:13 +0000 UTC FinishedAt: 2026-09-14 16:05:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "IPV6", "AF_RXRPC_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET", "IPV6", "AF_RXRPC_IPV6" ], "series_id": "4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_encap_rcv", "rxrpc_io_thread", "rxrpc_skb_orphan_udp", "rxrpc_destroy_local", "rxrpc_open_socket", "rxrpc_lookup_local" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cbjMuIEJ1ZyBEZXRlY3RvciBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiAoYHNrX3JlY2VpdmVfcXVldWUubG9ja2ApLCBzb2NrZXQgcmVmZXJlbmNlIGxpZmVjeWNsZSAvIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgYWNjb3VudGluZyBlcnJvcnMsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChMT0NLREVQLCBLQVNBTiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsb2NhbCB0cmFuc3BvcnQgZW5kcG9pbnQgbWFuYWdlbWVudC4gSXQgaW1wbGVtZW50cyBybWVtIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgZm9yIHJlY2VpdmVkIGVuY2Fwc3VsYXRpb24gc2ticyBpbiByeHJwY19lbmNhcF9yY3YsIHNrYiBvcnBoYW5pbmcgdW5kZXIgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrIGluIHJ4cnBjX2lvX3RocmVhZCwgc2V0cyBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgbGltaXRzIGluIHJ4cnBjX29wZW5fc29ja2V0LCBhbmQgYWx0ZXJzIHNvY2tldCByZWxlYXNlIG9yZGVyaW5nIGFuZCBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIG5ldHdvcmtpbmcgZmFzdC1wYXRocywgd2FycmFudGluZyBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHNvY2tldCBhY2NvdW50aW5nIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMjBjYWM0YzBmMDY1MzM5NjNiYWYxMTU1YmIzMTZjOWYwMjlmYmY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTU6Mjk6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG5pbmRleCBkYzUxODRhMmZhOWQxLi5jNzcyNDFiMTJmNTk3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbkBAIC03LDEyICYjNDM7Nyw0OCBAQFxuIFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDthci1pbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqcGVlcl9zcngsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogRHJvcCBVRFAgcm1lbSBvd25lcnNoaXAgZm9yIHBhY2tldHMgY2hhcmdlZCBpbiBlbmNhcF9yY3YoKS5cbiYjNDM7ICogc2tfZm9yd2FyZF9hbGxvYyBpcyBzZXJpYWxpc2VkIGJ5IHNrX3JlY2VpdmVfcXVldWUubG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1xuJiM0MztcdGlmICghc2spXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdHNrYl9vcnBoYW4oc2tiKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTtcbiYjNDM7XG4mIzQzO1x0c2tfZHJvcHNfaW5jKHVkcF9zayk7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiYjNDM7XHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XG4mIzQzO1x0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XG4mIzQzO1x0fSBlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdHtcbiYjNDM7XHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfUkNWQlVGRVJST1JTKTtcbiYjNDM7XHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xuJiM0MztcdH1cbiYjNDM7XHRza19za2JfcmVhc29uX2Ryb3AodWRwX3NrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfUkNWQlVGRik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnRcbiAgKiAtIG1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHRcbkBAIC0yOCw2ICYjNDM7NjQsOCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyeF9xdWV1ZTtcbiBcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XG4mIzQzO1x0dW5zaWduZWQgaW50IHJjdmJ1ZjtcbiBcbiBcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTQxLDggJiM0Mzs3OSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gXHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuIFxuLVx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4tXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuIFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuQEAgLTUyLDYgJiM0Mzs4OCwyNCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gI2VuZGlmXG4gXG4mIzQzO1x0cmN2YnVmID0gUkVBRF9PTkNFKHVkcF9zay1cdTAwM2Vza19yY3ZidWYpO1xuJiM0MztcdGhlYWRyb29tID0gU0tCX1RSVUVTSVpFKFJYUlBDX0pVTUJPKDEpKSAqIDI7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdGlmICgodW5zaWduZWQgaW50KWF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSAmIzQzO1xuJiM0MztcdCAgICBza2ItXHUwMDNldHJ1ZXNpemUgJiM0MzsgaGVhZHJvb20gXHUwMDNlPSByY3ZidWYgfHxcbiYjNDM7XHQgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdFx0cnhycGNfZW5jYXBfcmN2X2Ryb3AodWRwX3NrLCBza2IpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlZGV2ID0gTlVMTDtcbiYjNDM7XHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdHNrYl9kc3RfZHJvcChza2IpO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbiYjNDM7XHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XG4gXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcbiBcdHJldHVybiAwO1xuQEAgLTQ3MSw2ICYjNDM7NTI1LDkgQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHQvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi9cbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnJ4X3F1ZXVlKSkpIHtcbiBcdFx0XHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc2tiLVx1MDAzZW1hcmsgPT0gUlhSUENfU0tCX01BUktfUEFDS0VUKVxuJiM0MztcdFx0XHRcdHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYik7XG4gXHRcdFx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuIFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxuIFx0XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjJmOTM4OTFlODQxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mID0gezB9O1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4gXHRzdHJ1Y3Qgc29jayAqdXNrO1xuJiM0MztcdHUzMiByY3ZidWY7XG4gXHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0OyVweyVkLCVkfVwmIzM0OyxcbkBAIC0xOTgsNiAmIzQzOzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdC8qIHNldCB0aGUgc29ja2V0IHVwICovXG4gXHR1c2sgPSBsb2NhbC1cdTAwM2Vzb2NrZXQtXHUwMDNlc2s7XG4mIzQzO1x0LyogT25lIGFkdmVydGlzZWQgb3JkaW5hcnktREFUQSB3aW5kb3csIG5vdCBqdW1iby1tYXguICovXG4mIzQzO1x0cmN2YnVmID0gcnhycGNfcnhfd2luZG93X3NpemUgKiBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcbiYjNDM7XHRyY3ZidWYgJiM0Mzs9IHJjdmJ1ZiAvIDQ7XG4mIzQzO1x0cmN2YnVmID0gY2xhbXAocmN2YnVmLCBSRUFEX09OQ0Uoc3lzY3RsX3JtZW1fZGVmYXVsdCksXG4mIzQzO1x0XHQgICAgICAgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX21heCkpO1xuJiM0MztcdFdSSVRFX09OQ0UodXNrLVx1MDAzZXNrX3JjdmJ1ZiwgcmN2YnVmKTtcbiBcdHVzay1cdTAwM2Vza19lcnJvcl9yZXBvcnQgPSByeHJwY19lcnJvcl9yZXBvcnQ7XG4gXG4gXHRzd2l0Y2ggKHNyeC1cdTAwM2V0cmFuc3BvcnQuZmFtaWx5KSB7XG5AQCAtNDM3LDggJiM0Mzs0NDQsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtXHUwMDNlc2ssIE5VTEwpO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiAmIzQzOzQ1NSwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNvY2tldClcbiYjNDM7XHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuJiM0MztcbiBcdHJ4cnBjX3B1cmdlX2NsaWVudF9jb25uZWN0aW9ucyhsb2NhbCk7XG4gXHRwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oXHUwMDI2bG9jYWwtXHUwMDNldHhfYWxsb2MpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTIwY2FjNGMwZjA2NTMzOTYzYmFmMTE1NWJiMzE2YzlmMDI5ZmJmNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDE1OjI5OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jCmluZGV4IGRjNTE4NGEyZmE5ZDEuLmM3NzI0MWIxMmY1OTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKQEAgLTcsMTIgJiM0Mzs3LDQ4IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKIHN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgICAgc3RydWN0IHNvY2thZGRyX3J4cnBjICpwZWVyX3NyeCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAomIzQzOy8qCiYjNDM7ICogRHJvcCBVRFAgcm1lbSBvd25lcnNoaXAgZm9yIHBhY2tldHMgY2hhcmdlZCBpbiBlbmNhcF9yY3YoKS4KJiM0MzsgKiBza19mb3J3YXJkX2FsbG9jIGlzIHNlcmlhbGlzZWQgYnkgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJc2tiX29ycGhhbihza2IpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTsKJiM0MzsKJiM0MzsJc2tfZHJvcHNfaW5jKHVkcF9zayk7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiYjNDM7CQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpOwomIzQzOwl9IGVsc2UKJiM0MzsjZW5kaWYKJiM0MzsJewomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7CiYjNDM7CX0KJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHVkcF9zaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnQKICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dApAQCAtMjgsNiAmIzQzOzY0LDggQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBza19idWZmX2hlYWQgKnJ4X3F1ZXVlOwogCXN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkcm9vbTsKJiM0MzsJdW5zaWduZWQgaW50IHJjdmJ1ZjsKIAogCWlmICh1bmxpa2VseSghbG9jYWwpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNDEsOCAmIzQzOzc5LDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7ODgsMjQgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CXJjdmJ1ZiA9IFJFQURfT05DRSh1ZHBfc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWhlYWRyb29tID0gU0tCX1RSVUVTSVpFKFJYUlBDX0pVTUJPKDEpKSAqIDI7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJaWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoJmFtcDt1ZHBfc2stJmd0O3NrX3JtZW1fYWxsb2MpICYjNDM7CiYjNDM7CSAgICBza2ItJmd0O3RydWVzaXplICYjNDM7IGhlYWRyb29tICZndDs9IHJjdmJ1ZiB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJCXJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKJiM0MzsJc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt1ZHBfc2stJmd0O3NrX3JlY2VpdmVfcXVldWUubG9jayk7CiYjNDM7CXNrYl9kc3RfZHJvcChza2IpOwomIzQzOwomIzQzOwlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7CiYjNDM7CXJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7CiAJc2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7CiAJd2FrZV91cF9wcm9jZXNzKGlvX3RocmVhZCk7CiAJcmV0dXJuIDA7CkBAIC00NzEsNiAmIzQzOzUyNSw5IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSkKIAkJLyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3J4X3F1ZXVlKSkpIHsKIAkJCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiLSZndDttYXJrID09IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVCkKJiM0MzsJCQkJcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi4yZjkzODkxZTg0MWFiIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmYgPSB7MH07CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiAJc3RydWN0IHNvY2sgKnVzazsKJiM0MzsJdTMyIHJjdmJ1ZjsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7JXB7JWQsJWR9JiMzNDssCkBAIC0xOTgsNiAmIzQzOzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldCkKIAogCS8qIHNldCB0aGUgc29ja2V0IHVwICovCiAJdXNrID0gbG9jYWwtJmd0O3NvY2tldC0mZ3Q7c2s7CiYjNDM7CS8qIE9uZSBhZHZlcnRpc2VkIG9yZGluYXJ5LURBVEEgd2luZG93LCBub3QganVtYm8tbWF4LiAqLwomIzQzOwlyY3ZidWYgPSByeHJwY19yeF93aW5kb3dfc2l6ZSAqIFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyOwomIzQzOwlyY3ZidWYgJiM0Mzs9IHJjdmJ1ZiAvIDQ7CiYjNDM7CXJjdmJ1ZiA9IGNsYW1wKHJjdmJ1ZiwgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX2RlZmF1bHQpLAomIzQzOwkJICAgICAgIFJFQURfT05DRShzeXNjdGxfcm1lbV9tYXgpKTsKJiM0MzsJV1JJVEVfT05DRSh1c2stJmd0O3NrX3JjdmJ1ZiwgcmN2YnVmKTsKIAl1c2stJmd0O3NrX2Vycm9yX3JlcG9ydCA9IHJ4cnBjX2Vycm9yX3JlcG9ydDsKIAogCXN3aXRjaCAoc3J4LSZndDt0cmFuc3BvcnQuZmFtaWx5KSB7CkBAIC00MzcsOCAmIzQzOzQ0NCw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NTUsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUlhSUEMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBMb29rcyBsaWtlIHdlIGhhdmUgc29tZSBuZXcgZnVuY3Rpb25zOiBgcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKWAgYW5kIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAuIEludGVyZXN0aW5nLiBBbHNvLCBgcnhycGNfZW5jYXBfcmN2YCBpcyBub3cgZG9pbmcgc29tZSBjaGVja3MgcmVsYXRlZCB0byBVRFAgcmVjZWl2ZSBidWZmZXIgYW5kIGBza19ybWVtX3NjaGVkdWxlYCwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3MgdXNpbmcgYHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zaylgLiBOb3csIEkgc2VlIHRoYXQgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIHdoZW4gYW4gU0tCIG1hcmtlZCBhcyBgUlhSUENfU0tCX01BUktfUEFDS0VUYCBpcyBkZXF1ZXVlZCwgaXQgY2FsbHMgdGhhdCBgcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKWAgZnVuY3Rpb24uIEFsc28sIGByeHJwY19vcGVuX3NvY2tldGAgaXMgc2V0dGluZyBgdXNrLSZndDtza19yY3ZidWZgLiBGaW5hbGx5LCBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSBjYXJlZnVsIGhhbmRsaW5nIG9mIGBza191c2VyX2RhdGFgIHVzaW5nIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgYW5kIGBzeW5jaHJvbml6ZV9yY3VgIGJlZm9yZSBjYWxsaW5nIGBzb2NrX3JlbGVhc2VgICphZnRlciogYHJ4cnBjX3B1cmdlX3F1ZXVlYC4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhpcyB0aHJvdWdoIHRoZSBsZW5zIG9mIG15IHRyaWFnZSBydWxlcy4gQmFzZWQgb24gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHksIGFjY2Vzc2liaWxpdHkgaXMga2V5LCBhbmQgYEFGX1JYUlBDYCBpcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0IGZhbWlseS4gVGhlcmVmb3JlLCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1ldGhvZHMuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIHNjb3BlLiBUaGlzIHBhdGNoIHRvdWNoZXMgY29yZSBzdWJzeXN0ZW1zOiBpdCBtb2RpZmllcyBgQUZfUlhSUENgLCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIGxvY2tpbmcsIHF1ZXVpbmcsIHRoZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBhbHNvIGBza191c2VyX2RhdGFgLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBpcyBoaWdobHkgcmVhY2hhYmxlIGFuZCBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzIHJlbGF0ZWQgdG8gYHNrX3JlY2VpdmVfcXVldWUubG9ja2AsIGBza19ybWVtX2FsbG9jYCwgYW5kIGBza2Jfb3JwaGFuYCwgYW5kIGxpZmVjeWNsZSBvZiB0aGUgbG9jYWwgc29ja2V0IG9iamVjdHMuIERlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBLY29uZmlnIG9wdGlvbnMgc2V0LiBUaW1lIHRvIHJ1biBhIHF1aWNrIGBncmVwcGVyYCBjaGVjayBvbiBgQUZfUlhSUENgIGluIGBLY29uZmlnYCB0byBzZWUgd2hhdCBkZXBlbmRzIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9SWFJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZy01LVxubmV0L3J4cnBjL0tjb25maWc6Njpjb25maWcgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBzZXNzaW9uIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZz0yNT1pZiBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctMjYtXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxubmV0L3J4cnBjL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgUnhSUENcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cbm5ldC9yeHJwYy9LY29uZmlnOjM0OmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xubmV0L3J4cnBjL0tjb25maWctMzUtXHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy0zOS1cbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctNDktXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcbm5ldC9yeHJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXG5uZXQvcnhycGMvS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIG5ldC9yeHJwYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUnhSUEMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBgbmV0L3J4cnBjL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbCBkZWZpbml0aW9ucywgc3BlY2lmaWNhbGx5IGxpbmVzIDEgdGhyb3VnaCwgc2F5LCAyNS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHZpYSB0aGUgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGF0IGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgcHJvdG9jb2wgaXRzZWxmLCBwZXJoYXBzIHNvbWUgaW5pdGlhbCBmZWF0dXJlIGZsYWdzIGxpa2Ugc2VjdXJpdHkgb3B0aW9ucywgYW5kIG1heWJlIGEgZmV3IG90aGVyIGJhc2ljIHNldHRpbmdzLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXksIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBkZWNsYXJlZCBlYXJseSBvbi4gT25jZSBJIGhhdmUgdGhlIGJhc2ljIG9wdGlvbnMgZmlndXJlZCBvdXQsIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCBtb2R1bGVzIGFuZCBzdWItZmVhdHVyZXMgYmVjb21lIGF2YWlsYWJsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQUZfUlhSUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcbiAgMTE6XHRcdHNlbGVjdCBLRVlTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XG4gIDE1Olx0XHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXG4gIDE2Olx0XHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgVGhlc2UgYXJlIHVzZWQgZm9yIEFGUyBrZXJuZWwgZmlsZXN5c3RlbSBhbmQgdXNlcnNwYWNlIHV0aWxpdGllcy5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xuICAyMTpcdFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXG4gIDI0Olx0XG4gIDI1Olx0aWYgQUZfUlhSUENcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQUZfUlhSUENfSVBWNlxuICAyODpcdFx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xuICAzMjpcdFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG4gIDM1Olx0XHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBOZXR3b3JrIFByb3RvY29sIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SW50ZXJlc3RpbmcsIHdlJiMzOTt2ZSBnb3QgSVB2NiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlIHJlbGF0ZWQgdG8gVURQIHN0YXRzLiYjMzQ7IFNwZWNpZmljYWxseSwgSSYjMzk7bSBrZXlpbmcgaW4gb24gdGhpcyBzbmlwcGV0OgoKYGBgYwojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKCWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CgkJX19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfUkNWQlVGRVJST1JTKTsKCQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7Cgl9IGVsc2UKI2VuZGlmCmBgYAoKTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIG1ha2luZyBhc3NvY2lhdGlvbnMuIEkgc2VlIHRoZSBJUHY2IGNoZWNrLCBhbmQgdGhlbiBJJiMzOTttIHJlbWluZGVkIHRoYXQgYEFGX1JYUlBDX0lQVjZgIGlzIGFsc28gYSB0aGluZy4gVGhhdCByYWlzZXMgYSBxdWVzdGlvbiwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KClNvLCBJIG5lZWQgdG8ga25vdyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBgQUZfUlhSUENgIGZhbWlseSBhbmQgSVB2Ni4gQXJlIHRoZXkgaW5kZXBlbmRlbnQ/IElzIGBBRl9SWFJQQ19JUFY2YCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGJ1aWx0IG9uIHRvcCBvZiBgQUZfUlhSUENgLCBvciBhcmUgdGhleSBvcnRob2dvbmFsPyBPciBpcyBgQUZfUlhSUENfSVBWNmAgYWx3YXlzIGVuYWJsZWQgd2hlbiBJUHY2IGlzIGVuYWJsZWQ/IEFyZSB0aGV5IGxpa2UgYElORVRgIGFuZCBgSVBWNmAgaW4gc29tZSByZXNwZWN0cz8gSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIGRlcGVuZGVuY3kgaXMgaGFuZGxlZCBieSBgbWFrZWAgaW5mcmFzdHJ1Y3R1cmUuCgpUbyB2ZXJpZnkgdGhpcywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29tcGlsYXRpb24gcnVsZXMuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBvdmVyIHRvIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBiZSwgdG8gZmluZCBvdXQgZXhhY3RseSB3aGF0IGdldHMgY29tcGlsZWQgYW5kIGxpbmtlZCB3aGVuIGBBRl9SWFJQQ2AgaXMgZW5hYmxlZCwgYW5kIGhvdyBJUHY2IGludGVncmF0aW9uIGlzIGhhbmRsZWQgaW4gdGhhdCBjb250ZXh0LiBUaGF0IGZpbGUgd2lsbCB0ZWxsIHRoZSBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFJ4UlBDXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19BRl9SWFJQQykgJiM0Mzs9IHJ4cnBjLm9cbiAgIDc6XHRcbiAgIDg6XHRyeHJwYy15IDo9IFxcXG4gICA5Olx0XHRhZl9yeHJwYy5vIFxcXG4gIDEwOlx0XHRjYWxsX2FjY2VwdC5vIFxcXG4gIDExOlx0XHRjYWxsX2V2ZW50Lm8gXFxcbiAgMTI6XHRcdGNhbGxfb2JqZWN0Lm8gXFxcbiAgMTM6XHRcdGNhbGxfc3RhdGUubyBcXFxuICAxNDpcdFx0Y29ubl9jbGllbnQubyBcXFxuICAxNTpcdFx0Y29ubl9ldmVudC5vIFxcXG4gIDE2Olx0XHRjb25uX29iamVjdC5vIFxcXG4gIDE3Olx0XHRjb25uX3NlcnZpY2UubyBcXFxuICAxODpcdFx0aW5wdXQubyBcXFxuICAxOTpcdFx0aW5wdXRfcmFjay5vIFxcXG4gIDIwOlx0XHRpbnNlY3VyZS5vIFxcXG4gIDIxOlx0XHRpb190aHJlYWQubyBcXFxuICAyMjpcdFx0a2V5Lm8gXFxcbiAgMjM6XHRcdGxvY2FsX2V2ZW50Lm8gXFxcbiAgMjQ6XHRcdGxvY2FsX29iamVjdC5vIFxcXG4gIDI1Olx0XHRtaXNjLm8gXFxcbiAgMjY6XHRcdG5ldF9ucy5vIFxcXG4gIDI3Olx0XHRvb2IubyBcXFxuICAyODpcdFx0b3V0cHV0Lm8gXFxcbiAgMjk6XHRcdHBlZXJfZXZlbnQubyBcXFxuICAzMDpcdFx0cGVlcl9vYmplY3QubyBcXFxuICAzMTpcdFx0cmVjdm1zZy5vIFxcXG4gIDMyOlx0XHRydHQubyBcXFxuICAzMzpcdFx0c2VjdXJpdHkubyBcXFxuICAzNDpcdFx0c2VuZG1zZy5vIFxcXG4gIDM1Olx0XHRzZXJ2ZXJfa2V5Lm8gXFxcbiAgMzY6XHRcdHNrYnVmZi5vIFxcXG4gIDM3Olx0XHR0eGJ1Zi5vIFxcXG4gIDM4Olx0XHR1dGlscy5vXG4gIDM5Olx0XG4gIDQwOlx0cnhycGMtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJYUlBDIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBgaW9fdGhyZWFkLm9gIGFuZCBgbG9jYWxfb2JqZWN0Lm9gIGFyZSBlc3NlbnRpYWwgY29tcG9uZW50cyBvZiBgcnhycGMteWAgd2hlbiBgQ09ORklHX0FGX1JYUlBDYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gQW5kLCBhcyBleHBlY3RlZCwgd2UgYWxzbyByZXF1aXJlIGBDT05GSUdfSU5FVGAgdG8gYmUgZW5hYmxlZCBpZiBgQ09ORklHX0FGX1JYUlBDYCBpcyBzZXQuIElmIHdlIHdhbnQgSVB2NiBzdXBwb3J0LCB3ZSYjMzk7bGwgbmVlZCBib3RoIGBDT05GSUdfSVBWNmAgYW5kIGBDT05GSUdfQUZfUlhSUENfSVBWNmAuIFN0YW5kYXJkIHN0dWZmIHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHNlZSB0aGVzZSBrZXkgY2hhbmdlczoKCjEuICBgcnhycGNfZW5jYXBfcmN2YCBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYC4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBlbmZvcmNpbmcgbW9yZSByb2J1c3QgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoIGBybWVtYCBjaGVja3Mg4oCTIHVzaW5nIGBza19ybWVtX2FsbG9jYCwgYHNrYl9zZXRfb3duZXJfcmAsIGFuZCBgc2tfcm1lbV9zY2hlZHVsZWAuIFNtYXJ0IG1vdmU7IG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldHdvcmtpbmcgaXMgYWx3YXlzIGNyaXRpY2FsLiBBbmQsIGl0IG5vdyBjYWxscyBgcnhycGNfZW5jYXBfcmN2X2Ryb3BgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4KCjIuICBgcnhycGNfc2tiX29ycGhhbl91ZHBgIGlzIHN0YXRpYyB3aXRoaW4gYGlvX3RocmVhZC5jYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGlubGluZWQgb3Igbm90LiBXZSYjMzk7bGwgY2hlY2sgdGhlIGNvbXBpbGVyIG91dHB1dC4KCjMuICBgcnhycGNfaW9fdGhyZWFkYCBpbiBgaW9fdGhyZWFkLmNgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgYml0LiBJdCBjYWxscyBgcnhycGNfc2tiX29ycGhhbl91ZHBgIHNwZWNpZmljYWxseSB3aGVuIGBza2ItJmd0O21hcmtgIGlzIGVxdWFsIHRvIGBSWFJQQ19TS0JfTUFSS19QQUNLRVRgLCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuCgo0LiAgYHJ4cnBjX29wZW5fc29ja2V0YCBpcyBzdGF0aWMgaW4gYGxvY2FsX29iamVjdC5jYC4gIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgb25seSBieSBub24tc3RhdGljIGZ1bmN0aW9ucywgaWYgYXQgYWxsLgoKNS4gIEZpbmFsbHksIGByeHJwY19kZXN0cm95X2xvY2FsYCwgYWxzbyBpbiBgbG9jYWxfb2JqZWN0LmNgLCBpcyBleHBvcnRlZCwgc28gaXQmIzM5O3MgYSBwdWJsaWMgc3ltYm9sOiBgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpYC4KCkFscmlnaHQsIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbG9jYWxfb2JqZWN0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGByeHJwY19vcGVuX3NvY2tldGAgYW5kIGByeHJwY19kZXN0cm95X2xvY2FsYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzaWduaWZpY2FudCBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTA5PXN0YXRpYyBzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2FsbG9jX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTYxLSAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE2MjpzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xNjMte1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0yNTQ9c3RydWN0IHJ4cnBjX2xvY2FsICpyeHJwY19sb29rdXBfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0yOTktXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MzAwOlx0cmV0ID0gcnhycGNfb3Blbl9zb2NrZXQobG9jYWwsIG5ldCk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzAxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNoZWNraW5nIEludGVybmFsIERlY2xhcmF0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVjbGFyYXRpb25zIGZvciBgcnhycGNfbG9va3VwX2xvY2FsYCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGFyLWludGVybmFsLmhgLiBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbnRlcm5hbGx5LiBUaGlzIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB1bmRlcnN0YW5kaW5nIHRoZSBsb3ctbGV2ZWwgYmVoYXZpb3IgSSBuZWVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBwcmVjaXNlIHNpZ25hdHVyZXMsIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGV5IG9wZXJhdGUgb24sIGFuZCBhbnkgY29tbWVudHMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZWlyIGludGVuZGVkIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjYXZlYXRzLiBBY2N1cmFjeSBoZXJlIGlzIHBhcmFtb3VudCwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgdGhlIG9ubHkgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY18oZGVzdHJveXxsb29rdXApX2xvY2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hZl9yeHJwYy5jPTEzMT1zdGF0aWMgaW50IHJ4cnBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNhZGRyLCBpbnQgbGVuKVxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTE1MC1cdFx0cngtXHUwMDNlc3J4ID0gKnNyeDtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjE1MTpcdFx0bG9jYWwgPSByeHJwY19sb29rdXBfbG9jYWwoc29ja19uZXQoXHUwMDI2cngtXHUwMDNlc2spLCBcdTAwMjZyeC1cdTAwM2VzcngpO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtMTUyLVx0XHRpZiAoSVNfRVJSKGxvY2FsKSkge1xuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTUzOD1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYy01NzgtXHRcdH1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjU3OTpcdFx0bG9jYWwgPSByeHJwY19sb29rdXBfbG9jYWwoc29ja19uZXQoc29jay1cdTAwM2VzayksIFx1MDAyNnJ4LVx1MDAzZXNyeCk7XG5uZXQvcnhycGMvYWZfcnhycGMuYy01ODAtXHRcdGlmIChJU19FUlIobG9jYWwpKSB7XG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTMyNT12b2lkIHJ4cnBjX2xvY2FsX2RvbnRfZnJhZ21lbnQoY29uc3Qgc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgYm9vbCBzZXQpO1xubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTMyNjpzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2xvb2t1cF9sb2NhbChzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEzMjctc3RydWN0IHJ4cnBjX2xvY2FsICpyeHJwY19nZXRfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICosIGVudW0gcnhycGNfbG9jYWxfdHJhY2UpO1xuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEzMzE9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKiwgZW51bSByeHJwY19sb2NhbF90cmFjZSk7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMzMyOnZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEzMzMtdm9pZCByeHJwY19kZXN0cm95X2FsbF9sb2NhbHMoc3RydWN0IHJ4cnBjX25ldCAqKTtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9NDg0PWludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjM1LVx0cnhycGNfc2VlX2xvY2FsKGxvY2FsLCByeHJwY19sb2NhbF9zdG9wKTtcbm5ldC9yeHJwYy9pb190aHJlYWQuYzo2MzY6XHRyeHJwY19kZXN0cm95X2xvY2FsKGxvY2FsKTtcbm5ldC9yeHJwYy9pb190aHJlYWQuYy02MzctXHRXUklURV9PTkNFKGxvY2FsLVx1MDAzZWlvX3RocmVhZCwgTlVMTCk7XG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTE2Mj1zdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMjUzLSAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjI1NDpzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2xvb2t1cF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMjU1LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4KVxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MDU9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBlbnVtIHJ4cnBjX2xvY2FsX3RyYWNlIHdoeSlcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDI2LSAqL1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00Mjgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHJ4cnBjX2VuY2FwX3JjdmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGVhZCBhcm91bmQgYHJ4cnBjX2VuY2FwX3JjdmAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIOKAkyB3aGF0IGlucHV0cyBpdCBleHBlY3RzLCB3aGF0IGl0JiMzOTtzIHJldHVybmluZywgYWxsIHRoZSB1c3VhbCBkZXRhaWxzLiBUaGVuLCBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBldmVyeSBwbGFjZSBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzICpjYWxsZWQqLiBLbm93aW5nIHRoZSBjYWxsc2l0ZXMgZ2l2ZXMgbWUgY3J1Y2lhbCBjb250ZXh0OyBpdCB0ZWxscyBtZSAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBsaWtlbHkgb3BlcmF0aW5nIG9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGFsbCB0aGUgY2FsbGVycy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBwaWVjZSB0b2dldGhlciB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfZW5jYXBfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEyNjg9c3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX3RscF9pbml0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMjc4OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMjc5LXZvaWQgcnhycGNfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICopO1xuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYz0yMj1zdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYy0zMy1cbm5ldC9yeHJwYy9pb190aHJlYWQuYzozNDpzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTM1LXtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjEtICovXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6NjI6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTYzLXtcbi0tXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtOTctXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjk4Olx0XHRyeHJwY19lbmNhcF9yY3ZfZHJvcCh1ZHBfc2ssIHNrYik7XG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtOTktXHRcdHJldHVybiAwO1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xNjI9c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NC1cdHR1bmNmZy5lbmNhcF90eXBlID0gVURQX0VOQ0FQX1JYUlBDO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE5NTpcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTk2LVx0dHVuY2ZnLmVuY2FwX2Vycl9yY3YgPSByeHJwY19lbmNhcF9lcnJfcmN2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyNwoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJ4UlBDIFVEUCBFbmNhcHN1bGF0aW9uIGFuZCBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBjaGFuZ2UuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHdoYXQgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQgYW5kIHdoeSwgZ2l2ZW4gdGhlIHNjb3BlLgoKRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gY2FsbGJhY2ssIGByeHJwY19lbmNhcF9yY3ZgLiBUaGlzIGZ1bmN0aW9uLCBhcyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludCwgaXMgZnVuZGFtZW50YWwuIEl0JiMzOTtzIHRoZSByZWNlaXZlciBvZiB0aGUgVURQIHBhY2tldHMuIEkgc2VlIHRoYXQgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IG5vdyBuZWVkcyBjYXJlZnVsIGFjY291bnRpbmcgb2Ygc29ja2V0IGJ1ZmZlciB1c2FnZSwgY2hlY2tpbmcgYHVkcF9zay0mZ3Q7c2tfcm1lbV9hbGxvY2AgYWdhaW5zdCBgc2tfcmN2YnVmYCwgc2V0dGluZyBvd25lcnNoaXAgdXNpbmcgYHNrYl9zZXRfb3duZXJfcmAgd2l0aGluIGEgbG9jaywgYW5kIGRyb3BwaW5nIHBhY2tldHMgd2hlbiBvdmVyIHRoZSBsaW1pdC4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcGllY2Ugb2YgbG9naWMgdGhhdCB0b3VjaGVzIHRoZSBjcml0aWNhbCByZWNlaXZlIHBhdGguCgpUaGVuLCB0aGVyZSBpcyBgcnhycGNfaW9fdGhyZWFkYCwgdGhlIGtlcm5lbCB0aHJlYWQgaGFuZGxpbmcgSS9PIGZvciB0aGUgUnhSUEMgbG9jYWwgZW5kcG9pbnQuIGByeHJwY19za2Jfb3JwaGFuX3VkcCgpYCBpcyBhbHNvIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBsaWZlY3ljbGUgaXMgY3J1Y2lhbCwgc2luY2UgaXQgaGFuZGxlcyBkcm9wcGluZyBzb2NrZXQgb3duZXJzaGlwLgoKYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGlzIGVzc2VudGlhbC4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0ZWFyaW5nIGRvd24gdGhlIFJ4UlBDIGxvY2FsIGVuZHBvaW50IGFuZCBjbG9zaW5nIHRoZSBzb2NrZXQuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgaXQmIzM5O3Mgbm9uLXN0YXRpYywgc28sIGl0JiMzOTtzIGEga2V5IEFQSSBlbnRyeXBvaW50LiBUaGUgY2hhbmdlIGluY2x1ZGVzIHNvY2tldCB0ZWFyZG93biBhbmQgUkNVIGhhbmRsaW5nIG1vZGlmaWNhdGlvbnMuCgpUaGUgYHJ4cnBjX2xvb2t1cF9sb2NhbGAgKG9yIGByeHJwY19vcGVuX3NvY2tldGApIGlzIHVzZWQgdG8gb3BlbiB0aGUgVURQIHR1bm5lbCBzb2NrZXQgYW5kIGluaXRpYWxpemUgaXQuIEl0cyBtb2RpZmljYXRpb25zIHRvIHNvY2tldCBidWZmZXIgc2l6aW5nIGFyZSBhbHNvIG9mIGludGVyZXN0LgoKVGhlIHN0YXRpYyBmdW5jdGlvbnMgYHJ4cnBjX3NrYl9vcnBoYW5fdWRwYCwgYW5kIGByeHJwY19vcGVuX3NvY2tldGAgYW5kIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAgYWxzbyBuZWVkIHRvIGJlIGluY2x1ZGVkIHNpbmNlIHRoZXkgYXJlIHBvdGVudGlhbGx5IHJlbGV2YW50LgoKQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50OgotIGByeHJwY19lbmNhcF9yY3ZgCi0gYHJ4cnBjX2lvX3RocmVhZGAKLSBgcnhycGNfZGVzdHJveV9sb2NhbGAKLSBgcnhycGNfb3Blbl9zb2NrZXRgCi0gYHJ4cnBjX3NrYl9vcnBoYW5fdWRwYAotIGByeHJwY19sb29rdXBfbG9jYWxgCgpOb3csIGZvciBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgYEFGX1JYUlBDYCwgYElORVRgLCBgQUZfUlhSUENfSVBWNmAsIGFuZCBgSVBWNmAuIFRoaXMgbWFrZXMgc2Vuc2UuIGBBRl9SWFJQQ2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUsIHJlcXVpcmluZyBgSU5FVGAsIGFuZCBgQUZfUlhSUENfSVBWNmAgZGVwZW5kcyBvbiBib3RoIGBBRl9SWFJQQ2AgYW5kIGBJUFY2YC4KClNvLCBmb3IgJiMzNDtFbmFibGVDb25maWdzJiMzNDssIEkmIzM5O2xsIGxpc3Q6Ci0gYEFGX1JYUlBDYAotIGBJTkVUYAotIGBJUFY2YAotIGBBRl9SWFJQQ19JUFY2YAoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBjb3ZlcnMgdGhlIGltcG9ydGFudCBhcmVhcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBzb2NrZXQgYnVmZmVyIGFjY291bnRpbmcsIGludHJvZHVjaW5nIGxvY2tpbmcsIGFuZCBhZmZlY3RpbmcgYm90aCB0aGUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgdGVhcmRvd24gbGlmZWN5Y2xlLiBJdCYjMzk7cyB0b3VjaGluZyBidWZmZXIgYWxsb2NhdGlvbiwgb3duZXJzaGlwLCBhbmQgcmVsZWFzZSwgc28gSSB3b3VsZCBjZXJ0YWlubHkgY29uc2lkZXIgdGhpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGR1ZSB0byB0aGUgaGlnaCByaXNrIG9mIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7QUZfUlhSUENfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfc2tiX29ycGhhbl91ZHAmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyeHJwY19vcGVuX3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19sb29rdXBfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cbjMuIEJ1ZyBEZXRlY3RvciBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiAoYHNrX3JlY2VpdmVfcXVldWUubG9ja2ApLCBzb2NrZXQgcmVmZXJlbmNlIGxpZmVjeWNsZSAvIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgYWNjb3VudGluZyBlcnJvcnMsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChMT0NLREVQLCBLQVNBTiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTIwY2FjNGMwZjA2NTMzOTYzYmFmMTE1NWJiMzE2YzlmMDI5ZmJmNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDE1OjI5OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jCmluZGV4IGRjNTE4NGEyZmE5ZDEuLmM3NzI0MWIxMmY1OTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKQEAgLTcsMTIgJiM0Mzs3LDQ4IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKIHN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgICAgc3RydWN0IHNvY2thZGRyX3J4cnBjICpwZWVyX3NyeCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAomIzQzOy8qCiYjNDM7ICogRHJvcCBVRFAgcm1lbSBvd25lcnNoaXAgZm9yIHBhY2tldHMgY2hhcmdlZCBpbiBlbmNhcF9yY3YoKS4KJiM0MzsgKiBza19mb3J3YXJkX2FsbG9jIGlzIHNlcmlhbGlzZWQgYnkgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJc2tiX29ycGhhbihza2IpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTsKJiM0MzsKJiM0MzsJc2tfZHJvcHNfaW5jKHVkcF9zayk7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiYjNDM7CQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpOwomIzQzOwl9IGVsc2UKJiM0MzsjZW5kaWYKJiM0MzsJewomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpOwomIzQzOwkJX19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7CiYjNDM7CX0KJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHVkcF9zaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnQKICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dApAQCAtMjgsNiAmIzQzOzY0LDggQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBza19idWZmX2hlYWQgKnJ4X3F1ZXVlOwogCXN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkcm9vbTsKJiM0MzsJdW5zaWduZWQgaW50IHJjdmJ1ZjsKIAogCWlmICh1bmxpa2VseSghbG9jYWwpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNDEsOCAmIzQzOzc5LDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7ODgsMjQgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CXJjdmJ1ZiA9IFJFQURfT05DRSh1ZHBfc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWhlYWRyb29tID0gU0tCX1RSVUVTSVpFKFJYUlBDX0pVTUJPKDEpKSAqIDI7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJaWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoJmFtcDt1ZHBfc2stJmd0O3NrX3JtZW1fYWxsb2MpICYjNDM7CiYjNDM7CSAgICBza2ItJmd0O3RydWVzaXplICYjNDM7IGhlYWRyb29tICZndDs9IHJjdmJ1ZiB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO3VkcF9zay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJCXJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKJiM0MzsJc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt1ZHBfc2stJmd0O3NrX3JlY2VpdmVfcXVldWUubG9jayk7CiYjNDM7CXNrYl9kc3RfZHJvcChza2IpOwomIzQzOwomIzQzOwlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7CiYjNDM7CXJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7CiAJc2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7CiAJd2FrZV91cF9wcm9jZXNzKGlvX3RocmVhZCk7CiAJcmV0dXJuIDA7CkBAIC00NzEsNiAmIzQzOzUyNSw5IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSkKIAkJLyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3J4X3F1ZXVlKSkpIHsKIAkJCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiLSZndDttYXJrID09IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVCkKJiM0MzsJCQkJcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi4yZjkzODkxZTg0MWFiIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmYgPSB7MH07CiAJc3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7CiAJc3RydWN0IHNvY2sgKnVzazsKJiM0MzsJdTMyIHJjdmJ1ZjsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7JXB7JWQsJWR9JiMzNDssCkBAIC0xOTgsNiAmIzQzOzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldCkKIAogCS8qIHNldCB0aGUgc29ja2V0IHVwICovCiAJdXNrID0gbG9jYWwtJmd0O3NvY2tldC0mZ3Q7c2s7CiYjNDM7CS8qIE9uZSBhZHZlcnRpc2VkIG9yZGluYXJ5LURBVEEgd2luZG93LCBub3QganVtYm8tbWF4LiAqLwomIzQzOwlyY3ZidWYgPSByeHJwY19yeF93aW5kb3dfc2l6ZSAqIFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyOwomIzQzOwlyY3ZidWYgJiM0Mzs9IHJjdmJ1ZiAvIDQ7CiYjNDM7CXJjdmJ1ZiA9IGNsYW1wKHJjdmJ1ZiwgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX2RlZmF1bHQpLAomIzQzOwkJICAgICAgIFJFQURfT05DRShzeXNjdGxfcm1lbV9tYXgpKTsKJiM0MzsJV1JJVEVfT05DRSh1c2stJmd0O3NrX3JjdmJ1ZiwgcmN2YnVmKTsKIAl1c2stJmd0O3NrX2Vycm9yX3JlcG9ydCA9IHJ4cnBjX2Vycm9yX3JlcG9ydDsKIAogCXN3aXRjaCAoc3J4LSZndDt0cmFuc3BvcnQuZmFtaWx5KSB7CkBAIC00MzcsOCAmIzQzOzQ0NCw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NTUsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjIybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLCB0aGVuIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkZpcnN0LCBsZXQmIzM5O3MgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSBpdCBwcmltYXJpbHkgY29uY2VybnMgdGhlIGByeHJwY2AgbmV0d29yayBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIFVEUCBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgcmVjZWl2ZSBwYXRoLgoKKiAgIEluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgLCB0aGUga2V5IGFkZGl0aW9uIGlzIGByeHJwY19za2Jfb3JwaGFuX3VkcChza2IpYC4gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBkcm9wIFVEUCBybWVtIG93bmVyc2hpcCBvZiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgdXNlIG9mIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBhIHNwaW5sb2NrLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGFyZWEgdG8gd2F0Y2ggYXMgc3BpbmxvY2tzIGNhbiBtYWtlIGFuYWx5c2lzIHRyaWNreS4gVGhlbiB0aGVyZSYjMzk7cyBgcnhycGNfZW5jYXBfcmN2X2Ryb3AodWRwX3NrLCBza2IpYCB3aGljaCBpbmNyZW1lbnRzIHN0YXRzIGFuZCBjYWxscyBgc2tfc2tiX3JlYXNvbl9kcm9wKClgLiBBbmQgd2l0aGluIGByeHJwY19lbmNhcF9yY3YoKWAsIHRoZSBjb2RlIGNoZWNrcyB0aGUgcmVjZWl2ZSBidWZmZXIgKGBza19yY3ZidWZgKSBvZiB0aGUgVURQIHNvY2tldCAoYHVkcF9za2ApLiBJdCBhbHNvIGNhbGN1bGF0ZXMgaGVhZHJvb20gYW5kIGNoZWNrcyBgc2tfcm1lbV9zY2hlZHVsZWAsIGFuZCBkcm9wcyBwYWNrZXRzIGlmIHRoZSBidWZmZXIgaXMgZXhjZWVkZWQuIFRoaXMgaXMgbm9ybWFsLiBUaGUgaW1wb3J0YW50IHBhcnRzIGFyZSB0aGUgdXNlIG9mIGBza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spYCB0byBjaGFyZ2UgdGhlIFNLQiB0byB0aGUgc29ja2V0IHdpdGhpbiBhIGxvY2ssIHRoZW4gbGF0ZXIgdW5jaGFyZ2VzIGl0IHdpdGggYHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYilgIHdoZW4gZGVxdWV1aW5nIGZyb20gYHJ4X3F1ZXVlYC4KCiogICBgbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jYCBpcyBhbHNvIG1vZGlmaWVkLCB3aXRoIGNoYW5nZXMgdG8gYHJ4cnBjX29wZW5fc29ja2V0YCwgd2hlcmUgdGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgKGBza19yY3ZidWZgKSBpcyBzZXQgYmFzZWQgb24gdGhlIGFkdmVydGlzZWQgd2luZG93IGFuZCBzeXN0ZW0td2lkZSBtZW1vcnkgbGltaXRzLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIHdoaWNoIHVzZXMgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBhbmQgYHN5bmNocm9uaXplX3JjdWAgZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbi4gVGhpcyBpcyBsaWtlbHkgdGhlIHNvY2tldCBjbGVhbnVwIGFuZCByZWxlYXNlIHBhdGguIFRoZSBkZWZlcnJhbCBvZiBgc29ja19yZWxlYXNlYCBhZnRlciBwdXJnaW5nIHF1ZXVlcyBpcyBhbHNvIGtleS4KClNvLCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXM6CgoxLiAgTWFuYWdpbmcgU0tCIG93bmVyc2hpcCByZWxhdGVkIHRvIGEgVURQIHNvY2tldC4KMi4gIEJ1ZmZlciBzaXplIGNoZWNrcyBhbmQgZHJvcHBpbmcgcGFja2V0cy4KMy4gIFNvY2tldCBkZXN0cnVjdGlvbiBhbmQgY2xlYW51cC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIEtNU0FOIGFuZ2xlcyBoZXJlLiBUaGUgbW9zdCBvYnZpb3VzIGFyZWEgb2YgY29uY2VybiBpcyBhcm91bmQgdGhlIGJ1ZmZlciBvd25lcnNoaXAgdHJhbnNmZXIgYW5kIHJlbGVhc2Ugd2l0aGluIHRoZSByZWNlaXZlIHBhdGguIFNwZWNpZmljYWxseSwgYHNrYl9zZXRfb3duZXJfcmAgYW5kIGBza2Jfb3JwaGFuYC4gV2UgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IHVzZSBvZiBtZW1vcnkgb3duZXJzaGlwLCBvciBidWZmZXIgcmUtdXNlIGNhbiB0cmlnZ2VyIEtNU0FOLiBUaGUgdXNlIG9mIHNwaW5sb2NrcyBhbmQgYHJjdWAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGV5IHVzdWFsbHkgaW5jcmVhc2UgdGhlIGNvbXBsZXhpdHkgb2YgYW5hbHlzaXMuIExldCBtZSBjaGVjayB0aGUgY29kZSBhcm91bmQgYHJ4cnBjX3B1cmdlX3F1ZXVlYC4gSXQmIzM5O3MgcG9zc2libGUgdG8gZmluZCBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfcHVyZ2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL2FmX3J4cnBjLmM9OTA3PXN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTExLVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjkxMjpcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTEzLVxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTkyNz1zdGF0aWMgaW50IHJ4cnBjX3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY0LVx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjk2NTpcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY2LVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTE1MTc9dm9pZCByeHJwY19mcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqLCBlbnVtIHJ4cnBjX3NrYl90cmFjZSk7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNTE4OnZvaWQgcnhycGNfcHVyZ2VfcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTE1MTktXG4tLVxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM9NTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2NsZWFudXBfcnhfYnVmZmVycyhzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbm5ldC9yeHJwYy9jYWxsX29iamVjdC5jLTU1NS17XG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYzo1NTY6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpO1xubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM6NTU3Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2Y2FsbC1cdTAwM2VyeF9xdWV1ZSk7XG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYzo1NTg6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZjYWxsLVx1MDAzZXJ4X29vc19xdWV1ZSk7XG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYy01NTktXHRrZnJlZShjYWxsLVx1MDAzZXJ4X2RlY19idWZmZXIpO1xuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTMwNj1zdGF0aWMgdm9pZCByeHJwY19jbGVhbl91cF9jb25uZWN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0zMzEtXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzozMzI6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZjb25uLVx1MDAzZXJ4X3F1ZXVlKTtcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTMzMy1cdHJ4cnBjX2ZyZWVfc2tiKGNvbm4tXHUwMDNldHhfcmVzcG9uc2UsIHJ4cnBjX3NrYl9wdXRfcmVzcG9uc2UpO1xuLS1cbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTM0Ni1cdCAqL1xubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmM6MzQ3Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2Y29ubi1cdTAwM2VyeF9xdWV1ZSk7XG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0zNDgtXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTQyNz12b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU0LSNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6NDU1Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ1Ni0jZW5kaWZcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0NTc6XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSk7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU4LVxuLS1cbm5ldC9yeHJwYy9yZWN2bXNnLmM9NDA3PWludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi0tXG5uZXQvcnhycGMvcmVjdm1zZy5jLTU2Ny1jYWxsX2ZhaWxlZDpcbm5ldC9yeHJwYy9yZWN2bXNnLmM6NTY4Olx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKTtcbm5ldC9yeHJwYy9yZWN2bXNnLmMtNTY5LWNhbGxfY29tcGxldGU6XG4tLVxubmV0L3J4cnBjL3NrYnVmZi5jPTUyPXZvaWQgcnhycGNfZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSByeHJwY19za2JfdHJhY2Ugd2h5KVxuLS1cbm5ldC9yeHJwYy9za2J1ZmYuYy02My0gKi9cbm5ldC9yeHJwYy9za2J1ZmYuYzo2NDp2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG5uZXQvcnhycGMvc2tidWZmLmMtNjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYHJ4cnBjX3B1cmdlX3F1ZXVlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBgcnhycGNfcHVyZ2VfcXVldWVgIGZ1bmN0aW9uLiBNeSBicmFpbiYjMzk7cyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHJ1biB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGFuZCB0aGUgdXN1YWwgZ290Y2hhcyB3aXRoIHF1ZXVlIG1hbmFnZW1lbnQgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBhcm91bmQgaXRlcmF0aW5nLCBmcmVlaW5nLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZXJyb3JzIGR1cmluZyB0aGUgcHVyZ2UgcHJvY2Vzcy4gS25vd2luZyB0aGUgYnJvYWRlciBSeFJQQyBjb250ZXh0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBtZXNzYWdlIGxpZmV0aW1lcywgY29ubmVjdGlvbiBzdGF0ZSwgYW5kIHBvc3NpYmx5IGV2ZW4gY29uY3VycmVuY3kgaXNzdWVzLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgdGhpcyBmdW5jdGlvbiB0byB0aGUgbGFyZ2VyIGNvbW11bmljYXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZS4gVGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCByZXNvdXJjZSBjbGVhbnVwIGFuZCBlbnN1cmluZyBhIHJvYnVzdCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFxuICA2MTpcdC8qXG4gIDYyOlx0ICogQ2xlYXIgYSBxdWV1ZSBvZiBzb2NrZXQgYnVmZmVycy5cbiAgNjM6XHQgKi9cbiAgNjQ6XHR2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG4gIDY1Olx0e1xuICA2NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgNjc6XHRcbiAgNjg6XHRcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoKGxpc3QpKSkgIT0gTlVMTCkge1xuICA2OTpcdFx0XHRpbnQgbiA9IGF0b21pY19kZWNfcmV0dXJuKHNlbGVjdF9za2JfY291bnQoc2tiKSk7XG4gIDcwOlx0XHRcdHRyYWNlX3J4cnBjX3NrYihza2IsIHJlZmNvdW50X3JlYWQoXHUwMDI2c2tiLVx1MDAzZXVzZXJzKSwgbixcbiAgNzE6XHRcdFx0XHRcdHJ4cnBjX3NrYl9wdXRfcHVyZ2UpO1xuICA3MjpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuICA3MzpcdFx0fVxuICA3NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcxNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IFJlbGVhc2UgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgaG93IGl0JiMzOTtzIHJlbGVhc2VkIGFmdGVyIGJlaW5nIHVzZWQgaW4gdGhlIGByeHJwY2AgY29udGV4dC4gSWYgYHNrYmAgZ2V0cyBwdXJnZWQgdXNpbmcgYHJ4cnBjX3B1cmdlX3F1ZXVlYCBvciB0aHJvdWdoIHRoZSBtb3JlIGdlbmVyYWwgYGNvbnN1bWVfc2tiYCBvciBga2ZyZWVfc2tiYCBwYXRocywgdGhlIHNvY2tldCByZWZlcmVuY2Ugc2hvdWxkIGJlIHJlbGVhc2VkLCBhbmQgdGhlIGFzc29jaWF0ZWQgcm1lbSAocmVjZWl2ZSBtZW1vcnkpIHNob3VsZCBiZSB1bmNoYXJnZWQuIFRoaXMgdW5jaGFyZ2luZyBpcyBrZXk7IGl0JiMzOTtzIGRvbmUgZWl0aGVyIHZpYSBgc2tiX29ycGhhbmAgb3IgdGhyb3VnaCBhIGRlc3RydWN0b3IsIGxpa2UgYHNvY2tfcmZyZWVgLgoKQnV0IGhvbGQgb24sIHRoZXJlJiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgd2hlbiBgc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKWAgaXMgY2FsbGVkLiBUaGlzIHNldHMgdGhlIGBza2ItJmd0O2Rlc3RydWN0b3JgIHRvIGBzb2NrX3JmcmVlYCBhbmQgbGlua3MgdGhlIGBza2JgIHRvIHRoZSBzb2NrZXQgKGBza2ItJmd0O3NrID0gc2tgKS4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyLCBkb2VzIGBzb2NrX3JmcmVlYCByZXF1aXJlIHRoZSBgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYD8gVGhhdCYjMzk7cyBlc3NlbnRpYWwgdG8gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHNvY2tfcmZyZWVgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgVURQIGFuZCBjb3JlIG5ldHdvcmtpbmcgY29udGV4dCB0byBtYWtlIHN1cmUgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpcyB0aHJlYWQtc2FmZSBhbmQgY29ycmVjdC4gSSYjMzk7bGwgY2hlY2sgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNvY2tfcmZyZWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oPTE4NjY9dm9pZCBza2Jfb3JwaGFuX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9zb2NrLmg6MTg2Nzp2b2lkIHNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9zb2NrLmgtMTg2OC12b2lkIHNvY2tfcm1lbV9mcmVlKHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0yNzkzPUVYUE9SVF9TWU1CT0woc2tiX29ycGhhbl9wYXJ0aWFsKTtcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjc5Ny0gKi9cbm5ldC9jb3JlL3NvY2suYzoyNzk4OnZvaWQgc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc29jay5jLTI3OTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgU29ja2V0IFJlbGVhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG5ldC9jb3JlL3NvY2suY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBzb2NrX3JmcmVlYCBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IHdvcmtpbmcgYXMgZXhwZWN0ZWQgaW4gdGhlIHNvY2tldCByZWxlYXNlIHByb2Nlc3MgYW5kIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSwgd2hhdCByZXNvdXJjZXMgaXQmIzM5O3MgZnJlZWluZywgYW5kIGlmIHRoZXJlIG1pZ2h0IGJlIGEgcG90ZW50aWFsIGxlYWsgb3IgaW1wcm9wZXIgaGFuZGxpbmcgd2l0aGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgdGltZSB0byBnZXQgZG93biB0byB0aGUgbG93LWxldmVsIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3OTU6XHQvKlxuMjc5NjpcdCAqIFJlYWQgYnVmZmVyIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBrZnJlZV9za2IuXG4yNzk3Olx0ICovXG4yNzk4Olx0dm9pZCBzb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXG4yNzk5Olx0e1xuMjgwMDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVx1MDAzZXNrO1xuMjgwMTpcdFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbjI4MDI6XHRcbjI4MDM6XHRcdGF0b21pY19zdWIobGVuLCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbjI4MDQ6XHRcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcbjI4MDU6XHR9XG4yODA2Olx0RVhQT1JUX1NZTUJPTChzb2NrX3JmcmVlKTtcbjI4MDc6XHRcbjI4MDg6XHQvKlxuMjgwOTpcdCAqIEJ1ZmZlciBkZXN0cnVjdG9yIGZvciBza2JzIHRoYXQgYXJlIG5vdCB1c2VkIGRpcmVjdGx5IGluIHJlYWQgb3Igd3JpdGVcbjI4MTA6XHQgKiBwYXRoLCBlLmcuIGZvciBlcnJvciBoYW5kbGVyIHNrYnMuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20ga2ZyZWVfc2tiLlxuMjgxMTpcdCAqL1xuMjgxMjpcdHZvaWQgc29ja19lZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjgxMzpcdHtcbjI4MTQ6XHRcdHNvY2tfcHV0KHNrYi1cdTAwM2Vzayk7XG4yODE1Olx0fVxuMjgxNjpcdEVYUE9SVF9TWU1CT0woc29ja19lZnJlZSk7XG4yODE3Olx0XG4yODE4Olx0LyogQnVmZmVyIGRlc3RydWN0b3IgZm9yIHByZWZldGNoL3JlY2VpdmUgcGF0aCB3aGVyZSByZWZlcmVuY2UgY291bnQgbWF5XG4yODE5Olx0ICogbm90IGJlIGhlbGQsIGUuZy4gZm9yIGxpc3RlbiBzb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEaXZpbmcgaW50byBgc2tfbWVtX3VuY2hhcmdlYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLi4uIFdoYXQgZXhhY3RseSBpcyB0aGUgZnVuY3Rpb24gb2YgYHNrX21lbV91bmNoYXJnZWAgaW4gdGhpcyBjb250ZXh0PyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suIEkmIzM5O2xsIGdldCByaWdodCB0byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTm8gdGltZSB0byB3YXN0ZTsgbGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX21lbV91bmNoYXJnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zb2NrLmg9MTYzNz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0xNjQzLVxuaW5jbHVkZS9uZXQvc29jay5oOjE2NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxuaW5jbHVkZS9uZXQvc29jay5oLTE2NDUte1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTMyNz1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3dtZW1fZnJlZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTMzMC1cdGlmICghc2tiX3pjb3B5X3B1cmUoc2tiKSlcbmluY2x1ZGUvbmV0L3RjcC5oOjMzMTpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItXHUwMDNldHJ1ZXNpemUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMzMyLVx0ZWxzZVxuaW5jbHVkZS9uZXQvdGNwLmg6MzMzOlx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChza2IpKSk7XG5pbmNsdWRlL25ldC90Y3AuaC0zMzQtXHRfX2tmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTMwNDk9QlBGX0NBTExfNChicGZfbXNnX3BvcF9kYXRhLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZywgdTMyLCBzdGFydCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zMTc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MzE3NjpcdHNrX21lbV91bmNoYXJnZShtc2ctXHUwMDNlc2ssIGxlbiAtIHBvcCk7XG5uZXQvY29yZS9maWx0ZXIuYy0zMTc3LVx0bXNnLVx1MDAzZXNnLnNpemUgLT0gKGxlbiAtIHBvcCk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMzg9dm9pZCBza19tc2dfcmV0dXJuX3plcm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jLTE0Ny1cdFx0XHRzZ2UtXHUwMDNlb2Zmc2V0ICYjNDM7PSBieXRlcztcbm5ldC9jb3JlL3NrbXNnLmM6MTQ4Olx0XHRcdHNrX21lbV91bmNoYXJnZShzaywgYnl0ZXMpO1xubmV0L2NvcmUvc2ttc2cuYy0xNDktXHRcdFx0YnJlYWs7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xNTEtXG5uZXQvY29yZS9za21zZy5jOjE1MjpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZ2UtXHUwMDNlbGVuZ3RoKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTUzLVx0XHRieXRlcyAtPSBzZ2UtXHUwMDNlbGVuZ3RoO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTYyPXZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTY5LVxubmV0L2NvcmUvc2ttc2cuYzoxNzA6XHRcdHNrX21lbV91bmNoYXJnZShzaywgdW5jaGFyZ2UpO1xubmV0L2NvcmUvc2ttc2cuYy0xNzEtXHRcdGJ5dGVzIC09IHVuY2hhcmdlO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTc3PXN0YXRpYyBpbnQgc2tfbXNnX2ZyZWVfZWxlbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xODUtXHRcdGlmIChjaGFyZ2UpXG5uZXQvY29yZS9za21zZy5jOjE4NjpcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIGxlbik7XG5uZXQvY29yZS9za21zZy5jLTE4Ny1cdFx0cHV0X3BhZ2Uoc2dfcGFnZShzZ2UpKTtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yMzUtXHRcdFx0aWYgKGNoYXJnZSlcbm5ldC9jb3JlL3NrbXNnLmM6MjM2Olx0XHRcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBieXRlcyk7XG5uZXQvY29yZS9za21zZy5jLTIzNy1cdFx0XHRzZ2UtXHUwMDNlbGVuZ3RoIC09IGJ5dGVzO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MjY0PXZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yODUtXHRtc2ctXHUwMDNlc2cuZGF0YVtpXS5sZW5ndGggLT0gdHJpbTtcbm5ldC9jb3JlL3NrbXNnLmM6Mjg2Olx0c2tfbWVtX3VuY2hhcmdlKHNrLCB0cmltKTtcbm5ldC9jb3JlL3NrbXNnLmMtMjg3LVx0LyogQWRqdXN0IGNvcHlicmVhayBpZiBpdCBmYWxscyBpbnRvIHRoZSB0cmltbWVkIHBhcnQgb2YgbGFzdCBidWYgKi9cbi0tXG5uZXQvY29yZS9za21zZy5jPTQxMz1pbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvY29yZS9za21zZy5jLTQ1Ny1cdFx0XHRcdGlmICghbXNnX3J4LVx1MDAzZXNrYikge1xubmV0L2NvcmUvc2ttc2cuYzo0NTg6XHRcdFx0XHRcdHNrX21lbV91bmNoYXJnZShzaywgY29weSk7XG5uZXQvY29yZS9za21zZy5jLTQ1OS1cdFx0XHRcdFx0YXRvbWljX3N1Yihjb3B5LCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbi0tXG5uZXQvY29yZS9zb2NrLmM9Mjc5OD12b2lkIHNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjgwMy1cdGF0b21pY19zdWIobGVuLCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbm5ldC9jb3JlL3NvY2suYzoyODA0Olx0c2tfbWVtX3VuY2hhcmdlKHNrLCBsZW4pO1xubmV0L2NvcmUvc29jay5jLTI4MDUtfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xMzItXHRcdGlmICh1bmNoYXJnZSlcbm5ldC9pcHY0L3RjcF9icGYuYzoxMzM6XHRcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCByZXQpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTEzNC1cdFx0aWYgKHJldCAhPSBzaXplKSB7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDk1LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdGNwX2JwZi5jOjQ5NjpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZW50KTtcbm5ldC9pcHY0L3RjcF9icGYuYy00OTctXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE5NzI9aW50IHRjcF90cmltX2hlYWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xOTg1LVx0aWYgKCFza2JfemNvcHlfcHVyZShza2IpKVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE5ODY6XHRcdHNrX21lbV91bmNoYXJnZShzaywgZGVsdGFfdHJ1ZXNpemUpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTE5ODctXG4tLVxubmV0L2tjbS9rY21zb2NrLmM9MTczPXN0YXRpYyB2b2lkIGtjbV9yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9rY20va2Ntc29jay5jLTE3OS1cbm5ldC9rY20va2Ntc29jay5jOjE4MDpcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcbm5ldC9rY20va2Ntc29jay5jLTE4MS1cdGF0b21pY19zdWIobGVuLCBcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMTQ3PXN0YXRpYyB2b2lkIGRmcmFnX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNDgte1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTE0OTpcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNTAtXHRza193bWVtX3F1ZXVlZF9hZGQoc2ssIC1sZW4pO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMzg9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQzLVx0YXRvbWljX3N1Yihza2ItXHUwMDNldHJ1ZXNpemUsIFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjE0NDpcdHNrX21lbV91bmNoYXJnZShzaywgc2tiLVx1MDAzZXRydWVzaXplKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDUtXHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz05MjEzPXN0YXRpYyB2b2lkIHNjdHBfd2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy05MjE4LVxubmV0L3NjdHAvc29ja2V0LmM6OTIxOTpcdHNrX21lbV91bmNoYXJnZShzaywgc2tiLVx1MDAzZXRydWVzaXplKTtcbm5ldC9zY3RwL3NvY2tldC5jLTkyMjAtXHRza193bWVtX3F1ZXVlZF9hZGQoc2ssIC0oc2tiLVx1MDAzZXRydWVzaXplICYjNDM7IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVuaykpKTtcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz05MjU2PXZvaWQgc2N0cF9zb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtOTI2NS1cdCAqL1xubmV0L3NjdHAvc29ja2V0LmM6OTI2NjpcdHNrX21lbV91bmNoYXJnZShzaywgZXZlbnQtXHUwMDNlcm1lbV9sZW4pO1xubmV0L3NjdHAvc29ja2V0LmMtOTI2Ny19XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTE2OD1pbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yMTEtXHRcdHB1dF9wYWdlKHApO1xubmV0L3Rscy90bHNfbWFpbi5jOjIxMjpcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cdTAwM2VsZW5ndGgpO1xubmV0L3Rscy90bHNfbWFpbi5jLTIxMy1cdFx0c2cgPSBzZ19uZXh0KHNnKTtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MjgxPXZvaWQgdGxzX2ZyZWVfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtMjg2LVx0XHRwdXRfcGFnZShzZ19wYWdlKHNnKSk7XG5uZXQvdGxzL3Rsc19tYWluLmM6Mjg3Olx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVx1MDAzZWxlbmd0aCk7XG5uZXQvdGxzL3Rsc19tYWluLmMtMjg4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBTb2NrZXQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza19tZW1fdW5jaGFyZ2VgIHdvcmtzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBpbmNsdWRlL25ldC9zb2NrLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzb2NrZXQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGtlcm5lbC4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lOyBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gZG9lcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciB0aGUgb3ZlcmFsbCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gYSBzb2NrZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byBnbyBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY0MDpcdFx0XHRyZXR1cm47XG4xNjQxOlx0XHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgLXNpemUpO1xuMTY0MjpcdH1cbjE2NDM6XHRcbjE2NDQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tfbWVtX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgaW50IHNpemUpXG4xNjQ1Olx0e1xuMTY0NjpcdFx0aWYgKCFza19oYXNfYWNjb3VudChzaykpXG4xNjQ3Olx0XHRcdHJldHVybjtcbjE2NDg6XHRcdHNrX2ZvcndhcmRfYWxsb2NfYWRkKHNrLCBzaXplKTtcbjE2NDk6XHRcdHNrX21lbV9yZWNsYWltKHNrKTtcbjE2NTA6XHR9XG4xNjUxOlx0XG4xNjUyOlx0dm9pZCBfX3NrX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IGdmcCk7XG4xNjUzOlx0XG4xNjU0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19NT0RVTEVTKVxuMTY1NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza19vd25lcl9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbjE2NTY6XHR7XG4xNjU3Olx0XHRfX21vZHVsZV9nZXQob3duZXIpO1xuMTY1ODpcdFx0c2stXHUwMDNlc2tfb3duZXIgPSBvd25lcjtcbjE2NTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE2OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDgxCgkJCQkJCQlvdXRwdXQ6IDI3MAoJCQkJCQkJdGhvdWdodHM6IDI2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4qKgoKT2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2guIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIHRoZSBjb2RlIGNoYW5nZXMgbWV0aWN1bG91c2x5LCBjb25zaWRlcmluZyB0aGUgS01TQU4gY3JpdGVyaWEgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGJ1Z3MuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBjb3JyZWN0IHNvY2tldCBzdGF0ZSBtYW5hZ2VtZW50LCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb2RlIGluIGByeHJwY19za2Jfb3JwaGFuX3VkcGAsIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAsIGFuZCBgcnhycGNfZW5jYXBfcmN2YC4gSXTigJlzIGNsZWFyIHRvIG1lIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgbGlmZWN5Y2xlIG9mIFNLQnMgd2l0aGluIHRoZSBSWFJQQyBzdWJzeXN0ZW0uIFRoZSBrZXkgaXMgaW4gbWFpbnRhaW5pbmcgdGhlIHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBhbmQgZHJvcHBpbmcgcGFja2V0cyBpZiB0aGVzZSBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBJIG5vdGUgdGhlIGxvY2tpbmcgYXJvdW5kIHRoZSByZWNlaXZlIHF1ZXVlIGFuZCB0aGUgdXNlIG9mIGBza2Jfb3JwaGFuYCwgd2hpY2ggYXJlIGNsYXNzaWMgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gdGhpcyBzb3J0IG9mIG5ldHdvcmsgY29kZS4gSSBkbyBub3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGxvY2tpbmcgaGVyZSwgd2hpbGUgaW1wb3J0YW50LCBpcyBtb3JlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgYXRvbWljaXR5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpOZXh0LCBJIGxvb2tlZCBhdCB0aGUgY2hhbmdlcyBpbiBgcnhycGNfb3Blbl9zb2NrZXRgIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgYXJlIGJlaW5nIGNhbGN1bGF0ZWQgYW5kIHNldCBpbiB0aGUgb3BlbiBzb2NrZXQgZnVuY3Rpb24gYW5kIGNsZWFyZWQgaW4gdGhlIGRlc3Ryb3kuIFRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRpbWluZyBvZiBgc29ja19yZWxlYXNlYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFyZSBjcml0aWNhbCBidXQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgc29ja2V0IHRlYXJkb3duIGlzIGhhcHBlbmluZyB2aWEgUkNVIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGFzIHRoZSBzb2NrZXRzIGFyZSByZW1vdmVkLgoKSSBjb25zaWRlcmVkIGVhY2ggb2YgdGhlIGZvdXIgS01TQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2U6KiogTm9wZS4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3MgYWxsIGFib3V0IGludGVybmFsIHNvY2tldCBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nLgoKMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIEkgc2NydXRpbml6ZWQgZXZlcnkgdmFyaWFibGUgZGVjbGFyYXRpb24gYW5kIHVzYWdlLiBBbGwgbG9jYWwgdmFyaWFibGVzLCBzdWNoIGFzIGByY3ZidWZgLCBhbmQgYGhlYWRyb29tYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgd2hldGhlciBpdOKAmXMgcmVhZGluZyBmcm9tIHNvY2tldCBzdGF0ZSBvciBkb2luZyBhIGNhbGN1bGF0aW9uLiBJIGRvbuKAmXQgc2VlIGFueSBwb3RlbnRpYWwgZm9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuCgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUuIEl0IGlzIGp1c3QgYWRqdXN0aW5nIGEgZmV3IHNvY2tldCB2YXJpYWJsZXMuCgo0LiAgKipCb3VuZHMgY2hlY2tzIGFuZCB1bmluaXRpYWxpemVkIGJ5dGVzOioqIFRoZSBwYXRjaOKAmXMgYWRkaXRpb25zIGRvIG5vdCBjb21wcm9taXNlIHBhY2tldCBib3VuZGFyeSBjaGVja3Mgb3IgcmVhZCBwYXN0IGJ1ZmZlciBsaW1pdHMuIFRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcmVjZWl2ZSBidWZmZXIgbGltaXRzIHNlcnZlIHRvICpwcmV2ZW50KiBvdmVycnVucywgYnkgZHJvcHBpbmcgcGFja2V0cy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBwb3NzaWJsZSByaXNrcyBpbiB0aGlzIHBhdGNoOiBEZWFkbG9ja3MsIFVzZS1hZnRlci1GcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgbWVtb3J5IGxlYWsvYWNjb3VudGluZyBtaXNtYXRjaGVzLiBJIGRldGVybWluZWQgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIGlzc3Vlcy4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gVGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZWFkLiBUaGVyZSBpcyBhbHNvIG5vIGNoYW5nZSBpbiBob3cgZGF0YSBpcyByZWFkIGZyb20gdGhlIHBhY2tldCBpdHNlbGYuCgpJbiBjb25jbHVzaW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgZG8gKm5vdCogaW50cm9kdWNlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHByaW1hcnkgY29uY2VybnMgYXJlIHN5bmNocm9uaXphdGlvbiwgZGF0YSBjb25zaXN0ZW5jeSwgYW5kIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlc2UgYXJlIGJlc3QgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIHNhbml0aXphdGlvbiB0b29scy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cbjMuIEJ1ZyBEZXRlY3RvciBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiAoYHNrX3JlY2VpdmVfcXVldWUubG9ja2ApLCBzb2NrZXQgcmVmZXJlbmNlIGxpZmVjeWNsZSAvIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgYWNjb3VudGluZyBlcnJvcnMsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChMT0NLREVQLCBLQVNBTiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBhc3NlcnRpb25zKSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeTogQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgcmN2YnVmYCwgYGhlYWRyb29tYCwgYHNrYCwgYG5ldGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGNyZWF0ZWQsIHJlYWQsIG9yIG1vZGlmaWVkLlxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXG4zLiBCdWcgRGV0ZWN0b3IgQXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gKGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgKSwgc29ja2V0IHJlZmVyZW5jZSBsaWZlY3ljbGUgLyB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGFjY291bnRpbmcgZXJyb3JzLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoTE9DS0RFUCwgS0FTQU4sIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6Mjk6MzMuNTIwOTc4NjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTg4MjgwMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQUZfUlhSUENfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19za2Jfb3JwaGFuX3VkcFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiLFxuICAgIFwicnhycGNfb3Blbl9zb2NrZXRcIixcbiAgICBcInJ4cnBjX2xvb2t1cF9sb2NhbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXFxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXFxuMy4gQnVnIERldGVjdG9yIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIChgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYCksIHNvY2tldCByZWZlcmVuY2UgbGlmZWN5Y2xlIC8gdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKExPQ0tERVAsIEtBU0FOLCBhbmQgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsb2NhbCB0cmFuc3BvcnQgZW5kcG9pbnQgbWFuYWdlbWVudC4gSXQgaW1wbGVtZW50cyBybWVtIGFjY291bnRpbmcgYW5kIHNjaGVkdWxpbmcgZm9yIHJlY2VpdmVkIGVuY2Fwc3VsYXRpb24gc2ticyBpbiByeHJwY19lbmNhcF9yY3YsIHNrYiBvcnBoYW5pbmcgdW5kZXIgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrIGluIHJ4cnBjX2lvX3RocmVhZCwgc2V0cyBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgbGltaXRzIGluIHJ4cnBjX29wZW5fc29ja2V0LCBhbmQgYWx0ZXJzIHNvY2tldCByZWxlYXNlIG9yZGVyaW5nIGFuZCBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwuIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIHNvY2tldCBsaWZlY3ljbGUgYW5kIG5ldHdvcmtpbmcgZmFzdC1wYXRocywgd2FycmFudGluZyBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHNvY2tldCBhY2NvdW50aW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjI5OjMzLjUyMDk4NDg1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxOTk1NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTIwY2FjNGMwZjA2NTMzOTYzYmFmMTE1NWJiMzE2YzlmMDI5ZmJmNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxNToyOTozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcXG5pbmRleCBkYzUxODRhMmZhOWQxLi5jNzcyNDFiMTJmNTk3IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbkBAIC03LDEyICs3LDQ4IEBAXFxuIFxcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3VkcC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW50IHJ4cnBjX2lucHV0X3BhY2tldF9vbl9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc29ja2FkZHJfcnhycGMgKnBlZXJfc3J4LFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuKy8qXFxuKyAqIERyb3AgVURQIHJtZW0gb3duZXJzaGlwIGZvciBwYWNrZXRzIGNoYXJnZWQgaW4gZW5jYXBfcmN2KCkuXFxuKyAqIHNrX2ZvcndhcmRfYWxsb2MgaXMgc2VyaWFsaXNlZCBieSBza19yZWNlaXZlX3F1ZXVlLmxvY2suXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcbitcXHRpZiAoIXNrKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbitcXHRza2Jfb3JwaGFuKHNrYik7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnhycGNfZW5jYXBfcmN2X2Ryb3Aoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldCh1ZHBfc2spO1xcbitcXG4rXFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbitcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpO1xcbitcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XFxuK1xcdH0gZWxzZVxcbisjZW5kaWZcXG4rXFx0e1xcbitcXHRcXHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XFxuK1xcdFxcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xcbitcXHR9XFxuK1xcdHNrX3NrYl9yZWFzb25fZHJvcCh1ZHBfc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9SQ1ZCVUZGKTtcXG4rfVxcbitcXG4gLypcXG4gICogaGFuZGxlIGRhdGEgcmVjZWl2ZWQgb24gdGhlIGxvY2FsIGVuZHBvaW50XFxuICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dFxcbkBAIC0yOCw2ICs2NCw4IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcnhfcXVldWU7XFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqaW9fdGhyZWFkO1xcbitcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XFxuK1xcdHVuc2lnbmVkIGludCByY3ZidWY7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIWxvY2FsKSkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5AQCAtNDEsOCArNzksNiBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmIChza2ItXFx1MDAzZXRzdGFtcCA9PSAwKVxcbiBcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XFxuIFxcbi1cXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuLVxcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuIFxcdHJ4X3F1ZXVlID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZTtcXG4gI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gXFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxcbkBAIC01Miw2ICs4OCwyNCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gI2VuZGlmXFxuIFxcbitcXHRyY3ZidWYgPSBSRUFEX09OQ0UodWRwX3NrLVxcdTAwM2Vza19yY3ZidWYpO1xcbitcXHRoZWFkcm9vbSA9IFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4rXFx0aWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgK1xcbitcXHQgICAgc2tiLVxcdTAwM2V0cnVlc2l6ZSArIGhlYWRyb29tIFxcdTAwM2U9IHJjdmJ1ZiB8fFxcbitcXHQgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1ZHBfc2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxuK1xcdFxcdHJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNrYi1cXHUwMDNlZGV2ID0gTlVMTDtcXG4rXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcXG4rXFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuK1xcbitcXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuK1xcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuIFxcdHNrYl9xdWV1ZV90YWlsKHJ4X3F1ZXVlLCBza2IpO1xcbiBcXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ3MSw2ICs1MjUsOSBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdFxcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xcbiBcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnJ4X3F1ZXVlKSkpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbWFyayA9PSBSWFJQQ19TS0JfTUFSS19QQUNLRVQpXFxuK1xcdFxcdFxcdFxcdHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYik7XFxuIFxcdFxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2VtYXJrKSB7XFxuIFxcdFxcdFxcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxcbiBcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXFxuaW5kZXggMTY5ZjlkZmRhYTc3Zi4uMmY5Mzg5MWU4NDFhYiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcXG4rKysgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mID0gezB9O1xcbiBcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcXG4gXFx0c3RydWN0IHNvY2sgKnVzaztcXG4rXFx0dTMyIHJjdmJ1ZjtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwiJXB7JWQsJWR9XFxcIixcXG5AQCAtMTk4LDYgKzE5OSwxMiBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcXG4gXFxuIFxcdC8qIHNldCB0aGUgc29ja2V0IHVwICovXFxuIFxcdHVzayA9IGxvY2FsLVxcdTAwM2Vzb2NrZXQtXFx1MDAzZXNrO1xcbitcXHQvKiBPbmUgYWR2ZXJ0aXNlZCBvcmRpbmFyeS1EQVRBIHdpbmRvdywgbm90IGp1bWJvLW1heC4gKi9cXG4rXFx0cmN2YnVmID0gcnhycGNfcnhfd2luZG93X3NpemUgKiBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcXG4rXFx0cmN2YnVmICs9IHJjdmJ1ZiAvIDQ7XFxuK1xcdHJjdmJ1ZiA9IGNsYW1wKHJjdmJ1ZiwgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX2RlZmF1bHQpLFxcbitcXHRcXHQgICAgICAgUkVBRF9PTkNFKHN5c2N0bF9ybWVtX21heCkpO1xcbitcXHRXUklURV9PTkNFKHVzay1cXHUwMDNlc2tfcmN2YnVmLCByY3ZidWYpO1xcbiBcXHR1c2stXFx1MDAzZXNrX2Vycm9yX3JlcG9ydCA9IHJ4cnBjX2Vycm9yX3JlcG9ydDtcXG4gXFxuIFxcdHN3aXRjaCAoc3J4LVxcdTAwM2V0cmFuc3BvcnQuZmFtaWx5KSB7XFxuQEAgLTQzNyw4ICs0NDQsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0aWYgKHNvY2tldCkge1xcbiBcXHRcXHRsb2NhbC1cXHUwMDNlc29ja2V0ID0gTlVMTDtcXG4gXFx0XFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xcbi1cXHRcXHRzb2NrZXQtXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xcbi1cXHRcXHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVxcdTAwM2VzaywgTlVMTCk7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcXG5AQCAtNDQ4LDYgKzQ1NSwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuICNlbmRpZlxcbiBcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFxuK1xcdGlmIChzb2NrZXQpXFxuK1xcdFxcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xcbitcXG4gXFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcXG4gXFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfYWxsb2MpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjI5OjM0LjA4MzY5MDM1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY5NTE5Mjk4MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJBRl9SWFJQQ19JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfZW5jYXBfcmN2XCIsXG4gICAgXCJyeHJwY19pb190aHJlYWRcIixcbiAgICBcInJ4cnBjX3NrYl9vcnBoYW5fdWRwXCIsXG4gICAgXCJyeHJwY19kZXN0cm95X2xvY2FsXCIsXG4gICAgXCJyeHJwY19vcGVuX3NvY2tldFwiLFxuICAgIFwicnhycGNfbG9va3VwX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gcGFja2V0IHJlY2VwdGlvbiBhbmQgbG9jYWwgdHJhbnNwb3J0IGVuZHBvaW50IG1hbmFnZW1lbnQuIEl0IGltcGxlbWVudHMgcm1lbSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIGZvciByZWNlaXZlZCBlbmNhcHN1bGF0aW9uIHNrYnMgaW4gcnhycGNfZW5jYXBfcmN2LCBza2Igb3JwaGFuaW5nIHVuZGVyIHNrX3JlY2VpdmVfcXVldWUubG9jayBpbiByeHJwY19pb190aHJlYWQsIHNldHMgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGxpbWl0cyBpbiByeHJwY19vcGVuX3NvY2tldCwgYW5kIGFsdGVycyBzb2NrZXQgcmVsZWFzZSBvcmRlcmluZyBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBpbiByeHJwY19kZXN0cm95X2xvY2FsLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBuZXR3b3JraW5nIGZhc3QtcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBzb2NrZXQgYWNjb3VudGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEyMGNhYzRjMGYwNjUzMzk2M2JhZjExNTViYjMxNmM5ZjAyOWZiZjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxNToyOTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9pb190aHJlYWQuYyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuaW5kZXggZGM1MTg0YTJmYTlkMS4uYzc3MjQxYjEyZjU5NyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuY1xuKysrIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG5AQCAtNywxMiArNyw0OCBAQFxuIFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuIFxuKyNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4gc3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqcGVlcl9zcngsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbisvKlxuKyAqIERyb3AgVURQIHJtZW0gb3duZXJzaGlwIGZvciBwYWNrZXRzIGNoYXJnZWQgaW4gZW5jYXBfcmN2KCkuXG4rICogc2tfZm9yd2FyZF9hbGxvYyBpcyBzZXJpYWxpc2VkIGJ5IHNrX3JlY2VpdmVfcXVldWUubG9jay5cbisgKi9cbitzdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cdTAwM2VzaztcbitcbitcdGlmICghc2spXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0c2tiX29ycGhhbihza2IpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnhycGNfZW5jYXBfcmN2X2Ryb3Aoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldCh1ZHBfc2spO1xuK1xuK1x0c2tfZHJvcHNfaW5jKHVkcF9zayk7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4rXHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XG4rXHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lORVJST1JTKTtcbitcdH0gZWxzZVxuKyNlbmRpZlxuK1x0e1xuK1x0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX1JDVkJVRkVSUk9SUyk7XG4rXHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xuK1x0fVxuK1x0c2tfc2tiX3JlYXNvbl9kcm9wKHVkcF9zaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX1JDVkJVRkYpO1xuK31cbitcbiAvKlxuICAqIGhhbmRsZSBkYXRhIHJlY2VpdmVkIG9uIHRoZSBsb2NhbCBlbmRwb2ludFxuICAqIC0gbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dFxuQEAgLTI4LDYgKzY0LDggQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcnhfcXVldWU7XG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YSh1ZHBfc2spO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZHJvb207XG4rXHR1bnNpZ25lZCBpbnQgcmN2YnVmO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFsb2NhbCkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtNDEsOCArNzksNiBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXRzdGFtcCA9PSAwKVxuIFx0XHRza2ItXHUwMDNldHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcbiBcbi1cdHNrYi1cdTAwM2VtYXJrID0gUlhSUENfU0tCX01BUktfUEFDS0VUO1xuLVx0cnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTtcbiBcdHJ4X3F1ZXVlID0gXHUwMDI2bG9jYWwtXHUwMDNlcnhfcXVldWU7XG4gI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbiBcdGlmIChyeHJwY19pbmplY3RfcnhfZGVsYXkgfHxcbkBAIC01Miw2ICs4OCwyNCBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gI2VuZGlmXG4gXG4rXHRyY3ZidWYgPSBSRUFEX09OQ0UodWRwX3NrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXHRoZWFkcm9vbSA9IFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0aWYgKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoXHUwMDI2dWRwX3NrLVx1MDAzZXNrX3JtZW1fYWxsb2MpICtcbitcdCAgICBza2ItXHUwMDNldHJ1ZXNpemUgKyBoZWFkcm9vbSBcdTAwM2U9IHJjdmJ1ZiB8fFxuK1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXHUwMDNldHJ1ZXNpemUpKSB7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0XHRyeHJwY19lbmNhcF9yY3ZfZHJvcCh1ZHBfc2ssIHNrYik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dWRwX3NrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rXHRza2JfZHN0X2Ryb3Aoc2tiKTtcbitcbitcdHNrYi1cdTAwM2VtYXJrID0gUlhSUENfU0tCX01BUktfUEFDS0VUO1xuK1x0cnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTtcbiBcdHNrYl9xdWV1ZV90YWlsKHJ4X3F1ZXVlLCBza2IpO1xuIFx0d2FrZV91cF9wcm9jZXNzKGlvX3RocmVhZCk7XG4gXHRyZXR1cm4gMDtcbkBAIC00NzEsNiArNTI1LDkgQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0XHQvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi9cbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnJ4X3F1ZXVlKSkpIHtcbiBcdFx0XHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XG4rXG4rXHRcdFx0aWYgKHNrYi1cdTAwM2VtYXJrID09IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVClcbitcdFx0XHRcdHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYik7XG4gXHRcdFx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuIFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxuIFx0XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjJmOTM4OTFlODQxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbiBcdHN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmYgPSB7MH07XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcbiBcdHN0cnVjdCBzb2NrICp1c2s7XG4rXHR1MzIgcmN2YnVmO1xuIFx0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcIiVweyVkLCVkfVwiLFxuQEAgLTE5OCw2ICsxOTksMTIgQEAgc3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHQvKiBzZXQgdGhlIHNvY2tldCB1cCAqL1xuIFx0dXNrID0gbG9jYWwtXHUwMDNlc29ja2V0LVx1MDAzZXNrO1xuK1x0LyogT25lIGFkdmVydGlzZWQgb3JkaW5hcnktREFUQSB3aW5kb3csIG5vdCBqdW1iby1tYXguICovXG4rXHRyY3ZidWYgPSByeHJwY19yeF93aW5kb3dfc2l6ZSAqIFNLQl9UUlVFU0laRShSWFJQQ19KVU1CTygxKSkgKiAyO1xuK1x0cmN2YnVmICs9IHJjdmJ1ZiAvIDQ7XG4rXHRyY3ZidWYgPSBjbGFtcChyY3ZidWYsIFJFQURfT05DRShzeXNjdGxfcm1lbV9kZWZhdWx0KSxcbitcdFx0ICAgICAgIFJFQURfT05DRShzeXNjdGxfcm1lbV9tYXgpKTtcbitcdFdSSVRFX09OQ0UodXNrLVx1MDAzZXNrX3JjdmJ1ZiwgcmN2YnVmKTtcbiBcdHVzay1cdTAwM2Vza19lcnJvcl9yZXBvcnQgPSByeHJwY19lcnJvcl9yZXBvcnQ7XG4gXG4gXHRzd2l0Y2ggKHNyeC1cdTAwM2V0cmFuc3BvcnQuZmFtaWx5KSB7XG5AQCAtNDM3LDggKzQ0NCw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0aWYgKHNvY2tldCkge1xuIFx0XHRsb2NhbC1cdTAwM2Vzb2NrZXQgPSBOVUxMO1xuIFx0XHRrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7XG4tXHRcdHNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuLVx0XHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcbitcdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiArNDU1LDEwIEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xuICNlbmRpZlxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfcXVldWUpO1xuK1xuK1x0aWYgKHNvY2tldClcbitcdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXG4gXHRyeHJwY19wdXJnZV9jbGllbnRfY29ubmVjdGlvbnMobG9jYWwpO1xuIFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFx1MDAyNmxvY2FsLVx1MDAzZXR4X2FsbG9jKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNToyOTozNC4wODM2OTIzMTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NjM3OTk3NTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFJYUlBDIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIExvb2tzIGxpa2Ugd2UgaGF2ZSBzb21lIG5ldyBmdW5jdGlvbnM6IGByeHJwY19za2Jfb3JwaGFuX3VkcChza2IpYCBhbmQgYHJ4cnBjX2VuY2FwX3Jjdl9kcm9wYC4gSW50ZXJlc3RpbmcuIEFsc28sIGByeHJwY19lbmNhcF9yY3ZgIGlzIG5vdyBkb2luZyBzb21lIGNoZWNrcyByZWxhdGVkIHRvIFVEUCByZWNlaXZlIGJ1ZmZlciBhbmQgYHNrX3JtZW1fc2NoZWR1bGVgLCBhbmQgY3J1Y2lhbGx5LCBpdCdzIHVzaW5nIGBza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spYC4gTm93LCBJIHNlZSB0aGF0IGluIGByeHJwY19pb190aHJlYWRgLCB3aGVuIGFuIFNLQiBtYXJrZWQgYXMgYFJYUlBDX1NLQl9NQVJLX1BBQ0tFVGAgaXMgZGVxdWV1ZWQsIGl0IGNhbGxzIHRoYXQgYHJ4cnBjX3NrYl9vcnBoYW5fdWRwKHNrYilgIGZ1bmN0aW9uLiBBbHNvLCBgcnhycGNfb3Blbl9zb2NrZXRgIGlzIHNldHRpbmcgYHVzay1cdTAwM2Vza19yY3ZidWZgLiBGaW5hbGx5LCBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAsIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGNhcmVmdWwgaGFuZGxpbmcgb2YgYHNrX3VzZXJfZGF0YWAgdXNpbmcgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBhbmQgYHN5bmNocm9uaXplX3JjdWAgYmVmb3JlIGNhbGxpbmcgYHNvY2tfcmVsZWFzZWAgKmFmdGVyKiBgcnhycGNfcHVyZ2VfcXVldWVgLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhpcyB0aHJvdWdoIHRoZSBsZW5zIG9mIG15IHRyaWFnZSBydWxlcy4gQmFzZWQgb24gdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHksIGFjY2Vzc2liaWxpdHkgaXMga2V5LCBhbmQgYEFGX1JYUlBDYCBpcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0IGZhbWlseS4gVGhlcmVmb3JlLCBpdCdzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWV0aG9kcy4gU28sIGl0J3MgZGVmaW5pdGVseSBpbiBzY29wZS4gVGhpcyBwYXRjaCB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtczogaXQgbW9kaWZpZXMgYEFGX1JYUlBDYCwgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBxdWV1aW5nLCB0aGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgYWxzbyBgc2tfdXNlcl9kYXRhYC4gVGhpcyBtYWtlcyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgaXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyByZWxhdGVkIHRvIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgLCBgc2tfcm1lbV9hbGxvY2AsIGFuZCBgc2tiX29ycGhhbmAsIGFuZCBsaWZlY3ljbGUgb2YgdGhlIGxvY2FsIHNvY2tldCBvYmplY3RzLiBEZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IEtjb25maWcgb3B0aW9ucyBzZXQuIFRpbWUgdG8gcnVuIGEgcXVpY2sgYGdyZXBwZXJgIGNoZWNrIG9uIGBBRl9SWFJQQ2AgaW4gYEtjb25maWdgIHRvIHNlZSB3aGF0IGRlcGVuZHMgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToxMC40NjM2NzA5NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MzEwNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRl9SWFJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL0tjb25maWctNS1cXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xcbm5ldC9yeHJwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlJ4UlBDIHNlc3Npb24gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTI1PWlmIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctMjYtXFxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG5uZXQvcnhycGMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzMtXFxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXFxubmV0L3J4cnBjL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxcbm5ldC9yeHJwYy9LY29uZmlnOjQwOmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNDktXFxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXFxubmV0L3J4cnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToxMS4wNDE5OTA4NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDE4NDA0OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgbmV0L3J4cnBjKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUnhSUEMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGBuZXQvcnhycGMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbml0aWFsIGRlZmluaXRpb25zLCBzcGVjaWZpY2FsbHkgbGluZXMgMSB0aHJvdWdoLCBzYXksIDI1LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBmZWF0dXJlcyBhbmQgaG93IHRoZXkncmUgZXhwb3NlZCB2aWEgdGhlIGJ1aWxkIHN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgYGNvbmZpZ2Agc3RhdGVtZW50cyB0aGF0IGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgcHJvdG9jb2wgaXRzZWxmLCBwZXJoYXBzIHNvbWUgaW5pdGlhbCBmZWF0dXJlIGZsYWdzIGxpa2Ugc2VjdXJpdHkgb3B0aW9ucywgYW5kIG1heWJlIGEgZmV3IG90aGVyIGJhc2ljIHNldHRpbmdzLiBLbm93aW5nIHRoZSBlbnRyeSBwb2ludCBpcyBrZXksIHNvIEknbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGRlY2xhcmVkIGVhcmx5IG9uLiBPbmNlIEkgaGF2ZSB0aGUgYmFzaWMgb3B0aW9ucyBmaWd1cmVkIG91dCwgSSBjYW4gdW5kZXJzdGFuZCB3aGF0IG1vZHVsZXMgYW5kIHN1Yi1mZWF0dXJlcyBiZWNvbWUgYXZhaWxhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToxNy40NjAzOTg5NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSeFJQQyBzZXNzaW9uIHNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFGX1JYUlBDXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcXG4gIDExOlxcdFxcdHNlbGVjdCBLRVlTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XFxuICAxNTpcXHRcXHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXFxuICAxNjpcXHRcXHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBUaGVzZSBhcmUgdXNlZCBmb3IgQUZTIGtlcm5lbCBmaWxlc3lzdGVtIGFuZCB1c2Vyc3BhY2UgdXRpbGl0aWVzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoaXMgbW9kdWxlIGF0IHRoZSBtb21lbnQgb25seSBzdXBwb3J0cyBjbGllbnQgb3BlcmF0aW9ucyBhbmQgaXNcXG4gIDIxOlxcdFxcdCAgY3VycmVudGx5IGluY29tcGxldGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICAyNDpcXHRcXG4gIDI1OlxcdGlmIEFGX1JYUlBDXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBBRl9SWFJQQ19JUFY2XFxuICAyODpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgQUZfUlhSUEMgdG8gdXNlIElQVjYgVURQIGFzIHdlbGwgYXMgSVBWNCBVRFAgYXNcXG4gIDMyOlxcdFxcdCAgaXRzIG5ldHdvcmsgdHJhbnNwb3J0LlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkluamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjMxOjE3LjQ2MDQ3MDEwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyMTEzODM0MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIFByb3RvY29sIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkaWZmLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkludGVyZXN0aW5nLCB3ZSd2ZSBnb3QgSVB2NiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlIHJlbGF0ZWQgdG8gVURQIHN0YXRzLlwiIFNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcbiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG5cdFx0X19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfUkNWQlVGRVJST1JTKTtcblx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XG5cdH0gZWxzZVxuI2VuZGlmXG5gYGBcblxuTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIG1ha2luZyBhc3NvY2lhdGlvbnMuIEkgc2VlIHRoZSBJUHY2IGNoZWNrLCBhbmQgdGhlbiBJJ20gcmVtaW5kZWQgdGhhdCBgQUZfUlhSUENfSVBWNmAgaXMgYWxzbyBhIHRoaW5nLiBUaGF0IHJhaXNlcyBhIHF1ZXN0aW9uLCBhbmQgaXQncyBhIGNyaXRpY2FsIG9uZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblNvLCBJIG5lZWQgdG8ga25vdyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBgQUZfUlhSUENgIGZhbWlseSBhbmQgSVB2Ni4gQXJlIHRoZXkgaW5kZXBlbmRlbnQ/IElzIGBBRl9SWFJQQ19JUFY2YCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGJ1aWx0IG9uIHRvcCBvZiBgQUZfUlhSUENgLCBvciBhcmUgdGhleSBvcnRob2dvbmFsPyBPciBpcyBgQUZfUlhSUENfSVBWNmAgYWx3YXlzIGVuYWJsZWQgd2hlbiBJUHY2IGlzIGVuYWJsZWQ/IEFyZSB0aGV5IGxpa2UgYElORVRgIGFuZCBgSVBWNmAgaW4gc29tZSByZXNwZWN0cz8gSSdtIGJldHRpbmcgdGhhdCB0aGUgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGJ5IGBtYWtlYCBpbmZyYXN0cnVjdHVyZS5cblxuVG8gdmVyaWZ5IHRoaXMsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvbXBpbGF0aW9uIHJ1bGVzLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBvdmVyIHRvIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGJlLCB0byBmaW5kIG91dCBleGFjdGx5IHdoYXQgZ2V0cyBjb21waWxlZCBhbmQgbGlua2VkIHdoZW4gYEFGX1JYUlBDYCBpcyBlbmFibGVkLCBhbmQgaG93IElQdjYgaW50ZWdyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGF0IGNvbnRleHQuIFRoYXQgZmlsZSB3aWxsIHRlbGwgdGhlIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzE6MjkuNTc0MzA2ODg5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgTGludXgga2VybmVsIFJ4UlBDXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19BRl9SWFJQQykgKz0gcnhycGMub1xcbiAgIDc6XFx0XFxuICAgODpcXHRyeHJwYy15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFmX3J4cnBjLm8gXFxcXFxcbiAgMTA6XFx0XFx0Y2FsbF9hY2NlcHQubyBcXFxcXFxuICAxMTpcXHRcXHRjYWxsX2V2ZW50Lm8gXFxcXFxcbiAgMTI6XFx0XFx0Y2FsbF9vYmplY3QubyBcXFxcXFxuICAxMzpcXHRcXHRjYWxsX3N0YXRlLm8gXFxcXFxcbiAgMTQ6XFx0XFx0Y29ubl9jbGllbnQubyBcXFxcXFxuICAxNTpcXHRcXHRjb25uX2V2ZW50Lm8gXFxcXFxcbiAgMTY6XFx0XFx0Y29ubl9vYmplY3QubyBcXFxcXFxuICAxNzpcXHRcXHRjb25uX3NlcnZpY2UubyBcXFxcXFxuICAxODpcXHRcXHRpbnB1dC5vIFxcXFxcXG4gIDE5OlxcdFxcdGlucHV0X3JhY2subyBcXFxcXFxuICAyMDpcXHRcXHRpbnNlY3VyZS5vIFxcXFxcXG4gIDIxOlxcdFxcdGlvX3RocmVhZC5vIFxcXFxcXG4gIDIyOlxcdFxcdGtleS5vIFxcXFxcXG4gIDIzOlxcdFxcdGxvY2FsX2V2ZW50Lm8gXFxcXFxcbiAgMjQ6XFx0XFx0bG9jYWxfb2JqZWN0Lm8gXFxcXFxcbiAgMjU6XFx0XFx0bWlzYy5vIFxcXFxcXG4gIDI2OlxcdFxcdG5ldF9ucy5vIFxcXFxcXG4gIDI3OlxcdFxcdG9vYi5vIFxcXFxcXG4gIDI4OlxcdFxcdG91dHB1dC5vIFxcXFxcXG4gIDI5OlxcdFxcdHBlZXJfZXZlbnQubyBcXFxcXFxuICAzMDpcXHRcXHRwZWVyX29iamVjdC5vIFxcXFxcXG4gIDMxOlxcdFxcdHJlY3Ztc2cubyBcXFxcXFxuICAzMjpcXHRcXHRydHQubyBcXFxcXFxuICAzMzpcXHRcXHRzZWN1cml0eS5vIFxcXFxcXG4gIDM0OlxcdFxcdHNlbmRtc2cubyBcXFxcXFxuICAzNTpcXHRcXHRzZXJ2ZXJfa2V5Lm8gXFxcXFxcbiAgMzY6XFx0XFx0c2tidWZmLm8gXFxcXFxcbiAgMzc6XFx0XFx0dHhidWYubyBcXFxcXFxuICAzODpcXHRcXHR1dGlscy5vXFxuICAzOTpcXHRcXG4gIDQwOlxcdHJ4cnBjLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMToyOS41NzQzNzY2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDg4Nzc3MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSWFJQQyBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSXQncyBjbGVhciB0aGF0IGJvdGggYGlvX3RocmVhZC5vYCBhbmQgYGxvY2FsX29iamVjdC5vYCBhcmUgZXNzZW50aWFsIGNvbXBvbmVudHMgb2YgYHJ4cnBjLXlgIHdoZW4gYENPTkZJR19BRl9SWFJQQ2AgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIEFuZCwgYXMgZXhwZWN0ZWQsIHdlIGFsc28gcmVxdWlyZSBgQ09ORklHX0lORVRgIHRvIGJlIGVuYWJsZWQgaWYgYENPTkZJR19BRl9SWFJQQ2AgaXMgc2V0LiBJZiB3ZSB3YW50IElQdjYgc3VwcG9ydCwgd2UnbGwgbmVlZCBib3RoIGBDT05GSUdfSVBWNmAgYW5kIGBDT05GSUdfQUZfUlhSUENfSVBWNmAuIFN0YW5kYXJkIHN0dWZmIHNvIGZhci5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgc3BlY2lmaWMgc3ltYm9scyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSBzZWUgdGhlc2Uga2V5IGNoYW5nZXM6XG5cbjEuICBgcnhycGNfZW5jYXBfcmN2YCBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYC4gTG9va3MgbGlrZSB0aGV5J3JlIGVuZm9yY2luZyBtb3JlIHJvYnVzdCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGggYHJtZW1gIGNoZWNrcyDigJMgdXNpbmcgYHNrX3JtZW1fYWxsb2NgLCBgc2tiX3NldF9vd25lcl9yYCwgYW5kIGBza19ybWVtX3NjaGVkdWxlYC4gU21hcnQgbW92ZTsgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0d29ya2luZyBpcyBhbHdheXMgY3JpdGljYWwuIEFuZCwgaXQgbm93IGNhbGxzIGByeHJwY19lbmNhcF9yY3ZfZHJvcGAuIEknbGwgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuXG5cbjIuICBgcnhycGNfc2tiX29ycGhhbl91ZHBgIGlzIHN0YXRpYyB3aXRoaW4gYGlvX3RocmVhZC5jYC4gSXQncyBjYWxsZWQgZnJvbSBgcnhycGNfaW9fdGhyZWFkYCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBpbmxpbmVkIG9yIG5vdC4gV2UnbGwgY2hlY2sgdGhlIGNvbXBpbGVyIG91dHB1dC5cblxuMy4gIGByeHJwY19pb190aHJlYWRgIGluIGBpb190aHJlYWQuY2AuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBiaXQuIEl0IGNhbGxzIGByeHJwY19za2Jfb3JwaGFuX3VkcGAgc3BlY2lmaWNhbGx5IHdoZW4gYHNrYi1cdTAwM2VtYXJrYCBpcyBlcXVhbCB0byBgUlhSUENfU0tCX01BUktfUEFDS0VUYCwgSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuXG5cbjQuICBgcnhycGNfb3Blbl9zb2NrZXRgIGlzIHN0YXRpYyBpbiBgbG9jYWxfb2JqZWN0LmNgLiAgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgYmVpbmcgY2FsbGVkIG9ubHkgYnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGlmIGF0IGFsbC5cblxuNS4gIEZpbmFsbHksIGByeHJwY19kZXN0cm95X2xvY2FsYCwgYWxzbyBpbiBgbG9jYWxfb2JqZWN0LmNgLCBpcyBleHBvcnRlZCwgc28gaXQncyBhIHB1YmxpYyBzeW1ib2w6IGB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClgLlxuXG5BbHJpZ2h0LCBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbG9jYWxfb2JqZWN0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGByeHJwY19vcGVuX3NvY2tldGAgYW5kIGByeHJwY19kZXN0cm95X2xvY2FsYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzaWduaWZpY2FudCBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzE6NTcuNjYzMTU2ODY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM2OTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19vcGVuX3NvY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTEwOT1zdGF0aWMgc3RydWN0IHJ4cnBjX2xvY2FsICpyeHJwY19hbGxvY19sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTYxLSAqL1xcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzoxNjI6c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE2My17XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MjU0PXN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfbG9va3VwX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0yOTktXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjMwMDpcXHRyZXQgPSByeHJwY19vcGVuX3NvY2tldChsb2NhbCwgbmV0KTtcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMzAxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTozMTo1Ny43MTQ1MzI0MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTQ1ODc3MDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQ2hlY2tpbmcgSW50ZXJuYWwgRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVjbGFyYXRpb25zIGZvciBgcnhycGNfbG9va3VwX2xvY2FsYCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLiBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgYXItaW50ZXJuYWwuaGAuIEkndmUgZ290IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW50ZXJuYWxseS4gVGhpcyBpcyB0aGUgY29ybmVyc3RvbmUgb2YgdW5kZXJzdGFuZGluZyB0aGUgbG93LWxldmVsIGJlaGF2aW9yIEkgbmVlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBwcmVjaXNlIHNpZ25hdHVyZXMsIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGV5IG9wZXJhdGUgb24sIGFuZCBhbnkgY29tbWVudHMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoZWlyIGludGVuZGVkIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBjYXZlYXRzLiBBY2N1cmFjeSBoZXJlIGlzIHBhcmFtb3VudCwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgdGhlIG9ubHkgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MDcuMTczMzA1MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODg4NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4cnBjXyhkZXN0cm95fGxvb2t1cClfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hZl9yeHJwYy5jPTEzMT1zdGF0aWMgaW50IHJ4cnBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNhZGRyLCBpbnQgbGVuKVxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMTUwLVxcdFxcdHJ4LVxcdTAwM2VzcnggPSAqc3J4O1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjE1MTpcXHRcXHRsb2NhbCA9IHJ4cnBjX2xvb2t1cF9sb2NhbChzb2NrX25ldChcXHUwMDI2cngtXFx1MDAzZXNrKSwgXFx1MDAyNnJ4LVxcdTAwM2VzcngpO1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTE1Mi1cXHRcXHRpZiAoSVNfRVJSKGxvY2FsKSkge1xcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM9NTM4PXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtNTc4LVxcdFxcdH1cXG5uZXQvcnhycGMvYWZfcnhycGMuYzo1Nzk6XFx0XFx0bG9jYWwgPSByeHJwY19sb29rdXBfbG9jYWwoc29ja19uZXQoc29jay1cXHUwMDNlc2spLCBcXHUwMDI2cngtXFx1MDAzZXNyeCk7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtNTgwLVxcdFxcdGlmIChJU19FUlIobG9jYWwpKSB7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMzI1PXZvaWQgcnhycGNfbG9jYWxfZG9udF9mcmFnbWVudChjb25zdCBzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBib29sIHNldCk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTMyNjpzdHJ1Y3QgcnhycGNfbG9jYWwgKnJ4cnBjX2xvb2t1cF9sb2NhbChzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMzI3LXN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfZ2V0X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqLCBlbnVtIHJ4cnBjX2xvY2FsX3RyYWNlKTtcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEzMzE9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKiwgZW51bSByeHJwY19sb2NhbF90cmFjZSk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTMzMjp2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCk7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTMzMy12b2lkIHJ4cnBjX2Rlc3Ryb3lfYWxsX2xvY2FscyhzdHJ1Y3QgcnhycGNfbmV0ICopO1xcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTQ4ND1pbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjM1LVxcdHJ4cnBjX3NlZV9sb2NhbChsb2NhbCwgcnhycGNfbG9jYWxfc3RvcCk7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjYzNjpcXHRyeHJwY19kZXN0cm95X2xvY2FsKGxvY2FsKTtcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjM3LVxcdFdSSVRFX09OQ0UobG9jYWwtXFx1MDAzZWlvX3RocmVhZCwgTlVMTCk7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTI1My0gKi9cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MjU0OnN0cnVjdCByeHJwY19sb2NhbCAqcnhycGNfbG9va3VwX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMjU1LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfcnhycGMgKnNyeClcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00MDU9dm9pZCByeHJwY191bnVzZV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBlbnVtIHJ4cnBjX2xvY2FsX3RyYWNlIHdoeSlcXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy00MjYtICovXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQyNzp2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MDcuMjI2MjAyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM4NjcwNDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcnhycGNfZW5jYXBfcmN2YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGByeHJwY19lbmNhcF9yY3ZgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIOKAkyB3aGF0IGlucHV0cyBpdCBleHBlY3RzLCB3aGF0IGl0J3MgcmV0dXJuaW5nLCBhbGwgdGhlIHVzdWFsIGRldGFpbHMuIFRoZW4sIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBsb2NhdGUgZXZlcnkgcGxhY2UgaW4gdGhlIGNvZGUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyAqY2FsbGVkKi4gS25vd2luZyB0aGUgY2FsbHNpdGVzIGdpdmVzIG1lIGNydWNpYWwgY29udGV4dDsgaXQgdGVsbHMgbWUgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGFuZCB3aGF0IGRhdGEgaXQncyBsaWtlbHkgb3BlcmF0aW5nIG9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgYWxsIHRoZSBjYWxsZXJzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gcGllY2UgdG9nZXRoZXIgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MTQuNjEyOTEwNTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTg2NjM0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19lbmNhcF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEyNjg9c3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX3RscF9pbml0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTI3Ny0gKi9cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMjc4OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTI3OS12b2lkIHJ4cnBjX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqKTtcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYz0yMj1zdGF0aWMgdm9pZCByeHJwY19za2Jfb3JwaGFuX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTMzLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYzozNDpzdGF0aWMgdm9pZCByeHJwY19lbmNhcF9yY3ZfZHJvcChzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0zNS17XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjEtICovXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjYyOmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtNjMte1xcbi0tXFxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTk3LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1ZHBfc2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XFxubmV0L3J4cnBjL2lvX3RocmVhZC5jOjk4OlxcdFxcdHJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHVkcF9zaywgc2tiKTtcXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtOTktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NC1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk1OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5Ni1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjMyOjE1LjI1ODgxMDY3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjY1NTk0NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJ4UlBDIFVEUCBFbmNhcHN1bGF0aW9uIGFuZCBTb2NrZXQgQnVmZmVyIE1hbmFnZW1lbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgUnhSUEMgVURQIGVuY2Fwc3VsYXRpb24gY2hhbmdlLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkIGFuZCB3aHksIGdpdmVuIHRoZSBzY29wZS5cblxuRmlyc3QsIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBSeFJQQyBVRFAgZW5jYXBzdWxhdGlvbiBjYWxsYmFjaywgYHJ4cnBjX2VuY2FwX3JjdmAuIFRoaXMgZnVuY3Rpb24sIGFzIGEgbm9uLXN0YXRpYyBlbnRyeXBvaW50LCBpcyBmdW5kYW1lbnRhbC4gSXQncyB0aGUgcmVjZWl2ZXIgb2YgdGhlIFVEUCBwYWNrZXRzLiBJIHNlZSB0aGF0IGl0J3MgdGhlIG9uZSB0aGF0IG5vdyBuZWVkcyBjYXJlZnVsIGFjY291bnRpbmcgb2Ygc29ja2V0IGJ1ZmZlciB1c2FnZSwgY2hlY2tpbmcgYHVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jYCBhZ2FpbnN0IGBza19yY3ZidWZgLCBzZXR0aW5nIG93bmVyc2hpcCB1c2luZyBgc2tiX3NldF9vd25lcl9yYCB3aXRoaW4gYSBsb2NrLCBhbmQgZHJvcHBpbmcgcGFja2V0cyB3aGVuIG92ZXIgdGhlIGxpbWl0LiBUaGlzIGlzIGEgdmVyeSBpbnRlcmVzdGluZyBwaWVjZSBvZiBsb2dpYyB0aGF0IHRvdWNoZXMgdGhlIGNyaXRpY2FsIHJlY2VpdmUgcGF0aC5cblxuVGhlbiwgdGhlcmUgaXMgYHJ4cnBjX2lvX3RocmVhZGAsIHRoZSBrZXJuZWwgdGhyZWFkIGhhbmRsaW5nIEkvTyBmb3IgdGhlIFJ4UlBDIGxvY2FsIGVuZHBvaW50LiBgcnhycGNfc2tiX29ycGhhbl91ZHAoKWAgaXMgYWxzbyB1c2VkIGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24ncyByb2xlIGluIHRoZSBsaWZlY3ljbGUgaXMgY3J1Y2lhbCwgc2luY2UgaXQgaGFuZGxlcyBkcm9wcGluZyBzb2NrZXQgb3duZXJzaGlwLlxuXG5gcnhycGNfZGVzdHJveV9sb2NhbGAgaXMgZXNzZW50aWFsLiBJdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdGVhcmluZyBkb3duIHRoZSBSeFJQQyBsb2NhbCBlbmRwb2ludCBhbmQgY2xvc2luZyB0aGUgc29ja2V0LiBJJ3ZlIG5vdGVkIHRoYXQgaXQncyBub24tc3RhdGljLCBzbywgaXQncyBhIGtleSBBUEkgZW50cnlwb2ludC4gVGhlIGNoYW5nZSBpbmNsdWRlcyBzb2NrZXQgdGVhcmRvd24gYW5kIFJDVSBoYW5kbGluZyBtb2RpZmljYXRpb25zLlxuXG5UaGUgYHJ4cnBjX2xvb2t1cF9sb2NhbGAgKG9yIGByeHJwY19vcGVuX3NvY2tldGApIGlzIHVzZWQgdG8gb3BlbiB0aGUgVURQIHR1bm5lbCBzb2NrZXQgYW5kIGluaXRpYWxpemUgaXQuIEl0cyBtb2RpZmljYXRpb25zIHRvIHNvY2tldCBidWZmZXIgc2l6aW5nIGFyZSBhbHNvIG9mIGludGVyZXN0LlxuXG5UaGUgc3RhdGljIGZ1bmN0aW9ucyBgcnhycGNfc2tiX29ycGhhbl91ZHBgLCBhbmQgYHJ4cnBjX29wZW5fc29ja2V0YCBhbmQgYHJ4cnBjX2VuY2FwX3Jjdl9kcm9wYCBhbHNvIG5lZWQgdG8gYmUgaW5jbHVkZWQgc2luY2UgdGhleSBhcmUgcG90ZW50aWFsbHkgcmVsZXZhbnQuXG5cbkJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudDpcbi0gYHJ4cnBjX2VuY2FwX3JjdmBcbi0gYHJ4cnBjX2lvX3RocmVhZGBcbi0gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgXG4tIGByeHJwY19vcGVuX3NvY2tldGBcbi0gYHJ4cnBjX3NrYl9vcnBoYW5fdWRwYFxuLSBgcnhycGNfbG9va3VwX2xvY2FsYFxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9ucy4gSSdtIHNlZWluZyBgQUZfUlhSUENgLCBgSU5FVGAsIGBBRl9SWFJQQ19JUFY2YCwgYW5kIGBJUFY2YC4gVGhpcyBtYWtlcyBzZW5zZS4gYEFGX1JYUlBDYCBzZWVtcyB0byBiZSB0aGUgY29yZSwgcmVxdWlyaW5nIGBJTkVUYCwgYW5kIGBBRl9SWFJQQ19JUFY2YCBkZXBlbmRzIG9uIGJvdGggYEFGX1JYUlBDYCBhbmQgYElQVjZgLlxuXG5TbywgZm9yIFwiRW5hYmxlQ29uZmlnc1wiLCBJJ2xsIGxpc3Q6XG4tIGBBRl9SWFJQQ2Bcbi0gYElORVRgXG4tIGBJUFY2YFxuLSBgQUZfUlhSUENfSVBWNmBcblxuSSdtIGNvbmZpZGVudCB0aGlzIGNvdmVycyB0aGUgaW1wb3J0YW50IGFyZWFzLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHNvY2tldCBidWZmZXIgYWNjb3VudGluZywgaW50cm9kdWNpbmcgbG9ja2luZywgYW5kIGFmZmVjdGluZyBib3RoIHRoZSByZWNlaXZlIHBhdGggYW5kIHRoZSB0ZWFyZG93biBsaWZlY3ljbGUuIEl0J3MgdG91Y2hpbmcgYnVmZmVyIGFsbG9jYXRpb24sIG93bmVyc2hpcCwgYW5kIHJlbGVhc2UsIHNvIEkgd291bGQgY2VydGFpbmx5IGNvbnNpZGVyIHRoaXMgXCJXb3J0aEZ1enppbmdcIiBkdWUgdG8gdGhlIGhpZ2ggcmlzayBvZiByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgYW5kIHJlZmVyZW5jZSBjb3VudCBtaXNtYXRjaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNywiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjMyOjIzLjUyNDQwNzQ4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTc2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQUZfUlhSUENfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19za2Jfb3JwaGFuX3VkcFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiLFxuICAgIFwicnhycGNfb3Blbl9zb2NrZXRcIixcbiAgICBcInJ4cnBjX2xvb2t1cF9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJ4UlBDIFVEUCBlbmNhcHN1bGF0aW9uIHBhY2tldCByZWNlcHRpb24gYW5kIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBtYW5hZ2VtZW50LiBJdCBpbXBsZW1lbnRzIHJtZW0gYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBmb3IgcmVjZWl2ZWQgZW5jYXBzdWxhdGlvbiBza2JzIGluIHJ4cnBjX2VuY2FwX3Jjdiwgc2tiIG9ycGhhbmluZyB1bmRlciBza19yZWNlaXZlX3F1ZXVlLmxvY2sgaW4gcnhycGNfaW9fdGhyZWFkLCBzZXRzIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgaW4gcnhycGNfb3Blbl9zb2NrZXQsIGFuZCBhbHRlcnMgc29ja2V0IHJlbGVhc2Ugb3JkZXJpbmcgYW5kIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gcnhycGNfZGVzdHJveV9sb2NhbC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgbmV0d29ya2luZyBmYXN0LXBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igc29ja2V0IGFjY291bnRpbmcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQUZfUlhSUENfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19za2Jfb3JwaGFuX3VkcFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiLFxuICAgIFwicnhycGNfb3Blbl9zb2NrZXRcIixcbiAgICBcInJ4cnBjX2xvb2t1cF9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJ4UlBDIFVEUCBlbmNhcHN1bGF0aW9uIHBhY2tldCByZWNlcHRpb24gYW5kIGxvY2FsIHRyYW5zcG9ydCBlbmRwb2ludCBtYW5hZ2VtZW50LiBJdCBpbXBsZW1lbnRzIHJtZW0gYWNjb3VudGluZyBhbmQgc2NoZWR1bGluZyBmb3IgcmVjZWl2ZWQgZW5jYXBzdWxhdGlvbiBza2JzIGluIHJ4cnBjX2VuY2FwX3Jjdiwgc2tiIG9ycGhhbmluZyB1bmRlciBza19yZWNlaXZlX3F1ZXVlLmxvY2sgaW4gcnhycGNfaW9fdGhyZWFkLCBzZXRzIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgaW4gcnhycGNfb3Blbl9zb2NrZXQsIGFuZCBhbHRlcnMgc29ja2V0IHJlbGVhc2Ugb3JkZXJpbmcgYW5kIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gcnhycGNfZGVzdHJveV9sb2NhbC4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgc29ja2V0IGxpZmVjeWNsZSBhbmQgbmV0d29ya2luZyBmYXN0LXBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igc29ja2V0IGFjY291bnRpbmcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MjMuNjAyOTkyODg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5ODAwNzc5Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MjMuNjAzNDkyNTg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk4OTgwMDI3NjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXFxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXFxuMy4gQnVnIERldGVjdG9yIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIChgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYCksIHNvY2tldCByZWZlcmVuY2UgbGlmZWN5Y2xlIC8gdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKExPQ0tERVAsIEtBU0FOLCBhbmQgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMjBjYWM0YzBmMDY1MzM5NjNiYWYxMTU1YmIzMTZjOWYwMjlmYmY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTU6Mjk6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbmluZGV4IGRjNTE4NGEyZmE5ZDEuLmM3NzI0MWIxMmY1OTcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuQEAgLTcsMTIgKzcsNDggQEBcbiBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbisjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImFyLWludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc29ja2FkZHJfcnhycGMgKnBlZXJfc3J4LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4rLypcbisgKiBEcm9wIFVEUCBybWVtIG93bmVyc2hpcCBmb3IgcGFja2V0cyBjaGFyZ2VkIGluIGVuY2FwX3JjdigpLlxuKyAqIHNrX2ZvcndhcmRfYWxsb2MgaXMgc2VyaWFsaXNlZCBieSBza19yZWNlaXZlX3F1ZXVlLmxvY2suXG4rICovXG4rc3RhdGljIHZvaWQgcnhycGNfc2tiX29ycGhhbl91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4rXG4rXHRpZiAoIXNrKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdHNrYl9vcnBoYW4oc2tiKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ4cnBjX2VuY2FwX3Jjdl9kcm9wKHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQodWRwX3NrKTtcbitcbitcdHNrX2Ryb3BzX2luYyh1ZHBfc2spO1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuK1x0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpO1xuK1x0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XG4rXHR9IGVsc2VcbisjZW5kaWZcbitcdHtcbitcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9SQ1ZCVUZFUlJPUlMpO1xuK1x0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lORVJST1JTKTtcbitcdH1cbitcdHNrX3NrYl9yZWFzb25fZHJvcCh1ZHBfc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9SQ1ZCVUZGKTtcbit9XG4rXG4gLypcbiAgKiBoYW5kbGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnRcbiAgKiAtIG1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHRcbkBAIC0yOCw2ICs2NCw4IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnJ4X3F1ZXVlO1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEodWRwX3NrKTtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqaW9fdGhyZWFkO1xuK1x0dW5zaWduZWQgaW50IGhlYWRyb29tO1xuK1x0dW5zaWduZWQgaW50IHJjdmJ1ZjtcbiBcbiBcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTQxLDggKzc5LDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2V0c3RhbXAgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XG4gXG4tXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbi1cdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xuICNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG5AQCAtNTIsNiArODgsMjQgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0cmN2YnVmID0gUkVBRF9PTkNFKHVkcF9zay1cdTAwM2Vza19yY3ZidWYpO1xuK1x0aGVhZHJvb20gPSBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcbitcdHNwaW5fbG9jayhcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdGlmICgodW5zaWduZWQgaW50KWF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSArXG4rXHQgICAgc2tiLVx1MDAzZXRydWVzaXplICsgaGVhZHJvb20gXHUwMDNlPSByY3ZidWYgfHxcbitcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdFx0cnhycGNfZW5jYXBfcmN2X2Ryb3AodWRwX3NrLCBza2IpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNrYi1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0c2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnVkcF9zay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuK1x0c2tiX2RzdF9kcm9wKHNrYik7XG4rXG4rXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbitcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiBcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDcxLDYgKzUyNSw5IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbiBcdFx0LyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovXG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZyeF9xdWV1ZSkpKSB7XG4gXHRcdFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuK1xuK1x0XHRcdGlmIChza2ItXHUwMDNlbWFyayA9PSBSWFJQQ19TS0JfTUFSS19QQUNLRVQpXG4rXHRcdFx0XHRyeHJwY19za2Jfb3JwaGFuX3VkcChza2IpO1xuIFx0XHRcdHN3aXRjaCAoc2tiLVx1MDAzZW1hcmspIHtcbiBcdFx0XHRjYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDpcbiBcdFx0XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IDA7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG5pbmRleCAxNjlmOWRmZGFhNzdmLi4yZjkzODkxZTg0MWFiIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG4rKysgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbkBAIC0xNjYsNiArMTY2LDcgQEAgc3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mID0gezB9O1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4gXHRzdHJ1Y3Qgc29jayAqdXNrO1xuK1x0dTMyIHJjdmJ1ZjtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCIlcHslZCwlZH1cIixcbkBAIC0xOTgsNiArMTk5LDEyIEBAIHN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0Lyogc2V0IHRoZSBzb2NrZXQgdXAgKi9cbiBcdHVzayA9IGxvY2FsLVx1MDAzZXNvY2tldC1cdTAwM2VzaztcbitcdC8qIE9uZSBhZHZlcnRpc2VkIG9yZGluYXJ5LURBVEEgd2luZG93LCBub3QganVtYm8tbWF4LiAqL1xuK1x0cmN2YnVmID0gcnhycGNfcnhfd2luZG93X3NpemUgKiBTS0JfVFJVRVNJWkUoUlhSUENfSlVNQk8oMSkpICogMjtcbitcdHJjdmJ1ZiArPSByY3ZidWYgLyA0O1xuK1x0cmN2YnVmID0gY2xhbXAocmN2YnVmLCBSRUFEX09OQ0Uoc3lzY3RsX3JtZW1fZGVmYXVsdCksXG4rXHRcdCAgICAgICBSRUFEX09OQ0Uoc3lzY3RsX3JtZW1fbWF4KSk7XG4rXHRXUklURV9PTkNFKHVzay1cdTAwM2Vza19yY3ZidWYsIHJjdmJ1Zik7XG4gXHR1c2stXHUwMDNlc2tfZXJyb3JfcmVwb3J0ID0gcnhycGNfZXJyb3JfcmVwb3J0O1xuIFxuIFx0c3dpdGNoIChzcngtXHUwMDNldHJhbnNwb3J0LmZhbWlseSkge1xuQEAgLTQzNyw4ICs0NDQsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0fVxuIFxuIFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXG5AQCAtNDQ4LDYgKzQ1NSwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbitcbitcdGlmIChzb2NrZXQpXG4rXHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuK1xuIFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcbiBcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcdTAwMjZsb2NhbC1cdTAwM2V0eF9hbGxvYyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MzI6MjMuNjAzNDkzNDY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNTcyNTQyMDc1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlcywgdGhlbiBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cbkZpcnN0LCBsZXQncyB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgaXQgcHJpbWFyaWx5IGNvbmNlcm5zIHRoZSBgcnhycGNgIG5ldHdvcmsgcHJvdG9jb2wsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBVRFAgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIHJlY2VpdmUgcGF0aC5cblxuKiAgIEluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgLCB0aGUga2V5IGFkZGl0aW9uIGlzIGByeHJwY19za2Jfb3JwaGFuX3VkcChza2IpYC4gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCB0byBkcm9wIFVEUCBybWVtIG93bmVyc2hpcCBvZiB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgdXNlIG9mIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBhIHNwaW5sb2NrLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGFyZWEgdG8gd2F0Y2ggYXMgc3BpbmxvY2tzIGNhbiBtYWtlIGFuYWx5c2lzIHRyaWNreS4gVGhlbiB0aGVyZSdzIGByeHJwY19lbmNhcF9yY3ZfZHJvcCh1ZHBfc2ssIHNrYilgIHdoaWNoIGluY3JlbWVudHMgc3RhdHMgYW5kIGNhbGxzIGBza19za2JfcmVhc29uX2Ryb3AoKWAuIEFuZCB3aXRoaW4gYHJ4cnBjX2VuY2FwX3JjdigpYCwgdGhlIGNvZGUgY2hlY2tzIHRoZSByZWNlaXZlIGJ1ZmZlciAoYHNrX3JjdmJ1ZmApIG9mIHRoZSBVRFAgc29ja2V0IChgdWRwX3NrYCkuIEl0IGFsc28gY2FsY3VsYXRlcyBoZWFkcm9vbSBhbmQgY2hlY2tzIGBza19ybWVtX3NjaGVkdWxlYCwgYW5kIGRyb3BzIHBhY2tldHMgaWYgdGhlIGJ1ZmZlciBpcyBleGNlZWRlZC4gVGhpcyBpcyBub3JtYWwuIFRoZSBpbXBvcnRhbnQgcGFydHMgYXJlIHRoZSB1c2Ugb2YgYHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zaylgIHRvIGNoYXJnZSB0aGUgU0tCIHRvIHRoZSBzb2NrZXQgd2l0aGluIGEgbG9jaywgdGhlbiBsYXRlciB1bmNoYXJnZXMgaXQgd2l0aCBgcnhycGNfc2tiX29ycGhhbl91ZHAoc2tiKWAgd2hlbiBkZXF1ZXVpbmcgZnJvbSBgcnhfcXVldWVgLlxuXG4qICAgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AgaXMgYWxzbyBtb2RpZmllZCwgd2l0aCBjaGFuZ2VzIHRvIGByeHJwY19vcGVuX3NvY2tldGAsIHdoZXJlIHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIChgc2tfcmN2YnVmYCkgaXMgc2V0IGJhc2VkIG9uIHRoZSBhZHZlcnRpc2VkIHdpbmRvdyBhbmQgc3lzdGVtLXdpZGUgbWVtb3J5IGxpbWl0cywgYW5kIGByeHJwY19kZXN0cm95X2xvY2FsYCB3aGljaCB1c2VzIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgYW5kIGBzeW5jaHJvbml6ZV9yY3VgIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBzb2NrZXQgY2xlYW51cCBhbmQgcmVsZWFzZSBwYXRoLiBUaGUgZGVmZXJyYWwgb2YgYHNvY2tfcmVsZWFzZWAgYWZ0ZXIgcHVyZ2luZyBxdWV1ZXMgaXMgYWxzbyBrZXkuXG5cblNvLCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXM6XG5cbjEuICBNYW5hZ2luZyBTS0Igb3duZXJzaGlwIHJlbGF0ZWQgdG8gYSBVRFAgc29ja2V0LlxuMi4gIEJ1ZmZlciBzaXplIGNoZWNrcyBhbmQgZHJvcHBpbmcgcGFja2V0cy5cbjMuICBTb2NrZXQgZGVzdHJ1Y3Rpb24gYW5kIGNsZWFudXAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgS01TQU4gYW5nbGVzIGhlcmUuIFRoZSBtb3N0IG9idmlvdXMgYXJlYSBvZiBjb25jZXJuIGlzIGFyb3VuZCB0aGUgYnVmZmVyIG93bmVyc2hpcCB0cmFuc2ZlciBhbmQgcmVsZWFzZSB3aXRoaW4gdGhlIHJlY2VpdmUgcGF0aC4gU3BlY2lmaWNhbGx5LCBgc2tiX3NldF9vd25lcl9yYCBhbmQgYHNrYl9vcnBoYW5gLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgYSByYWNlIGNvbmRpdGlvbiBvciBpbmNvcnJlY3QgdXNlIG9mIG1lbW9yeSBvd25lcnNoaXAsIG9yIGJ1ZmZlciByZS11c2UgY2FuIHRyaWdnZXIgS01TQU4uIFRoZSB1c2Ugb2Ygc3BpbmxvY2tzIGFuZCBgcmN1YCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZXkgdXN1YWxseSBpbmNyZWFzZSB0aGUgY29tcGxleGl0eSBvZiBhbmFseXNpcy4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgcnhycGNfcHVyZ2VfcXVldWVgLiBJdCdzIHBvc3NpYmxlIHRvIGZpbmQgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTo1NTowMC44NTc3MDQ5MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTc5NjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19wdXJnZV9xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL2FmX3J4cnBjLmM9OTA3PXN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy05MTEtXFx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYzo5MTI6XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYy05MTMtXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYz05Mjc9c3RhdGljIGludCByeHJwY19yZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY0LVxcdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6OTY1OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtOTY2LVxcbi0tXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTUxNz12b2lkIHJ4cnBjX2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICosIGVudW0gcnhycGNfc2tiX3RyYWNlKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxNTE4OnZvaWQgcnhycGNfcHVyZ2VfcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xNTE5LVxcbi0tXFxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM9NTU0PXN0YXRpYyB2b2lkIHJ4cnBjX2NsZWFudXBfcnhfYnVmZmVycyhzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG5uZXQvcnhycGMvY2FsbF9vYmplY3QuYy01NTUte1xcbm5ldC9yeHJwYy9jYWxsX29iamVjdC5jOjU1NjpcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19xdWV1ZSk7XFxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM6NTU3OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZjYWxsLVxcdTAwM2VyeF9xdWV1ZSk7XFxubmV0L3J4cnBjL2NhbGxfb2JqZWN0LmM6NTU4OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZjYWxsLVxcdTAwM2VyeF9vb3NfcXVldWUpO1xcbm5ldC9yeHJwYy9jYWxsX29iamVjdC5jLTU1OS1cXHRrZnJlZShjYWxsLVxcdTAwM2VyeF9kZWNfYnVmZmVyKTtcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jPTMwNj1zdGF0aWMgdm9pZCByeHJwY19jbGVhbl91cF9jb25uZWN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTMzMS1cXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYzozMzI6XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmNvbm4tXFx1MDAzZXJ4X3F1ZXVlKTtcXG5uZXQvcnhycGMvY29ubl9vYmplY3QuYy0zMzMtXFx0cnhycGNfZnJlZV9za2IoY29ubi1cXHUwMDNldHhfcmVzcG9uc2UsIHJ4cnBjX3NrYl9wdXRfcmVzcG9uc2UpO1xcbi0tXFxubmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMtMzQ2LVxcdCAqL1xcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jOjM0NzpcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2Y29ubi1cXHUwMDNlcnhfcXVldWUpO1xcbm5ldC9yeHJwYy9jb25uX29iamVjdC5jLTM0OC1cXG4tLVxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz00Mjc9dm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU0LSNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjQ1NTpcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtNDU2LSNlbmRpZlxcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYzo0NTc6XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZSk7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTQ1OC1cXG4tLVxcbm5ldC9yeHJwYy9yZWN2bXNnLmM9NDA3PWludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9yeHJwYy9yZWN2bXNnLmMtNTY3LWNhbGxfZmFpbGVkOlxcbm5ldC9yeHJwYy9yZWN2bXNnLmM6NTY4OlxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX3F1ZXVlKTtcXG5uZXQvcnhycGMvcmVjdm1zZy5jLTU2OS1jYWxsX2NvbXBsZXRlOlxcbi0tXFxubmV0L3J4cnBjL3NrYnVmZi5jPTUyPXZvaWQgcnhycGNfZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSByeHJwY19za2JfdHJhY2Ugd2h5KVxcbi0tXFxubmV0L3J4cnBjL3NrYnVmZi5jLTYzLSAqL1xcbm5ldC9yeHJwYy9za2J1ZmYuYzo2NDp2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxubmV0L3J4cnBjL3NrYnVmZi5jLTY1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6NTU6MDEuMzkzNTA2ODI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MDEyMDEzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYHJ4cnBjX3B1cmdlX3F1ZXVlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGByeHJwY19wdXJnZV9xdWV1ZWAgZnVuY3Rpb24uIE15IGJyYWluJ3MgYWxyZWFkeSBzdGFydGluZyB0byBydW4gdGhyb3VnaCB0aGUgbGlrZWx5IHNjZW5hcmlvcyBhbmQgdGhlIHVzdWFsIGdvdGNoYXMgd2l0aCBxdWV1ZSBtYW5hZ2VtZW50IGluIHRoaXMgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBhcm91bmQgaXRlcmF0aW5nLCBmcmVlaW5nLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZXJyb3JzIGR1cmluZyB0aGUgcHVyZ2UgcHJvY2Vzcy4gS25vd2luZyB0aGUgYnJvYWRlciBSeFJQQyBjb250ZXh0LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIG1lc3NhZ2UgbGlmZXRpbWVzLCBjb25uZWN0aW9uIHN0YXRlLCBhbmQgcG9zc2libHkgZXZlbiBjb25jdXJyZW5jeSBpc3N1ZXMuIEknbGwgbWVudGFsbHkgbWFwIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGxhcmdlciBjb21tdW5pY2F0aW9uIGZsb3cgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgcmVzb3VyY2UgY2xlYW51cCBhbmQgZW5zdXJpbmcgYSByb2J1c3Qgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjg2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6NTU6MDQuMDk0NzExMzEzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXG4gIDYxOlxcdC8qXFxuICA2MjpcXHQgKiBDbGVhciBhIHF1ZXVlIG9mIHNvY2tldCBidWZmZXJzLlxcbiAgNjM6XFx0ICovXFxuICA2NDpcXHR2b2lkIHJ4cnBjX3B1cmdlX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKChsaXN0KSkpICE9IE5VTEwpIHtcXG4gIDY5OlxcdFxcdFxcdGludCBuID0gYXRvbWljX2RlY19yZXR1cm4oc2VsZWN0X3NrYl9jb3VudChza2IpKTtcXG4gIDcwOlxcdFxcdFxcdHRyYWNlX3J4cnBjX3NrYihza2IsIHJlZmNvdW50X3JlYWQoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMpLCBuLFxcbiAgNzE6XFx0XFx0XFx0XFx0XFx0cnhycGNfc2tiX3B1dF9wdXJnZSk7XFxuICA3MjpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTo1NTowNC4wOTQ3NzAyMzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzUzMzQ5ODcyNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBQYWNrZXQgUmVsZWFzZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgaG93IGl0J3MgcmVsZWFzZWQgYWZ0ZXIgYmVpbmcgdXNlZCBpbiB0aGUgYHJ4cnBjYCBjb250ZXh0LiBJZiBgc2tiYCBnZXRzIHB1cmdlZCB1c2luZyBgcnhycGNfcHVyZ2VfcXVldWVgIG9yIHRocm91Z2ggdGhlIG1vcmUgZ2VuZXJhbCBgY29uc3VtZV9za2JgIG9yIGBrZnJlZV9za2JgIHBhdGhzLCB0aGUgc29ja2V0IHJlZmVyZW5jZSBzaG91bGQgYmUgcmVsZWFzZWQsIGFuZCB0aGUgYXNzb2NpYXRlZCBybWVtIChyZWNlaXZlIG1lbW9yeSkgc2hvdWxkIGJlIHVuY2hhcmdlZC4gVGhpcyB1bmNoYXJnaW5nIGlzIGtleTsgaXQncyBkb25lIGVpdGhlciB2aWEgYHNrYl9vcnBoYW5gIG9yIHRocm91Z2ggYSBkZXN0cnVjdG9yLCBsaWtlIGBzb2NrX3JmcmVlYC5cblxuQnV0IGhvbGQgb24sIHRoZXJlJ3MgYSBjcml0aWNhbCBwb2ludCB3aGVuIGBza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spYCBpcyBjYWxsZWQuIFRoaXMgc2V0cyB0aGUgYHNrYi1cdTAwM2VkZXN0cnVjdG9yYCB0byBgc29ja19yZnJlZWAgYW5kIGxpbmtzIHRoZSBgc2tiYCB0byB0aGUgc29ja2V0IChgc2tiLVx1MDAzZXNrID0gc2tgKS4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyLCBkb2VzIGBzb2NrX3JmcmVlYCByZXF1aXJlIHRoZSBgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYD8gVGhhdCdzIGVzc2VudGlhbCB0byBtYWludGFpbmluZyBkYXRhIGludGVncml0eSBhbmQgYXZvaWRpbmcgcmFjZSBjb25kaXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgc29ja19yZnJlZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBVRFAgYW5kIGNvcmUgbmV0d29ya2luZyBjb250ZXh0IHRvIG1ha2Ugc3VyZSB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHRocmVhZC1zYWZlIGFuZCBjb3JyZWN0LiBJJ2xsIGNoZWNrIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAwOjU3LjQ0NDY0NjY3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNzg0NDE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHNvY2tfcmZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc29jay5oPTE4NjY9dm9pZCBza2Jfb3JwaGFuX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvc29jay5oOjE4Njc6dm9pZCBzb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xODY4LXZvaWQgc29ja19ybWVtX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9Mjc5Mz1FWFBPUlRfU1lNQk9MKHNrYl9vcnBoYW5fcGFydGlhbCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjc5Ny0gKi9cXG5uZXQvY29yZS9zb2NrLmM6Mjc5ODp2b2lkIHNvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9zb2NrLmMtMjc5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAwOjU5Ljg3MjUwNTYwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzI4MzQ2NzczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgU29ja2V0IFJlbGVhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L2NvcmUvc29jay5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYHNvY2tfcmZyZWVgIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpc24ndCB3b3JraW5nIGFzIGV4cGVjdGVkIGluIHRoZSBzb2NrZXQgcmVsZWFzZSBwcm9jZXNzIGFuZCB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgd2hhdCByZXNvdXJjZXMgaXQncyBmcmVlaW5nLCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgYSBwb3RlbnRpYWwgbGVhayBvciBpbXByb3BlciBoYW5kbGluZyB3aXRoaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCB0aGF0IGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAxOjE3LjE1NTk3Njk2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3OTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3OTU6XFx0LypcXG4yNzk2OlxcdCAqIFJlYWQgYnVmZmVyIGRlc3RydWN0b3IgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBrZnJlZV9za2IuXFxuMjc5NzpcXHQgKi9cXG4yNzk4OlxcdHZvaWQgc29ja19yZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjI3OTk6XFx0e1xcbjI4MDA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVxcdTAwM2VzaztcXG4yODAxOlxcdFxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZXRydWVzaXplO1xcbjI4MDI6XFx0XFxuMjgwMzpcXHRcXHRhdG9taWNfc3ViKGxlbiwgXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG4yODA0OlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgbGVuKTtcXG4yODA1OlxcdH1cXG4yODA2OlxcdEVYUE9SVF9TWU1CT0woc29ja19yZnJlZSk7XFxuMjgwNzpcXHRcXG4yODA4OlxcdC8qXFxuMjgwOTpcXHQgKiBCdWZmZXIgZGVzdHJ1Y3RvciBmb3Igc2ticyB0aGF0IGFyZSBub3QgdXNlZCBkaXJlY3RseSBpbiByZWFkIG9yIHdyaXRlXFxuMjgxMDpcXHQgKiBwYXRoLCBlLmcuIGZvciBlcnJvciBoYW5kbGVyIHNrYnMuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20ga2ZyZWVfc2tiLlxcbjI4MTE6XFx0ICovXFxuMjgxMjpcXHR2b2lkIHNvY2tfZWZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yODEzOlxcdHtcXG4yODE0OlxcdFxcdHNvY2tfcHV0KHNrYi1cXHUwMDNlc2spO1xcbjI4MTU6XFx0fVxcbjI4MTY6XFx0RVhQT1JUX1NZTUJPTChzb2NrX2VmcmVlKTtcXG4yODE3OlxcdFxcbjI4MTg6XFx0LyogQnVmZmVyIGRlc3RydWN0b3IgZm9yIHByZWZldGNoL3JlY2VpdmUgcGF0aCB3aGVyZSByZWZlcmVuY2UgY291bnQgbWF5XFxuMjgxOTpcXHQgKiBub3QgYmUgaGVsZCwgZS5nLiBmb3IgbGlzdGVuIHNvY2tldHMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAxOjE3LjE1NjI0NTgzMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NjA4OTk3MjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIGBza19tZW1fdW5jaGFyZ2VgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLi4uIFdoYXQgZXhhY3RseSBpcyB0aGUgZnVuY3Rpb24gb2YgYHNrX21lbV91bmNoYXJnZWAgaW4gdGhpcyBjb250ZXh0PyBMZXQncyB0YWtlIGEgbG9vay4gSSdsbCBnZXQgcmlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTm8gdGltZSB0byB3YXN0ZTsgbGV0J3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTY6MDI6MzMuMjQ2MjIxNDU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg4MDI5MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX21lbV91bmNoYXJnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zb2NrLmg9MTYzNz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfbWVtX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTE2NDMtXFxuaW5jbHVkZS9uZXQvc29jay5oOjE2NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0xNjQ1LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTMyNz1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3dtZW1fZnJlZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzMwLVxcdGlmICghc2tiX3pjb3B5X3B1cmUoc2tiKSlcXG5pbmNsdWRlL25ldC90Y3AuaDozMzE6XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0zMzItXFx0ZWxzZVxcbmluY2x1ZGUvbmV0L3RjcC5oOjMzMzpcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChza2IpKSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMzM0LVxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMDQ5PUJQRl9DQUxMXzQoYnBmX21zZ19wb3BfZGF0YSwgc3RydWN0IHNrX21zZyAqLCBtc2csIHUzMiwgc3RhcnQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zMTc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjMxNzY6XFx0c2tfbWVtX3VuY2hhcmdlKG1zZy1cXHUwMDNlc2ssIGxlbiAtIHBvcCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzE3Ny1cXHRtc2ctXFx1MDAzZXNnLnNpemUgLT0gKGxlbiAtIHBvcCk7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEzOD12b2lkIHNrX21zZ19yZXR1cm5femVybyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xNDctXFx0XFx0XFx0c2dlLVxcdTAwM2VvZmZzZXQgKz0gYnl0ZXM7XFxubmV0L2NvcmUvc2ttc2cuYzoxNDg6XFx0XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBieXRlcyk7XFxubmV0L2NvcmUvc2ttc2cuYy0xNDktXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTE1MS1cXG5uZXQvY29yZS9za21zZy5jOjE1MjpcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnZS1cXHUwMDNlbGVuZ3RoKTtcXG5uZXQvY29yZS9za21zZy5jLTE1My1cXHRcXHRieXRlcyAtPSBzZ2UtXFx1MDAzZWxlbmd0aDtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTYyPXZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xNjktXFxubmV0L2NvcmUvc2ttc2cuYzoxNzA6XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCB1bmNoYXJnZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xNzEtXFx0XFx0Ynl0ZXMgLT0gdW5jaGFyZ2U7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTE3Nz1zdGF0aWMgaW50IHNrX21zZ19mcmVlX2VsZW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBpLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xODUtXFx0XFx0aWYgKGNoYXJnZSlcXG5uZXQvY29yZS9za21zZy5jOjE4NjpcXHRcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIGxlbik7XFxubmV0L2NvcmUvc2ttc2cuYy0xODctXFx0XFx0cHV0X3BhZ2Uoc2dfcGFnZShzZ2UpKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MjI0PXN0YXRpYyB2b2lkIF9fc2tfbXNnX2ZyZWVfcGFydGlhbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjM1LVxcdFxcdFxcdGlmIChjaGFyZ2UpXFxubmV0L2NvcmUvc2ttc2cuYzoyMzY6XFx0XFx0XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBieXRlcyk7XFxubmV0L2NvcmUvc2ttc2cuYy0yMzctXFx0XFx0XFx0c2dlLVxcdTAwM2VsZW5ndGggLT0gYnl0ZXM7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTI2ND12b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0yODUtXFx0bXNnLVxcdTAwM2VzZy5kYXRhW2ldLmxlbmd0aCAtPSB0cmltO1xcbm5ldC9jb3JlL3NrbXNnLmM6Mjg2OlxcdHNrX21lbV91bmNoYXJnZShzaywgdHJpbSk7XFxubmV0L2NvcmUvc2ttc2cuYy0yODctXFx0LyogQWRqdXN0IGNvcHlicmVhayBpZiBpdCBmYWxscyBpbnRvIHRoZSB0cmltbWVkIHBhcnQgb2YgbGFzdCBidWYgKi9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NDEzPWludCBfX3NrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy00NTctXFx0XFx0XFx0XFx0aWYgKCFtc2dfcngtXFx1MDAzZXNrYikge1xcbm5ldC9jb3JlL3NrbXNnLmM6NDU4OlxcdFxcdFxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgY29weSk7XFxubmV0L2NvcmUvc2ttc2cuYy00NTktXFx0XFx0XFx0XFx0XFx0YXRvbWljX3N1Yihjb3B5LCBcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTI3OTg9dm9pZCBzb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjgwMy1cXHRhdG9taWNfc3ViKGxlbiwgXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG5uZXQvY29yZS9zb2NrLmM6MjgwNDpcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIGxlbik7XFxubmV0L2NvcmUvc29jay5jLTI4MDUtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTMyLVxcdFxcdGlmICh1bmNoYXJnZSlcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTMzOlxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgcmV0KTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTM0LVxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTUtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDk2OlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2VudCk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5Ny1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xOTcyPWludCB0Y3BfdHJpbV9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xOTg1LVxcdGlmICghc2tiX3pjb3B5X3B1cmUoc2tiKSlcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTk4NjpcXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIGRlbHRhX3RydWVzaXplKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTk4Ny1cXG4tLVxcbm5ldC9rY20va2Ntc29jay5jPTE3Mz1zdGF0aWMgdm9pZCBrY21fcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9rY20va2Ntc29jay5jLTE3OS1cXG5uZXQva2NtL2tjbXNvY2suYzoxODA6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBsZW4pO1xcbm5ldC9rY20va2Ntc29jay5jLTE4MS1cXHRhdG9taWNfc3ViKGxlbiwgXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTExNDc9c3RhdGljIHZvaWQgZGZyYWdfdW5jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNDgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjExNDk6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBsZW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExNTAtXFx0c2tfd21lbV9xdWV1ZWRfYWRkKHNrLCAtbGVuKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMzg9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDMtXFx0YXRvbWljX3N1Yihza2ItXFx1MDAzZXRydWVzaXplLCBcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDQ6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ1LVxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05MjEzPXN0YXRpYyB2b2lkIHNjdHBfd2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTkyMTgtXFxubmV0L3NjdHAvc29ja2V0LmM6OTIxOTpcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNrYi1cXHUwMDNldHJ1ZXNpemUpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTkyMjAtXFx0c2tfd21lbV9xdWV1ZWRfYWRkKHNrLCAtKHNrYi1cXHUwMDNldHJ1ZXNpemUgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmspKSk7XFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYz05MjU2PXZvaWQgc2N0cF9zb2NrX3JmcmVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy05MjY1LVxcdCAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjkyNjY6XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBldmVudC1cXHUwMDNlcm1lbV9sZW4pO1xcbm5ldC9zY3RwL3NvY2tldC5jLTkyNjctfVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTE2OD1pbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTIxMS1cXHRcXHRwdXRfcGFnZShwKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MjEyOlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2ctXFx1MDAzZWxlbmd0aCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTIxMy1cXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTI4MT12b2lkIHRsc19mcmVlX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjg2LVxcdFxcdHB1dF9wYWdlKHNnX3BhZ2Uoc2cpKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6Mjg3OlxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2ctXFx1MDAzZWxlbmd0aCk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTI4OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAyOjM1LjczNDI1ODQ3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTgyMjg5MjgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU29ja2V0IE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza19tZW1fdW5jaGFyZ2VgIHdvcmtzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbmV0L3NvY2suaGAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja2V0IG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBMaW51eCBrZXJuZWwuIE5vIG5lZWQgdG8gd2FzdGUgdGltZTsgbGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0IHRoYXQgbWFjcm8gb3IgZnVuY3Rpb24gZG9lcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciB0aGUgb3ZlcmFsbCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gYSBzb2NrZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byBnbyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjAzOjExLjU1NzE1NDg1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvc29jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NDA6XFx0XFx0XFx0cmV0dXJuO1xcbjE2NDE6XFx0XFx0c2tfZm9yd2FyZF9hbGxvY19hZGQoc2ssIC1zaXplKTtcXG4xNjQyOlxcdH1cXG4xNjQzOlxcdFxcbjE2NDQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrX21lbV91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplKVxcbjE2NDU6XFx0e1xcbjE2NDY6XFx0XFx0aWYgKCFza19oYXNfYWNjb3VudChzaykpXFxuMTY0NzpcXHRcXHRcXHRyZXR1cm47XFxuMTY0ODpcXHRcXHRza19mb3J3YXJkX2FsbG9jX2FkZChzaywgc2l6ZSk7XFxuMTY0OTpcXHRcXHRza19tZW1fcmVjbGFpbShzayk7XFxuMTY1MDpcXHR9XFxuMTY1MTpcXHRcXG4xNjUyOlxcdHZvaWQgX19za19jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBnZnApO1xcbjE2NTM6XFx0XFxuMTY1NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfTE9DS0lORykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfTU9EVUxFUylcXG4xNjU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza19vd25lcl9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4xNjU2OlxcdHtcXG4xNjU3OlxcdFxcdF9fbW9kdWxlX2dldChvd25lcik7XFxuMTY1ODpcXHRcXHRzay1cXHUwMDNlc2tfb3duZXIgPSBvd25lcjtcXG4xNjU5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTY6MDM6MTEuNTU3MzAyMDM4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MTg0NjQ0NTgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBLTVNBTioqXG5cbk9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2guIEkndmUgd2Fsa2VkIHRocm91Z2ggdGhlIGNvZGUgY2hhbmdlcyBtZXRpY3Vsb3VzbHksIGNvbnNpZGVyaW5nIHRoZSBLTVNBTiBjcml0ZXJpYSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYnVncy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGNvcnJlY3Qgc29ja2V0IHN0YXRlIG1hbmFnZW1lbnQsIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgY29kZSBpbiBgcnhycGNfc2tiX29ycGhhbl91ZHBgLCBgcnhycGNfZW5jYXBfcmN2X2Ryb3BgLCBhbmQgYHJ4cnBjX2VuY2FwX3JjdmAuIEl04oCZcyBjbGVhciB0byBtZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGxpZmVjeWNsZSBvZiBTS0JzIHdpdGhpbiB0aGUgUlhSUEMgc3Vic3lzdGVtLiBUaGUga2V5IGlzIGluIG1haW50YWluaW5nIHRoZSByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgYW5kIGRyb3BwaW5nIHBhY2tldHMgaWYgdGhlc2UgbGltaXRzIGFyZSBleGNlZWRlZC4gSSBub3RlIHRoZSBsb2NraW5nIGFyb3VuZCB0aGUgcmVjZWl2ZSBxdWV1ZSBhbmQgdGhlIHVzZSBvZiBgc2tiX29ycGhhbmAsIHdoaWNoIGFyZSBjbGFzc2ljIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGluIHRoaXMgc29ydCBvZiBuZXR3b3JrIGNvZGUuIEkgZG8gbm90IHNlZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiB0aGVzZSBmdW5jdGlvbnMuIFRoZSBsb2NraW5nIGhlcmUsIHdoaWxlIGltcG9ydGFudCwgaXMgbW9yZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIGF0b21pY2l0eSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5OZXh0LCBJIGxvb2tlZCBhdCB0aGUgY2hhbmdlcyBpbiBgcnhycGNfb3Blbl9zb2NrZXRgIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgYXJlIGJlaW5nIGNhbGN1bGF0ZWQgYW5kIHNldCBpbiB0aGUgb3BlbiBzb2NrZXQgZnVuY3Rpb24gYW5kIGNsZWFyZWQgaW4gdGhlIGRlc3Ryb3kuIFRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRpbWluZyBvZiBgc29ja19yZWxlYXNlYCB3aXRoaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFyZSBjcml0aWNhbCBidXQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgc29ja2V0IHRlYXJkb3duIGlzIGhhcHBlbmluZyB2aWEgUkNVIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGFzIHRoZSBzb2NrZXRzIGFyZSByZW1vdmVkLlxuXG5JIGNvbnNpZGVyZWQgZWFjaCBvZiB0aGUgZm91ciBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlOioqIE5vcGUuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gSXQncyBhbGwgYWJvdXQgaW50ZXJuYWwgc29ja2V0IG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBJIHNjcnV0aW5pemVkIGV2ZXJ5IHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFuZCB1c2FnZS4gQWxsIGxvY2FsIHZhcmlhYmxlcywgc3VjaCBhcyBgcmN2YnVmYCwgYW5kIGBoZWFkcm9vbWAsIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHdoZXRoZXIgaXTigJlzIHJlYWRpbmcgZnJvbSBzb2NrZXQgc3RhdGUgb3IgZG9pbmcgYSBjYWxjdWxhdGlvbi4gSSBkb27igJl0IHNlZSBhbnkgcG90ZW50aWFsIGZvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGhlcmUuIEl0IGlzIGp1c3QgYWRqdXN0aW5nIGEgZmV3IHNvY2tldCB2YXJpYWJsZXMuXG5cbjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIHVuaW5pdGlhbGl6ZWQgYnl0ZXM6KiogVGhlIHBhdGNo4oCZcyBhZGRpdGlvbnMgZG8gbm90IGNvbXByb21pc2UgcGFja2V0IGJvdW5kYXJ5IGNoZWNrcyBvciByZWFkIHBhc3QgYnVmZmVyIGxpbWl0cy4gVGhlIGNoYW5nZXMgcmVsYXRlZCB0byByZWNlaXZlIGJ1ZmZlciBsaW1pdHMgc2VydmUgdG8gKnByZXZlbnQqIG92ZXJydW5zLCBieSBkcm9wcGluZyBwYWNrZXRzLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBwb3NzaWJsZSByaXNrcyBpbiB0aGlzIHBhdGNoOiBEZWFkbG9ja3MsIFVzZS1hZnRlci1GcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgbWVtb3J5IGxlYWsvYWNjb3VudGluZyBtaXNtYXRjaGVzLiBJIGRldGVybWluZWQgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIGlzc3Vlcy4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gVGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZWFkLiBUaGVyZSBpcyBhbHNvIG5vIGNoYW5nZSBpbiBob3cgZGF0YSBpcyByZWFkIGZyb20gdGhlIHBhY2tldCBpdHNlbGYuXG5cbkluIGNvbmNsdXNpb24sIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvICpub3QqIGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwcmltYXJ5IGNvbmNlcm5zIGFyZSBzeW5jaHJvbml6YXRpb24sIGRhdGEgY29uc2lzdGVuY3ksIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZXNlIGFyZSBiZXN0IGFkZHJlc3NlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBzYW5pdGl6YXRpb24gdG9vbHMuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODEsIk91dHB1dFRva2VucyI6MjcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE2OjA1OjMzLjQwMzc1MDMwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBVRFAgc29ja2V0IHJlY2VpdmUgbWVtb3J5IGFjY291bnRpbmcgKHJtZW0pIGFuZCBidWZmZXIgbGltaXRzIHRvIHRoZSByeHJwYyBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIHBhdGggKGByeHJwY19lbmNhcF9yY3ZgKSwgcHJvcGVybHkgb3JwaGFucyB0aGUgc2tiIHVuZGVyIGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgIGluIGByeHJwY19pb190aHJlYWRgLCBhbmQgYWRqdXN0cyBzb2NrZXQgcmVsZWFzZSBzeW5jaHJvbml6YXRpb24gaW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGByY3ZidWZgLCBgaGVhZHJvb21gLCBgc2tgLCBgbmV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgY3JlYXRlZCwgcmVhZCwgb3IgbW9kaWZpZWQuXFxuMi4gS2VybmVsLXRvLVVzZXIgSW5mby1MZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgb3V0cHV0cykuXFxuMy4gQnVnIERldGVjdG9yIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIChgc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrYCksIHNvY2tldCByZWZlcmVuY2UgbGlmZWN5Y2xlIC8gdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKExPQ0tERVAsIEtBU0FOLCBhbmQgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIGFzc2VydGlvbnMpLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFVEUCBzb2NrZXQgcmVjZWl2ZSBtZW1vcnkgYWNjb3VudGluZyAocm1lbSkgYW5kIGJ1ZmZlciBsaW1pdHMgdG8gdGhlIHJ4cnBjIFVEUCBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcGF0aCAoYHJ4cnBjX2VuY2FwX3JjdmApLCBwcm9wZXJseSBvcnBoYW5zIHRoZSBza2IgdW5kZXIgYHNrX3JlY2VpdmVfcXVldWUubG9ja2AgaW4gYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBhZGp1c3RzIHNvY2tldCByZWxlYXNlIHN5bmNocm9uaXphdGlvbiBpbiBgcnhycGNfZGVzdHJveV9sb2NhbGAuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnk6IEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYHJjdmJ1ZmAsIGBoZWFkcm9vbWAsIGBza2AsIGBuZXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBjcmVhdGVkLCByZWFkLCBvciBtb2RpZmllZC5cXG4yLiBLZXJuZWwtdG8tVXNlciBJbmZvLUxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBvdXRwdXRzKS5cXG4zLiBCdWcgRGV0ZWN0b3IgQXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gKGBza19yZWNlaXZlX3F1ZXVlLmxvY2tgKSwgc29ja2V0IHJlZmVyZW5jZSBsaWZlY3ljbGUgLyB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGFjY291bnRpbmcgZXJyb3JzLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoTE9DS0RFUCwgS0FTQU4sIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgYXNzZXJ0aW9ucyksIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[1] Phase: Succeeded StartedAt: 2026-09-14 16:05:44 +0000 UTC FinishedAt: 2026-09-14 16:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 16:05:44 +0000 UTC FinishedAt: 2026-09-14 16:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2] Phase: Succeeded StartedAt: 2026-09-14 16:05:44 +0000 UTC FinishedAt: 2026-09-14 19:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 16:05:44 +0000 UTC FinishedAt: 2026-09-14 19:57:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 16:05:44 +0000 UTC FinishedAt: 2026-09-14 16:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 16:05:44 +0000 UTC FinishedAt: 2026-09-14 16:05:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-convert-artifact-1198070589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 16:05:54 +0000 UTC FinishedAt: 2026-09-14 16:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 16:05:54 +0000 UTC FinishedAt: 2026-09-14 16:26:19 +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:*b3fedbe7-18f4-4878-9b28-c925e3eb8b64,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-workflowhqshz/series-workflowhqshz-convert-artifact-1198070589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "43ee0580-14ad-4f6e-9cf9-09c816628e9b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1774339187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 16:05:54 +0000 UTC FinishedAt: 2026-09-14 16:25:40 +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:*b3fedbe7-18f4-4878-9b28-c925e3eb8b64,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-workflowhqshz/series-workflowhqshz-convert-artifact-1198070589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "43ee0580-14ad-4f6e-9cf9-09c816628e9b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1774339187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 16:26:19 +0000 UTC FinishedAt: 2026-09-14 16:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 16:26:19 +0000 UTC FinishedAt: 2026-09-14 16:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 16:26:19 +0000 UTC FinishedAt: 2026-09-14 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 16:26:19 +0000 UTC FinishedAt: 2026-09-14 16:26:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-convert-artifact-2801439896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 16:26:47 +0000 UTC FinishedAt: 2026-09-14 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 16:26:47 +0000 UTC FinishedAt: 2026-09-14 16:28:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43ee0580-14ad-4f6e-9cf9-09c816628e9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1774339187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 16:28:41 +0000 UTC FinishedAt: 2026-09-14 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 16:28:41 +0000 UTC FinishedAt: 2026-09-14 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 16:28:41 +0000 UTC FinishedAt: 2026-09-14 16:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 16:28:41 +0000 UTC FinishedAt: 2026-09-14 16:44:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b3fedbe7-18f4-4878-9b28-c925e3eb8b64,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-workflowhqshz/series-workflowhqshz-convert-artifact-2801439896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bf8ab122-bba6-4358-833f-78f8f22e680b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1064168708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 16:28:41 +0000 UTC FinishedAt: 2026-09-14 16:44:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b3fedbe7-18f4-4878-9b28-c925e3eb8b64,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-workflowhqshz/series-workflowhqshz-convert-artifact-2801439896/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bf8ab122-bba6-4358-833f-78f8f22e680b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1064168708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 16:44:40 +0000 UTC FinishedAt: 2026-09-14 16:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 16:44:40 +0000 UTC FinishedAt: 2026-09-14 16:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 16:44:40 +0000 UTC FinishedAt: 2026-09-14 16:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 16:44:40 +0000 UTC FinishedAt: 2026-09-14 16:46:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf8ab122-bba6-4358-833f-78f8f22e680b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1064168708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 19:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 19:57:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*43ee0580-14ad-4f6e-9cf9-09c816628e9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf8ab122-bba6-4358-833f-78f8f22e680b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1774339187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1064168708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 16:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 16:47:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-convert-artifact-895591793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 16:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 16:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 16:46:57 +0000 UTC FinishedAt: 2026-09-14 16:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 16:47:20 +0000 UTC FinishedAt: 2026-09-14 19:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_skb_orphan_udp","rxrpc_destroy_local","rxrpc_open_socket","rxrpc_lookup_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET","IPV6","AF_RXRPC_IPV6"],"series_id":"4d5d5beb-6f87-42b7-b3e5-5ae1b8976f92","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 16:47:20 +0000 UTC FinishedAt: 2026-09-14 19:57:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43ee0580-14ad-4f6e-9cf9-09c816628e9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf8ab122-bba6-4358-833f-78f8f22e680b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1774339187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-build-action-1064168708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhqshz/series-workflowhqshz-convert-artifact-895591793/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,}